@kilterset/auth0-actions-testing
Version:
Test and develop Auth0 Actions or Okta CIC Actions locally.
124 lines (108 loc) • 3.77 kB
text/typescript
type SamlAttributeValue =
| string
| number
| boolean
| null
| Array<string | number | boolean>;
interface SamlResponseState {
attributes: Record<string, SamlAttributeValue>;
createUpnClaim: boolean;
passthroughClaimsWithNoMapping: boolean;
mapUnknownClaimsAsIs: boolean;
mapIdentities: boolean;
signResponse: boolean;
lifetimeInSeconds: number;
nameIdentifierFormat: string;
nameIdentifierProbes: string[];
authnContextClassRef: string;
includeAttributeNameFormat: boolean;
typedAttributes: boolean;
audience: string;
recipient: string;
destination: string;
cert?: string;
encryptionCert?: string;
encryptionPublicKey?: string;
key?: string;
signingCert?: string;
}
interface SamlResponse {
setAttribute(
attribute: string,
value: string | number | boolean | null | (string | number | boolean)[]
): void;
setAudience(audience: string): void;
setRecipient(recipient: string): void;
setCreateUpnClaim(createUpnClaim: boolean): void;
setPassthroughClaimsWithNoMapping(
passthroughClaimsWithNoMapping: boolean
): void;
setMapUnknownClaimsAsIs(mapUnknownClaimsAsIs: boolean): void;
setMapIdentities(mapIdentities: boolean): void;
setSignatureAlgorithm(signatureAlgorithm: "rsa-sha256"): void;
setSignatureAlgorithm(signatureAlgorithm: "rsa-sha1"): void;
setDigestAlgorithm(digestAlgorithm: "sha256"): void;
setDigestAlgorithm(digestAlgorithm: "sha1"): void;
setDestination(destination: string): void;
setLifetimeInSeconds(lifetimeInSeconds: number): void;
setSignResponse(signResponse: boolean): void;
setNameIdentifierFormat(nameIdentifierFormat: string): void;
setNameIdentifierProbes(nameIdentifierProbes: string[]): void;
setAuthnContextClassRef(authnContextClassRef: string): void;
setSigningCert(signingCert: string): void;
setIncludeAttributeNameFormat(includeAttributeNameFormat: boolean): void;
setTypedAttributes(typedAttributes: boolean): void;
setEncryptionCert(encryptionCert: string): void;
setEncryptionPublicKey(encryptionPublicKey: string): void;
setCert(cert: string): void;
setKey(key: string): void;
}
export function samlResponseMock(flow: string) {
const state: SamlResponseState = {
// Custom attributes
attributes: {},
// Default literal values
createUpnClaim: true,
passthroughClaimsWithNoMapping: true,
mapUnknownClaimsAsIs: false,
mapIdentities: true,
signResponse: false,
includeAttributeNameFormat: true,
typedAttributes: true,
lifetimeInSeconds: 3600,
nameIdentifierFormat:
"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified",
nameIdentifierProbes: [
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
],
authnContextClassRef:
"urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified",
// Default dynamic values
audience: "default-audience",
recipient: "default-recipient",
destination: "default-destination",
};
const samlResponse = {
setAttribute: (attribute: string, value: SamlAttributeValue) => {
state.attributes[attribute] = value;
},
} as SamlResponse;
for (const property in state) {
if (state.hasOwnProperty(property)) {
const key = property as keyof SamlResponseState;
if (key === "attributes") {
continue;
}
const setter = `set${key[0].toUpperCase()}${key.slice(
1
)}` as keyof SamlResponse;
samlResponse[setter] = (value: unknown) => {
state[key] = value as never;
};
}
}
const build = <T>(api: T) => samlResponse;
return { state, build };
}