UNPKG

@intuitionrobotics/user-account

Version:
48 lines 2.06 kB
import { IdentityProvider, ServiceProvider } from "saml2-js"; import { __stringify, ImplementationMissingException, Module } from "@intuitionrobotics/ts-common"; import {} from "./_imports.js"; export class SamlModule_Class extends Module { _identityProvider; constructor() { super("SamlModule"); } // Lazily created on first SAML use; config is asserted here (was init()). get identityProvider() { if (!this.config.idConfig) throw new ImplementationMissingException("Config must contain idConfig"); if (!this.config.spConfig) throw new ImplementationMissingException("Config must contain spConfig"); return this._identityProvider ??= new IdentityProvider(this.config.idConfig); } loginRequest = async (loginContext) => { return new Promise((resolve, rejected) => { const sp = new ServiceProvider(this.config.spConfig); const options = { relay_state: __stringify(loginContext) }; sp.create_login_request_url(this.identityProvider, options, (error, loginUrl, _requestId) => { if (error) return rejected(error); resolve(loginUrl); }); }); }; assert = async (options) => new Promise((resolve, rejected) => { const sp = new ServiceProvider(this.config.spConfig); sp.post_assert(this.identityProvider, options, async (error, response) => { if (error) return rejected(error); const userId = response.user.name_id; const relay_state = options.request_body.RelayState; if (!relay_state) return rejected(`LoginContext lost along the way for userId '${userId}'`); resolve({ userId: userId, loginContext: JSON.parse(relay_state), fullResponse: response }); }); }); } export const SamlModule = new SamlModule_Class(); //# sourceMappingURL=SamlModule.js.map