@keycloakify/keycloak-admin-ui
Version:
<p align="center"> <img src="https://github.com/user-attachments/assets/a6aaebbd-8f59-474d-9827-c282f4527aca"> </p> <p align="center"> <i>Repackaged Keycloak Admin UI</i> <br> <br> <a href="https://github.com/keycloakify/keycloak-adm
65 lines (48 loc) • 1.46 kB
text/typescript
/* eslint-disable */
// @ts-nocheck
import type PasswordPolicyTypeRepresentation from "@keycloak/keycloak-admin-client/lib/defs/passwordPolicyTypeRepresentation";
export type SubmittedValues = {
[index: string]: string;
};
const POLICY_SEPARATOR = " and ";
export const serializePolicy = (
policies: PasswordPolicyTypeRepresentation[],
submitted: SubmittedValues,
) =>
policies
.map((policy) => `${policy.id}(${submitted[policy.id!]})`)
.join(POLICY_SEPARATOR);
type PolicyValue = PasswordPolicyTypeRepresentation & {
value?: string;
};
export const parsePolicy = (
value: string,
policies: PasswordPolicyTypeRepresentation[],
) =>
value
.split(POLICY_SEPARATOR)
.map(parsePolicyToken)
.reduce<PolicyValue[]>((result, { id, value }) => {
const matchingPolicy = policies.find((policy) => policy.id === id);
if (!matchingPolicy) {
return result;
}
return result.concat({ ...matchingPolicy, value });
}, []);
type PolicyTokenParsed = {
id: string;
value?: string;
};
function parsePolicyToken(token: string): PolicyTokenParsed {
const valueStart = token.indexOf("(");
if (valueStart === -1) {
return { id: token.trim() };
}
const id = token.substring(0, valueStart).trim();
const valueEnd = token.lastIndexOf(")");
if (valueEnd === -1) {
return { id };
}
const value = token.substring(valueStart + 1, valueEnd).trim();
return { id, value };
}