@intuitionrobotics/user-account
Version:
48 lines • 2.06 kB
JavaScript
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