Prettier: switch to trailing coma: none

This commit is contained in:
garronej 2022-08-20 11:44:48 +07:00
parent 832434095e
commit a1a65c5529
260 changed files with 574 additions and 574 deletions

View File

@ -5,7 +5,7 @@
"semi": true, "semi": true,
"singleQuote": false, "singleQuote": false,
"quoteProps": "preserve", "quoteProps": "preserve",
"trailingComma": "all", "trailingComma": "none",
"bracketSpacing": true, "bracketSpacing": true,
"arrowParens": "avoid" "arrowParens": "avoid"
} }

View File

@ -23,9 +23,9 @@ const zParsedPackageJson = z.object({
.object({ .object({
"extraPages": z.array(z.string()).optional(), "extraPages": z.array(z.string()).optional(),
"extraThemeProperties": z.array(z.string()).optional(), "extraThemeProperties": z.array(z.string()).optional(),
"isAppAndKeycloakServerSharingSameDomain": z.boolean().optional(), "isAppAndKeycloakServerSharingSameDomain": z.boolean().optional()
}) })
.optional(), .optional()
}); });
assert<Equals<ReturnType<typeof zParsedPackageJson["parse"]>, ParsedPackageJson>>(); assert<Equals<ReturnType<typeof zParsedPackageJson["parse"]>, ParsedPackageJson>>();
@ -99,7 +99,7 @@ export function readBuildOptions(params: {
const out = url.pathname.replace(/([^/])$/, "$1/"); const out = url.pathname.replace(/([^/])$/, "$1/");
return out === "/" ? undefined : out; return out === "/" ? undefined : out;
})(), })()
}; };
})(); })();
@ -130,20 +130,20 @@ export function readBuildOptions(params: {
})(), })(),
"version": version, "version": version,
extraPages, extraPages,
extraThemeProperties, extraThemeProperties
}; };
})(); })();
if (isExternalAssetsCliParamProvided) { if (isExternalAssetsCliParamProvided) {
const commonExternalAssets = id<BuildOptions.ExternalAssets.CommonExternalAssets>({ const commonExternalAssets = id<BuildOptions.ExternalAssets.CommonExternalAssets>({
...common, ...common,
"isStandalone": false, "isStandalone": false
}); });
if (parsedPackageJson.keycloakify?.isAppAndKeycloakServerSharingSameDomain) { if (parsedPackageJson.keycloakify?.isAppAndKeycloakServerSharingSameDomain) {
return id<BuildOptions.ExternalAssets.SameDomain>({ return id<BuildOptions.ExternalAssets.SameDomain>({
...commonExternalAssets, ...commonExternalAssets,
"isAppAndKeycloakServerSharingSameDomain": true, "isAppAndKeycloakServerSharingSameDomain": true
}); });
} else { } else {
assert( assert(
@ -156,15 +156,15 @@ export function readBuildOptions(params: {
"Alternatively, if your app and the Keycloak server are on the same domain, ", "Alternatively, if your app and the Keycloak server are on the same domain, ",
"eg https://example.com is your app and https://example.com/auth is the keycloak", "eg https://example.com is your app and https://example.com/auth is the keycloak",
'admin UI, you can set "keycloakify": { "isAppAndKeycloakServerSharingSameDomain": true }', 'admin UI, you can set "keycloakify": { "isAppAndKeycloakServerSharingSameDomain": true }',
"in your package.json", "in your package.json"
].join(" "), ].join(" ")
); );
return id<BuildOptions.ExternalAssets.DifferentDomains>({ return id<BuildOptions.ExternalAssets.DifferentDomains>({
...commonExternalAssets, ...commonExternalAssets,
"isAppAndKeycloakServerSharingSameDomain": false, "isAppAndKeycloakServerSharingSameDomain": false,
"urlOrigin": url.origin, "urlOrigin": url.origin,
"urlPathname": url.pathname, "urlPathname": url.pathname
}); });
} }
} }
@ -172,6 +172,6 @@ export function readBuildOptions(params: {
return id<BuildOptions.Standalone>({ return id<BuildOptions.Standalone>({
...common, ...common,
"isStandalone": true, "isStandalone": true,
"urlPathname": url?.pathname, "urlPathname": url?.pathname
}); });
} }

View File

@ -17,7 +17,7 @@ export function main() {
const buildOptions = readBuildOptions({ const buildOptions = readBuildOptions({
"packageJson": fs.readFileSync(pathJoin(reactProjectDirPath, "")).toString("utf8"), "packageJson": fs.readFileSync(pathJoin(reactProjectDirPath, "")).toString("utf8"),
"CNAME": fs.readFileSync(pathJoin(reactProjectDirPath, "public", "CNAME")).toString("utf8"), "CNAME": fs.readFileSync(pathJoin(reactProjectDirPath, "public", "CNAME")).toString("utf8"),
"isExternalAssetsCliParamProvided": process.argv[2]?.toLowerCase() === "--external-assets", "isExternalAssetsCliParamProvided": process.argv[2]?.toLowerCase() === "--external-assets"
}); });
const { doBundlesEmailTemplate } = generateKeycloakThemeResources({ const { doBundlesEmailTemplate } = generateKeycloakThemeResources({
@ -28,18 +28,18 @@ export function main() {
//We have to leave it at that otherwise we break our default theme. //We have to leave it at that otherwise we break our default theme.
//Problem is that we can't guarantee that the the old resources //Problem is that we can't guarantee that the the old resources
//will still be available on the newer keycloak version. //will still be available on the newer keycloak version.
"keycloakVersion": "11.0.3", "keycloakVersion": "11.0.3"
}); });
const { jarFilePath } = generateJavaStackFiles({ const { jarFilePath } = generateJavaStackFiles({
"version": buildOptions.version, "version": buildOptions.version,
keycloakThemeBuildingDirPath, keycloakThemeBuildingDirPath,
doBundlesEmailTemplate, doBundlesEmailTemplate,
buildOptions, buildOptions
}); });
child_process.execSync("mvn package", { child_process.execSync("mvn package", {
"cwd": keycloakThemeBuildingDirPath, "cwd": keycloakThemeBuildingDirPath
}); });
//We want, however, to test in a container running the latest Keycloak version //We want, however, to test in a container running the latest Keycloak version
@ -48,7 +48,7 @@ export function main() {
generateStartKeycloakTestingContainer({ generateStartKeycloakTestingContainer({
keycloakThemeBuildingDirPath, keycloakThemeBuildingDirPath,
"keycloakVersion": containerKeycloakVersion, "keycloakVersion": containerKeycloakVersion,
buildOptions, buildOptions
}); });
console.log( console.log(
@ -100,7 +100,7 @@ export function main() {
`- Go to 👉 https://www.keycloak.org/app/ 👈 Click "Save" then "Sign in". You should see your login page`, `- Go to 👉 https://www.keycloak.org/app/ 👈 Click "Save" then "Sign in". You should see your login page`,
"", "",
"Video demoing this process: https://youtu.be/N3wlBoH4hKg", "Video demoing this process: https://youtu.be/N3wlBoH4hKg",
"", ""
].join("\n"), ].join("\n")
); );
} }

View File

@ -27,7 +27,7 @@ export const pageIds = [
"login-idp-link-email.ftl", "login-idp-link-email.ftl",
"login-page-expired.ftl", "login-page-expired.ftl",
"login-config-totp.ftl", "login-config-totp.ftl",
"logout-confirm.ftl", "logout-confirm.ftl"
] as const; ] as const;
export type BuildOptionsLike = BuildOptionsLike.Standalone | BuildOptionsLike.ExternalAssets; export type BuildOptionsLike = BuildOptionsLike.Standalone | BuildOptionsLike.ExternalAssets;
@ -83,7 +83,7 @@ export function generateFtlFilesCodeFactory(params: {
$("script:not([src])").each((...[, element]) => { $("script:not([src])").each((...[, element]) => {
const { fixedJsCode } = replaceImportsFromStaticInJsCode({ const { fixedJsCode } = replaceImportsFromStaticInJsCode({
"jsCode": $(element).html()!, "jsCode": $(element).html()!,
buildOptions, buildOptions
}); });
$(element).text(fixedJsCode); $(element).text(fixedJsCode);
@ -92,7 +92,7 @@ export function generateFtlFilesCodeFactory(params: {
$("style").each((...[, element]) => { $("style").each((...[, element]) => {
const { fixedCssCode } = replaceImportsInInlineCssCode({ const { fixedCssCode } = replaceImportsInInlineCssCode({
"cssCode": $(element).html()!, "cssCode": $(element).html()!,
buildOptions, buildOptions
}); });
$(element).text(fixedCssCode); $(element).text(fixedCssCode);
@ -101,7 +101,7 @@ export function generateFtlFilesCodeFactory(params: {
( (
[ [
["link", "href"], ["link", "href"],
["script", "src"], ["script", "src"]
] as const ] as const
).forEach(([selector, attrName]) => ).forEach(([selector, attrName]) =>
$(selector).each((...[, element]) => { $(selector).each((...[, element]) => {
@ -115,9 +115,9 @@ export function generateFtlFilesCodeFactory(params: {
attrName, attrName,
buildOptions.isStandalone buildOptions.isStandalone
? href.replace(new RegExp(`^${(buildOptions.urlPathname ?? "/").replace(/\//g, "\\/")}`), "${url.resourcesPath}/build/") ? href.replace(new RegExp(`^${(buildOptions.urlPathname ?? "/").replace(/\//g, "\\/")}`), "${url.resourcesPath}/build/")
: href.replace(/^\//, `${buildOptions.urlOrigin}/`), : href.replace(/^\//, `${buildOptions.urlOrigin}/`)
); );
}), })
); );
if (Object.keys(cssGlobalsToDefine).length !== 0) { if (Object.keys(cssGlobalsToDefine).length !== 0) {
@ -127,11 +127,11 @@ export function generateFtlFilesCodeFactory(params: {
"<style>", "<style>",
generateCssCodeToDefineGlobals({ generateCssCodeToDefineGlobals({
cssGlobalsToDefine, cssGlobalsToDefine,
buildOptions, buildOptions
}).cssCodeToPrependInHead, }).cssCodeToPrependInHead,
"</style>", "</style>",
"", ""
].join("\n"), ].join("\n")
); );
} }
} }
@ -147,8 +147,8 @@ export function generateFtlFilesCodeFactory(params: {
" <#list scripts as script>", " <#list scripts as script>",
' <script src="${script}" type="text/javascript"></script>', ' <script src="${script}" type="text/javascript"></script>',
" </#list>", " </#list>",
"</#if>", "</#if>"
].join("\n"), ].join("\n")
}; };
$("head").prepend( $("head").prepend(
@ -157,8 +157,8 @@ export function generateFtlFilesCodeFactory(params: {
` window.${ftlValuesGlobalName}= ${objectKeys(replaceValueBySearchValue)[0]};`, ` window.${ftlValuesGlobalName}= ${objectKeys(replaceValueBySearchValue)[0]};`,
"</script>", "</script>",
"", "",
objectKeys(replaceValueBySearchValue)[1], objectKeys(replaceValueBySearchValue)[1]
].join("\n"), ].join("\n")
); );
const partiallyFixedIndexHtmlCode = $.html(); const partiallyFixedIndexHtmlCode = $.html();
@ -175,7 +175,7 @@ export function generateFtlFilesCodeFactory(params: {
Object.entries({ Object.entries({
...replaceValueBySearchValue, ...replaceValueBySearchValue,
//If updated, don't forget to change in the ftl script as well. //If updated, don't forget to change in the ftl script as well.
"PAGE_ID_xIgLsPgGId9D8e": pageId, "PAGE_ID_xIgLsPgGId9D8e": pageId
}).map(([searchValue, replaceValue]) => (ftlCode = ftlCode.replace(searchValue, replaceValue))); }).map(([searchValue, replaceValue]) => (ftlCode = ftlCode.replace(searchValue, replaceValue)));
return { ftlCode }; return { ftlCode };

View File

@ -27,7 +27,7 @@ export function generateJavaStackFiles(params: {
version, version,
buildOptions: { groupId, themeName }, buildOptions: { groupId, themeName },
keycloakThemeBuildingDirPath, keycloakThemeBuildingDirPath,
doBundlesEmailTemplate, doBundlesEmailTemplate
} = params; } = params;
{ {
@ -47,7 +47,7 @@ export function generateJavaStackFiles(params: {
` <version>${version}</version>`, ` <version>${version}</version>`,
` <name>${artefactId}</name>`, ` <name>${artefactId}</name>`,
` <description />`, ` <description />`,
`</project>`, `</project>`
].join("\n"); ].join("\n");
return { pomFileCode }; return { pomFileCode };
@ -71,19 +71,19 @@ export function generateJavaStackFiles(params: {
"themes": [ "themes": [
{ {
"name": themeName, "name": themeName,
"types": ["login", ...(doBundlesEmailTemplate ? ["email"] : [])], "types": ["login", ...(doBundlesEmailTemplate ? ["email"] : [])]
}, }
], ]
}, },
null, null,
2, 2
), ),
"utf8", "utf8"
), )
); );
} }
return { return {
"jarFilePath": pathJoin(keycloakThemeBuildingDirPath, "target", `${themeName}-${version}.jar`), "jarFilePath": pathJoin(keycloakThemeBuildingDirPath, "target", `${themeName}-${version}.jar`)
}; };
} }

View File

@ -73,7 +73,7 @@ export function generateKeycloakThemeResources(params: {
buildOptions.isStandalone && buildOptions.isStandalone &&
isInside({ isInside({
"dirPath": pathJoin(reactAppBuildDirPath, mockTestingSubDirOfPublicDirBasename), "dirPath": pathJoin(reactAppBuildDirPath, mockTestingSubDirOfPublicDirBasename),
filePath, filePath
}) })
) { ) {
return undefined; return undefined;
@ -85,12 +85,12 @@ export function generateKeycloakThemeResources(params: {
} }
const { cssGlobalsToDefine, fixedCssCode } = replaceImportsInCssCode({ const { cssGlobalsToDefine, fixedCssCode } = replaceImportsInCssCode({
"cssCode": sourceCode.toString("utf8"), "cssCode": sourceCode.toString("utf8")
}); });
allCssGlobalsToDefine = { allCssGlobalsToDefine = {
...allCssGlobalsToDefine, ...allCssGlobalsToDefine,
...cssGlobalsToDefine, ...cssGlobalsToDefine
}; };
return { "modifiedSourceCode": Buffer.from(fixedCssCode, "utf8") }; return { "modifiedSourceCode": Buffer.from(fixedCssCode, "utf8") };
@ -103,14 +103,14 @@ export function generateKeycloakThemeResources(params: {
const { fixedJsCode } = replaceImportsFromStaticInJsCode({ const { fixedJsCode } = replaceImportsFromStaticInJsCode({
"jsCode": sourceCode.toString("utf8"), "jsCode": sourceCode.toString("utf8"),
buildOptions, buildOptions
}); });
return { "modifiedSourceCode": Buffer.from(fixedJsCode, "utf8") }; return { "modifiedSourceCode": Buffer.from(fixedJsCode, "utf8") };
} }
return buildOptions.isStandalone ? { "modifiedSourceCode": sourceCode } : undefined; return buildOptions.isStandalone ? { "modifiedSourceCode": sourceCode } : undefined;
}, }
}); });
let doBundlesEmailTemplate: boolean; let doBundlesEmailTemplate: boolean;
@ -120,8 +120,8 @@ export function generateKeycloakThemeResources(params: {
console.log( console.log(
[ [
`Not bundling email template because ${pathBasename(keycloakThemeEmailDirPath)} does not exist`, `Not bundling email template because ${pathBasename(keycloakThemeEmailDirPath)} does not exist`,
`To start customizing the email template, run: 👉 npx create-keycloak-email-directory 👈`, `To start customizing the email template, run: 👉 npx create-keycloak-email-directory 👈`
].join("\n"), ].join("\n")
); );
doBundlesEmailTemplate = false; doBundlesEmailTemplate = false;
break email; break email;
@ -131,14 +131,14 @@ export function generateKeycloakThemeResources(params: {
transformCodebase({ transformCodebase({
"srcDirPath": keycloakThemeEmailDirPath, "srcDirPath": keycloakThemeEmailDirPath,
"destDirPath": pathJoin(themeDirPath, "..", "email"), "destDirPath": pathJoin(themeDirPath, "..", "email")
}); });
} }
const { generateFtlFilesCode } = generateFtlFilesCodeFactory({ const { generateFtlFilesCode } = generateFtlFilesCodeFactory({
"indexHtmlCode": fs.readFileSync(pathJoin(reactAppBuildDirPath, "index.html")).toString("utf8"), "indexHtmlCode": fs.readFileSync(pathJoin(reactAppBuildDirPath, "index.html")).toString("utf8"),
"cssGlobalsToDefine": allCssGlobalsToDefine, "cssGlobalsToDefine": allCssGlobalsToDefine,
"buildOptions": buildOptions, "buildOptions": buildOptions
}); });
[...pageIds, ...(buildOptions.extraPages ?? [])].forEach(pageId => { [...pageIds, ...(buildOptions.extraPages ?? [])].forEach(pageId => {
@ -154,26 +154,26 @@ export function generateKeycloakThemeResources(params: {
downloadBuiltinKeycloakTheme({ downloadBuiltinKeycloakTheme({
keycloakVersion, keycloakVersion,
"destDirPath": tmpDirPath, "destDirPath": tmpDirPath
}); });
const themeResourcesDirPath = pathJoin(themeDirPath, "resources"); const themeResourcesDirPath = pathJoin(themeDirPath, "resources");
transformCodebase({ transformCodebase({
"srcDirPath": pathJoin(tmpDirPath, "keycloak", "login", "resources"), "srcDirPath": pathJoin(tmpDirPath, "keycloak", "login", "resources"),
"destDirPath": themeResourcesDirPath, "destDirPath": themeResourcesDirPath
}); });
const reactAppPublicDirPath = pathJoin(reactAppBuildDirPath, "..", "public"); const reactAppPublicDirPath = pathJoin(reactAppBuildDirPath, "..", "public");
transformCodebase({ transformCodebase({
"srcDirPath": pathJoin(tmpDirPath, "keycloak", "common", "resources"), "srcDirPath": pathJoin(tmpDirPath, "keycloak", "common", "resources"),
"destDirPath": pathJoin(themeResourcesDirPath, pathBasename(mockTestingResourcesCommonPath)), "destDirPath": pathJoin(themeResourcesDirPath, pathBasename(mockTestingResourcesCommonPath))
}); });
transformCodebase({ transformCodebase({
"srcDirPath": themeResourcesDirPath, "srcDirPath": themeResourcesDirPath,
"destDirPath": pathJoin(reactAppPublicDirPath, mockTestingResourcesPath), "destDirPath": pathJoin(reactAppPublicDirPath, mockTestingResourcesPath)
}); });
const keycloakResourcesWithinPublicDirPath = pathJoin(reactAppPublicDirPath, mockTestingSubDirOfPublicDirBasename); const keycloakResourcesWithinPublicDirPath = pathJoin(reactAppPublicDirPath, mockTestingSubDirOfPublicDirBasename);
@ -181,8 +181,8 @@ export function generateKeycloakThemeResources(params: {
fs.writeFileSync( fs.writeFileSync(
pathJoin(keycloakResourcesWithinPublicDirPath, "README.txt"), pathJoin(keycloakResourcesWithinPublicDirPath, "README.txt"),
Buffer.from( Buffer.from(
["This is just a test folder that helps develop", "the login and register page without having to run a Keycloak container"].join(" "), ["This is just a test folder that helps develop", "the login and register page without having to run a Keycloak container"].join(" ")
), )
); );
fs.writeFileSync(pathJoin(keycloakResourcesWithinPublicDirPath, ".gitignore"), Buffer.from("*", "utf8")); fs.writeFileSync(pathJoin(keycloakResourcesWithinPublicDirPath, ".gitignore"), Buffer.from("*", "utf8"));
@ -192,7 +192,7 @@ export function generateKeycloakThemeResources(params: {
fs.writeFileSync( fs.writeFileSync(
pathJoin(themeDirPath, "theme.properties"), pathJoin(themeDirPath, "theme.properties"),
Buffer.from(["parent=keycloak", ...(buildOptions.extraThemeProperties ?? [])].join("\n\n"), "utf8"), Buffer.from(["parent=keycloak", ...(buildOptions.extraThemeProperties ?? [])].join("\n\n"), "utf8")
); );
return { doBundlesEmailTemplate }; return { doBundlesEmailTemplate };

View File

@ -27,7 +27,7 @@ export function generateStartKeycloakTestingContainer(params: {
const { const {
keycloakThemeBuildingDirPath, keycloakThemeBuildingDirPath,
keycloakVersion, keycloakVersion,
buildOptions: { themeName }, buildOptions: { themeName }
} = params; } = params;
fs.writeFileSync( fs.writeFileSync(
@ -52,14 +52,14 @@ export function generateStartKeycloakTestingContainer(params: {
"main", "main",
"resources", "resources",
"theme", "theme",
themeName, themeName
)}:/opt/keycloak/themes/${themeName}:rw \\`, )}:/opt/keycloak/themes/${themeName}:rw \\`,
` -it quay.io/keycloak/keycloak:${keycloakVersion} \\`, ` -it quay.io/keycloak/keycloak:${keycloakVersion} \\`,
` start-dev`, ` start-dev`,
"", ""
].join("\n"), ].join("\n"),
"utf8", "utf8"
), ),
{ "mode": 0o755 }, { "mode": 0o755 }
); );
} }

View File

@ -61,7 +61,7 @@ export function replaceImportsFromStaticInJsCode(params: { jsCode: string; build
` `
} }
return "${u}"; return "${u}";
})()] = function(${e}) { return "${buildOptions.isStandalone ? "/build/" : ""}static/${language}/"`, })()] = function(${e}) { return "${buildOptions.isStandalone ? "/build/" : ""}static/${language}/"`
]; ];
const fixedJsCode = jsCode const fixedJsCode = jsCode
@ -70,13 +70,13 @@ export function replaceImportsFromStaticInJsCode(params: { jsCode: string; build
.replace(/([a-zA-Z]+\.[a-zA-Z]+)\+"static\//g, (...[, group]) => .replace(/([a-zA-Z]+\.[a-zA-Z]+)\+"static\//g, (...[, group]) =>
buildOptions.isStandalone buildOptions.isStandalone
? `window.${ftlValuesGlobalName}.url.resourcesPath + "/build/static/` ? `window.${ftlValuesGlobalName}.url.resourcesPath + "/build/static/`
: `("${ftlValuesGlobalName}" in window ? "${buildOptions.urlOrigin}" : "") + ${group} + "static/`, : `("${ftlValuesGlobalName}" in window ? "${buildOptions.urlOrigin}" : "") + ${group} + "static/`
) )
//TODO: Write a test case for this //TODO: Write a test case for this
.replace(/".chunk.css",([a-zA-Z])+=([a-zA-Z]+\.[a-zA-Z]+)\+([a-zA-Z]+),/, (...[, group1, group2, group3]) => .replace(/".chunk.css",([a-zA-Z])+=([a-zA-Z]+\.[a-zA-Z]+)\+([a-zA-Z]+),/, (...[, group1, group2, group3]) =>
buildOptions.isStandalone buildOptions.isStandalone
? `".chunk.css",${group1} = window.${ftlValuesGlobalName}.url.resourcesPath + "/build/" + ${group3},` ? `".chunk.css",${group1} = window.${ftlValuesGlobalName}.url.resourcesPath + "/build/" + ${group3},`
: `".chunk.css",${group1} = ("${ftlValuesGlobalName}" in window ? "${buildOptions.urlOrigin}" : "") + ${group2} + ${group3},`, : `".chunk.css",${group1} = ("${ftlValuesGlobalName}" in window ? "${buildOptions.urlOrigin}" : "") + ${group2} + ${group3},`
); );
return { fixedJsCode }; return { fixedJsCode };

View File

@ -25,7 +25,7 @@ export function replaceImportsInCssCode(params: { cssCode: string }): {
const cssGlobalsToDefine: Record<string, string> = {}; const cssGlobalsToDefine: Record<string, string> = {};
new Set(cssCode.match(/url\(["']?\/[^/][^)"']+["']?\)[^;}]*/g) ?? []).forEach( new Set(cssCode.match(/url\(["']?\/[^/][^)"']+["']?\)[^;}]*/g) ?? []).forEach(
match => (cssGlobalsToDefine["url" + crypto.createHash("sha256").update(match).digest("hex").substring(0, 15)] = match), match => (cssGlobalsToDefine["url" + crypto.createHash("sha256").update(match).digest("hex").substring(0, 15)] = match)
); );
let fixedCssCode = cssCode; let fixedCssCode = cssCode;
@ -33,7 +33,7 @@ export function replaceImportsInCssCode(params: { cssCode: string }): {
Object.keys(cssGlobalsToDefine).forEach( Object.keys(cssGlobalsToDefine).forEach(
cssVariableName => cssVariableName =>
//NOTE: split/join pattern ~ replace all //NOTE: split/join pattern ~ replace all
(fixedCssCode = fixedCssCode.split(cssGlobalsToDefine[cssVariableName]).join(`var(--${cssVariableName})`)), (fixedCssCode = fixedCssCode.split(cssGlobalsToDefine[cssVariableName]).join(`var(--${cssVariableName})`))
); );
return { fixedCssCode, cssGlobalsToDefine }; return { fixedCssCode, cssGlobalsToDefine };
@ -53,12 +53,12 @@ export function generateCssCodeToDefineGlobals(params: { cssGlobalsToDefine: Rec
`--${cssVariableName}:`, `--${cssVariableName}:`,
cssGlobalsToDefine[cssVariableName].replace( cssGlobalsToDefine[cssVariableName].replace(
new RegExp(`url\\(${(buildOptions.urlPathname ?? "/").replace(/\//g, "\\/")}`, "g"), new RegExp(`url\\(${(buildOptions.urlPathname ?? "/").replace(/\//g, "\\/")}`, "g"),
"url(${url.resourcesPath}/build/", "url(${url.resourcesPath}/build/"
), )
].join(" "), ].join(" ")
) )
.map(line => ` ${line};`), .map(line => ` ${line};`),
"}", "}"
].join("\n"), ].join("\n")
}; };
} }

View File

@ -40,7 +40,7 @@ export function replaceImportsInInlineCssCode(params: { cssCode: string; buildOp
(...[, group]) => (...[, group]) =>
`url(${ `url(${
buildOptions.isStandalone ? "${url.resourcesPath}/build/" + group : buildOptions.urlOrigin + (buildOptions.urlPathname ?? "/") + group buildOptions.isStandalone ? "${url.resourcesPath}/build/" + group : buildOptions.urlOrigin + (buildOptions.urlPathname ?? "/") + group
})`, })`
); );
return { fixedCssCode }; return { fixedCssCode };

View File

@ -21,12 +21,12 @@ if (require.main === module) {
downloadBuiltinKeycloakTheme({ downloadBuiltinKeycloakTheme({
keycloakVersion, keycloakVersion,
"destDirPath": builtinKeycloakThemeTmpDirPath, "destDirPath": builtinKeycloakThemeTmpDirPath
}); });
transformCodebase({ transformCodebase({
"srcDirPath": pathJoin(builtinKeycloakThemeTmpDirPath, "base", "email"), "srcDirPath": pathJoin(builtinKeycloakThemeTmpDirPath, "base", "email"),
"destDirPath": keycloakThemeEmailDirPath, "destDirPath": keycloakThemeEmailDirPath
}); });
console.log(`./${pathBasename(keycloakThemeEmailDirPath)} ready to be customized`); console.log(`./${pathBasename(keycloakThemeEmailDirPath)} ready to be customized`);

View File

@ -12,7 +12,7 @@ export function downloadBuiltinKeycloakTheme(params: { keycloakVersion: string;
downloadAndUnzip({ downloadAndUnzip({
"destDirPath": destDirPath, "destDirPath": destDirPath,
"url": `https://github.com/keycloak/keycloak/archive/refs/tags/${keycloakVersion}.zip`, "url": `https://github.com/keycloak/keycloak/archive/refs/tags/${keycloakVersion}.zip`,
"pathOfDirToExtractInArchive": `keycloak-${keycloakVersion}/themes/src/main/resources${ext}/theme`, "pathOfDirToExtractInArchive": `keycloak-${keycloakVersion}/themes/src/main/resources${ext}/theme`
}); });
} }
} }
@ -27,7 +27,7 @@ if (require.main === module) {
downloadBuiltinKeycloakTheme({ downloadBuiltinKeycloakTheme({
keycloakVersion, keycloakVersion,
destDirPath, destDirPath
}); });
})(); })();
} }

View File

@ -21,7 +21,7 @@ for (const keycloakVersion of ["11.0.3", "15.0.2", "18.0.1"]) {
downloadBuiltinKeycloakTheme({ downloadBuiltinKeycloakTheme({
keycloakVersion, keycloakVersion,
"destDirPath": tmpDirPath, "destDirPath": tmpDirPath
}); });
type Dictionary = { [idiomId: string]: string }; type Dictionary = { [idiomId: string]: string };
@ -42,8 +42,8 @@ for (const keycloakVersion of ["11.0.3", "15.0.2", "18.0.1"]) {
(record[typeOfPage] ??= {})[language.replace(/_/g, "-")] = Object.fromEntries( (record[typeOfPage] ??= {})[language.replace(/_/g, "-")] = Object.fromEntries(
Object.entries(propertiesParser.parse(fs.readFileSync(pathJoin(baseThemeDirPath, filePath)).toString("utf8"))).map( Object.entries(propertiesParser.parse(fs.readFileSync(pathJoin(baseThemeDirPath, filePath)).toString("utf8"))).map(
([key, value]: any) => [key, value.replace(/''/g, "'")], ([key, value]: any) => [key, value.replace(/''/g, "'")]
), )
); );
}); });
} }
@ -69,10 +69,10 @@ for (const keycloakVersion of ["11.0.3", "15.0.2", "18.0.1"]) {
`const messages= ${JSON.stringify(recordForPageType[language], null, 2)};`, `const messages= ${JSON.stringify(recordForPageType[language], null, 2)};`,
"", "",
"export default messages;", "export default messages;",
"/* spell-checker: enable */", "/* spell-checker: enable */"
].join("\n"), ].join("\n"),
"utf8", "utf8"
), )
); );
console.log(`${filePath} wrote`); console.log(`${filePath} wrote`);

View File

@ -14,14 +14,14 @@ fs.writeFileSync(
return { return {
...packageJsonParsed, ...packageJsonParsed,
"main": packageJsonParsed["main"].replace(/^dist\//, ""), "main": packageJsonParsed["main"].replace(/^dist\//, ""),
"types": packageJsonParsed["types"].replace(/^dist\//, ""), "types": packageJsonParsed["types"].replace(/^dist\//, "")
}; };
})(), })(),
null, null,
2, 2
), ),
"utf8", "utf8"
), )
); );
const commonThirdPartyDeps = (() => { const commonThirdPartyDeps = (() => {
@ -33,10 +33,10 @@ const commonThirdPartyDeps = (() => {
.map(namespaceModuleName => .map(namespaceModuleName =>
fs fs
.readdirSync(pathJoin(keycloakifyDirPath, "node_modules", namespaceModuleName)) .readdirSync(pathJoin(keycloakifyDirPath, "node_modules", namespaceModuleName))
.map(submoduleName => `${namespaceModuleName}/${submoduleName}`), .map(submoduleName => `${namespaceModuleName}/${submoduleName}`)
) )
.reduce((prev, curr) => [...prev, ...curr], []), .reduce((prev, curr) => [...prev, ...curr], []),
...standaloneModuleNames, ...standaloneModuleNames
]; ];
})(); })();
@ -55,8 +55,8 @@ const execYarnLink = (params: { targetModuleName?: string; cwd: string }) => {
cwd, cwd,
"env": { "env": {
...process.env, ...process.env,
"HOME": yarnHomeDirPath, "HOME": yarnHomeDirPath
}, }
}); });
}; };
@ -77,7 +77,7 @@ commonThirdPartyDeps.forEach(commonThirdPartyDep => {
console.log(`${current}/${total} ${commonThirdPartyDep}`); console.log(`${current}/${total} ${commonThirdPartyDep}`);
const localInstallPath = pathJoin( const localInstallPath = pathJoin(
...[keycloakifyDirPath, "node_modules", ...(commonThirdPartyDep.startsWith("@") ? commonThirdPartyDep.split("/") : [commonThirdPartyDep])], ...[keycloakifyDirPath, "node_modules", ...(commonThirdPartyDep.startsWith("@") ? commonThirdPartyDep.split("/") : [commonThirdPartyDep])]
); );
execYarnLink({ "cwd": localInstallPath }); execYarnLink({ "cwd": localInstallPath });
@ -85,8 +85,8 @@ commonThirdPartyDeps.forEach(commonThirdPartyDep => {
testAppNames.forEach(testAppName => testAppNames.forEach(testAppName =>
execYarnLink({ execYarnLink({
"cwd": getTestAppPath(testAppName), "cwd": getTestAppPath(testAppName),
"targetModuleName": commonThirdPartyDep, "targetModuleName": commonThirdPartyDep
}), })
); );
}); });
@ -97,6 +97,6 @@ execYarnLink({ "cwd": pathJoin(keycloakifyDirPath, "dist") });
testAppNames.forEach(testAppName => testAppNames.forEach(testAppName =>
execYarnLink({ execYarnLink({
"cwd": getTestAppPath(testAppName), "cwd": getTestAppPath(testAppName),
"targetModuleName": "keycloakify", "targetModuleName": "keycloakify"
}), })
); );

View File

@ -24,9 +24,9 @@ export async function promptKeycloakVersion() {
"count": 10, "count": 10,
"doIgnoreBeta": true, "doIgnoreBeta": true,
"owner": "keycloak", "owner": "keycloak",
"repo": "keycloak", "repo": "keycloak"
}).then(arr => arr.map(({ tag }) => tag))), }).then(arr => arr.map(({ tag }) => tag))),
"11.0.3", "11.0.3"
]; ];
if (process.env["GITHUB_ACTIONS"] === "true") { if (process.env["GITHUB_ACTIONS"] === "true") {
@ -34,7 +34,7 @@ export async function promptKeycloakVersion() {
} }
const { value: keycloakVersion } = await cliSelect<string>({ const { value: keycloakVersion } = await cliSelect<string>({
"values": tags, "values": tags
}).catch(() => { }).catch(() => {
console.log("Aborting"); console.log("Aborting");

View File

@ -20,7 +20,7 @@ export namespace NpmModuleVersion {
...(() => { ...(() => {
const str = match[4]; const str = match[4];
return str === undefined ? {} : { "betaPreRelease": parseInt(str) }; return str === undefined ? {} : { "betaPreRelease": parseInt(str) };
})(), })()
}; };
} }

View File

@ -18,14 +18,14 @@ export function downloadAndUnzip(params: { url: string; destDirPath: string; pat
execSync(`curl -L ${url} -o ${zipFilePath}`, { "cwd": tmpDirPath }); execSync(`curl -L ${url} -o ${zipFilePath}`, { "cwd": tmpDirPath });
execSync(`unzip -o ${zipFilePath}${pathOfDirToExtractInArchive === undefined ? "" : ` "${pathOfDirToExtractInArchive}/**/*"`}`, { execSync(`unzip -o ${zipFilePath}${pathOfDirToExtractInArchive === undefined ? "" : ` "${pathOfDirToExtractInArchive}/**/*"`}`, {
"cwd": tmpDirPath, "cwd": tmpDirPath
}); });
rm(pathBasename(url), { "cwd": tmpDirPath }); rm(pathBasename(url), { "cwd": tmpDirPath });
transformCodebase({ transformCodebase({
"srcDirPath": pathOfDirToExtractInArchive === undefined ? tmpDirPath : pathJoin(tmpDirPath, pathOfDirToExtractInArchive), "srcDirPath": pathOfDirToExtractInArchive === undefined ? tmpDirPath : pathJoin(tmpDirPath, pathOfDirToExtractInArchive),
destDirPath, destDirPath
}); });
rm_r(tmpDirPath); rm_r(tmpDirPath);

View File

@ -5,6 +5,6 @@ import * as fs from "fs";
Object.entries<string>(JSON.parse(fs.readFileSync(pathJoin(getProjectRoot(), "package.json")).toString("utf8"))["bin"]).forEach(([, scriptPath]) => Object.entries<string>(JSON.parse(fs.readFileSync(pathJoin(getProjectRoot(), "package.json")).toString("utf8"))["bin"]).forEach(([, scriptPath]) =>
child_process.execSync(`chmod +x ${scriptPath}`, { child_process.execSync(`chmod +x ${scriptPath}`, {
"cwd": getProjectRoot(), "cwd": getProjectRoot()
}), })
); );

View File

@ -19,7 +19,7 @@ export function listTagsFactory(params: { octokit: Octokit }) {
owner, owner,
repo, repo,
per_page, per_page,
"page": page++, "page": page++
}); });
for (const branch of resp.data.map(({ name }) => name)) { for (const branch of resp.data.map(({ name }) => name)) {

View File

@ -10,7 +10,7 @@ export function rm(pathToRemove: string, options?: { cwd: string }) {
rmInternal({ rmInternal({
pathToRemove, pathToRemove,
"args": undefined, "args": undefined,
"cwd": options?.cwd, "cwd": options?.cwd
}); });
} }
@ -18,7 +18,7 @@ export function rm_r(pathToRemove: string, options?: { cwd: string }) {
rmInternal({ rmInternal({
pathToRemove, pathToRemove,
"args": "r", "args": "r",
"cwd": options?.cwd, "cwd": options?.cwd
}); });
} }
@ -26,6 +26,6 @@ export function rm_rf(pathToRemove: string, options?: { cwd: string }) {
rmInternal({ rmInternal({
pathToRemove, pathToRemove,
"args": "rf", "args": "rf",
"cwd": options?.cwd, "cwd": options?.cwd
}); });
} }

View File

@ -16,8 +16,8 @@ export function transformCodebase(params: { srcDirPath: string; destDirPath: str
srcDirPath, srcDirPath,
destDirPath, destDirPath,
transformSourceCode = id<TransformSourceCode>(({ sourceCode }) => ({ transformSourceCode = id<TransformSourceCode>(({ sourceCode }) => ({
"modifiedSourceCode": sourceCode, "modifiedSourceCode": sourceCode
})), }))
} = params; } = params;
for (const file_relative_path of crawl(srcDirPath)) { for (const file_relative_path of crawl(srcDirPath)) {
@ -25,7 +25,7 @@ export function transformCodebase(params: { srcDirPath: string; destDirPath: str
const transformSourceCodeResult = transformSourceCode({ const transformSourceCodeResult = transformSourceCode({
"sourceCode": fs.readFileSync(filePath), "sourceCode": fs.readFileSync(filePath),
"filePath": path.join(srcDirPath, file_relative_path), "filePath": path.join(srcDirPath, file_relative_path)
}); });
if (transformSourceCodeResult === undefined) { if (transformSourceCodeResult === undefined) {
@ -33,14 +33,14 @@ export function transformCodebase(params: { srcDirPath: string; destDirPath: str
} }
fs.mkdirSync(path.dirname(path.join(destDirPath, file_relative_path)), { fs.mkdirSync(path.dirname(path.join(destDirPath, file_relative_path)), {
"recursive": true, "recursive": true
}); });
const { newFileName, modifiedSourceCode } = transformSourceCodeResult; const { newFileName, modifiedSourceCode } = transformSourceCodeResult;
fs.writeFileSync( fs.writeFileSync(
path.join(path.dirname(path.join(destDirPath, file_relative_path)), newFileName ?? path.basename(file_relative_path)), path.join(path.dirname(path.join(destDirPath, file_relative_path)), newFileName ?? path.basename(file_relative_path)),
modifiedSourceCode, modifiedSourceCode
); );
} }
} }

View File

@ -26,7 +26,7 @@ const KcApp = memo(({ kcContext, i18n: userProvidedI18n, ...props }: { kcContext
const i18n = useI18n({ const i18n = useI18n({
kcContext, kcContext,
"extraMessages": {}, "extraMessages": {},
"doSkip": userProvidedI18n !== undefined, "doSkip": userProvidedI18n !== undefined
}); });
return userProvidedI18n ?? i18n; return userProvidedI18n ?? i18n;

View File

@ -37,7 +37,7 @@ export const defaultKcTemplateProps = {
"stylesCommon": [ "stylesCommon": [
"node_modules/patternfly/dist/css/patternfly.min.css", "node_modules/patternfly/dist/css/patternfly.min.css",
"node_modules/patternfly/dist/css/patternfly-additions.min.css", "node_modules/patternfly/dist/css/patternfly-additions.min.css",
"lib/zocial/zocial.css", "lib/zocial/zocial.css"
], ],
"styles": ["css/login.css"], "styles": ["css/login.css"],
"scripts": [], "scripts": [],
@ -60,7 +60,7 @@ export const defaultKcTemplateProps = {
"kcFormGroupClass": ["form-group"], "kcFormGroupClass": ["form-group"],
"kcLabelWrapperClass": ["col-xs-12", "col-sm-12", "col-md-12", "col-lg-12"], "kcLabelWrapperClass": ["col-xs-12", "col-sm-12", "col-md-12", "col-lg-12"],
"kcSignUpClass": ["login-pf-signup"], "kcSignUpClass": ["login-pf-signup"],
"kcInfoAreaWrapperClass": [], "kcInfoAreaWrapperClass": []
} as const; } as const;
assert<typeof defaultKcTemplateProps extends KcTemplateProps ? true : false>(); assert<typeof defaultKcTemplateProps extends KcTemplateProps ? true : false>();
@ -192,7 +192,7 @@ export const defaultKcProps = {
"kcSelectOTPListItemClass": ["card-pf-body", "card-pf-top-element"], "kcSelectOTPListItemClass": ["card-pf-body", "card-pf-top-element"],
"kcAuthenticatorOtpCircleClass": ["fa", "fa-mobile", "card-pf-icon-circle"], "kcAuthenticatorOtpCircleClass": ["fa", "fa-mobile", "card-pf-icon-circle"],
"kcSelectOTPItemHeadingClass": ["card-pf-title", "text-center"], "kcSelectOTPItemHeadingClass": ["card-pf-title", "text-center"],
"kcFormOptionsWrapperClass": [], "kcFormOptionsWrapperClass": []
} as const; } as const;
assert<typeof defaultKcProps extends KcProps ? true : false>(); assert<typeof defaultKcProps extends KcProps ? true : false>();

View File

@ -74,7 +74,7 @@ const Login = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase.Lo
? { "disabled": true } ? { "disabled": true }
: { : {
"autoFocus": true, "autoFocus": true,
"autoComplete": "off", "autoComplete": "off"
})} })}
/> />
</> </>
@ -106,7 +106,7 @@ const Login = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase.Lo
type="checkbox" type="checkbox"
{...(login.rememberMe {...(login.rememberMe
? { ? {
"checked": true, "checked": true
} }
: {})} : {})}
/> />
@ -132,7 +132,7 @@ const Login = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase.Lo
name="credentialId" name="credentialId"
{...(auth?.selectedCredential !== undefined {...(auth?.selectedCredential !== undefined
? { ? {
"value": auth.selectedCredential, "value": auth.selectedCredential
} }
: {})} : {})}
/> />
@ -142,7 +142,7 @@ const Login = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase.Lo
props.kcButtonClass, props.kcButtonClass,
props.kcButtonPrimaryClass, props.kcButtonPrimaryClass,
props.kcButtonBlockClass, props.kcButtonBlockClass,
props.kcButtonLargeClass, props.kcButtonLargeClass
)} )}
name="login" name="login"
id="kc-login" id="kc-login"
@ -159,7 +159,7 @@ const Login = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase.Lo
<ul <ul
className={cx( className={cx(
props.kcFormSocialAccountListClass, props.kcFormSocialAccountListClass,
social.providers.length > 4 && props.kcFormSocialAccountDoubleListClass, social.providers.length > 4 && props.kcFormSocialAccountDoubleListClass
)} )}
> >
{social.providers.map(p => ( {social.providers.map(p => (

View File

@ -15,7 +15,7 @@ const LoginConfigTotp = memo(({ kcContext, i18n, ...props }: { kcContext: KcCont
const algToKeyUriAlg: Record<KcContextBase.LoginConfigTotp["totp"]["policy"]["algorithm"], string> = { const algToKeyUriAlg: Record<KcContextBase.LoginConfigTotp["totp"]["policy"]["algorithm"], string> = {
HmacSHA1: "SHA1", HmacSHA1: "SHA1",
HmacSHA256: "SHA256", HmacSHA256: "SHA256",
HmacSHA512: "SHA512", HmacSHA512: "SHA512"
}; };
return ( return (
@ -159,7 +159,7 @@ const LoginConfigTotp = memo(({ kcContext, i18n, ...props }: { kcContext: KcCont
props.kcButtonClass, props.kcButtonClass,
props.kcButtonDefaultClass, props.kcButtonDefaultClass,
props.kcButtonLargeClass, props.kcButtonLargeClass,
props.kcButtonLargeClass, props.kcButtonLargeClass
)} )}
id="cancelTOTPBtn" id="cancelTOTPBtn"
name="cancel-aia" name="cancel-aia"

View File

@ -19,7 +19,7 @@ const LoginOtp = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase
headInsert({ headInsert({
"type": "javascript", "type": "javascript",
"src": pathJoin(kcContext.url.resourcesCommonPath, "node_modules/jquery/dist/jquery.min.js"), "src": pathJoin(kcContext.url.resourcesCommonPath, "node_modules/jquery/dist/jquery.min.js")
}).then(() => { }).then(() => {
if (isCleanedUp) return; if (isCleanedUp) return;

View File

@ -102,7 +102,7 @@ const LoginUpdatePassword = memo(({ kcContext, i18n, ...props }: { kcContext: Kc
props.kcButtonClass, props.kcButtonClass,
props.kcButtonPrimaryClass, props.kcButtonPrimaryClass,
props.kcButtonBlockClass, props.kcButtonBlockClass,
props.kcButtonLargeClass, props.kcButtonLargeClass
)} )}
type="submit" type="submit"
defaultValue={msgStr("doSubmit")} defaultValue={msgStr("doSubmit")}

View File

@ -105,7 +105,7 @@ const LoginUpdateProfile = memo(({ kcContext, i18n, ...props }: { kcContext: KcC
props.kcButtonClass, props.kcButtonClass,
props.kcButtonPrimaryClass, props.kcButtonPrimaryClass,
props.kcButtonBlockClass, props.kcButtonBlockClass,
props.kcButtonLargeClass, props.kcButtonLargeClass
)} )}
type="submit" type="submit"
defaultValue={msgStr("doSubmit")} defaultValue={msgStr("doSubmit")}

View File

@ -35,7 +35,7 @@ const LogoutConfirm = memo(({ kcContext, i18n, ...props }: { kcContext: KcContex
props.kcButtonClass, props.kcButtonClass,
props.kcButtonPrimaryClass, props.kcButtonPrimaryClass,
props.kcButtonBlockClass, props.kcButtonBlockClass,
props.kcButtonLargeClass, props.kcButtonLargeClass
)} )}
name="confirmLogout" name="confirmLogout"
id="kc-logout" id="kc-logout"

View File

@ -111,7 +111,7 @@ const Register = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase
<div <div
className={cx( className={cx(
props.kcFormGroupClass, props.kcFormGroupClass,
messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass), messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass)
)} )}
> >
<div className={cx(props.kcLabelWrapperClass)}> <div className={cx(props.kcLabelWrapperClass)}>

View File

@ -18,9 +18,9 @@ const RegisterUserProfile = memo(({ kcContext, i18n, ...props_ }: { kcContext: K
const props = useMemo( const props = useMemo(
() => ({ () => ({
...props_, ...props_,
"kcFormGroupClass": cx(props_.kcFormGroupClass, css({ "marginBottom": 20 })), "kcFormGroupClass": cx(props_.kcFormGroupClass, css({ "marginBottom": 20 }))
}), }),
[cx, css], [cx, css]
); );
const [isFomSubmittable, setIsFomSubmittable] = useState(false); const [isFomSubmittable, setIsFomSubmittable] = useState(false);
@ -79,10 +79,10 @@ const UserProfileFormFields = memo(({ kcContext, onIsFormSubmittableValueChange,
const { const {
formValidationState: { fieldStateByAttributeName, isFormSubmittable }, formValidationState: { fieldStateByAttributeName, isFormSubmittable },
formValidationReducer, formValidationReducer,
attributesWithPassword, attributesWithPassword
} = useFormValidationSlice({ } = useFormValidationSlice({
kcContext, kcContext,
i18n, i18n
}); });
useEffect(() => { useEffect(() => {
@ -94,22 +94,22 @@ const UserProfileFormFields = memo(({ kcContext, onIsFormSubmittableValueChange,
[name]: [string], [name]: [string],
[ [
{ {
target: { value }, target: { value }
}, }
]: [React.ChangeEvent<HTMLInputElement | HTMLSelectElement>], ]: [React.ChangeEvent<HTMLInputElement | HTMLSelectElement>]
) => ) =>
formValidationReducer({ formValidationReducer({
"action": "update value", "action": "update value",
name, name,
"newValue": value, "newValue": value
}), })
); );
const onBlurFactory = useCallbackFactory(([name]: [string]) => const onBlurFactory = useCallbackFactory(([name]: [string]) =>
formValidationReducer({ formValidationReducer({
"action": "focus lost", "action": "focus lost",
name, name
}), })
); );
let currentGroup = ""; let currentGroup = "";
@ -200,8 +200,8 @@ const UserProfileFormFields = memo(({ kcContext, onIsFormSubmittableValueChange,
props.kcInputErrorMessageClass, props.kcInputErrorMessageClass,
css({ css({
"position": displayableErrors.length === 1 ? "absolute" : undefined, "position": displayableErrors.length === 1 ? "absolute" : undefined,
"& > span": { "display": "block" }, "& > span": { "display": "block" }
}), })
)} )}
aria-live="polite" aria-live="polite"
> >

View File

@ -39,7 +39,7 @@ const Template = memo((props: TemplateProps) => {
infoNode = null, infoNode = null,
kcContext, kcContext,
i18n, i18n,
doFetchDefaultThemeResources, doFetchDefaultThemeResources
} = props; } = props;
const { cx } = useCssAndCx(); const { cx } = useCssAndCx();
@ -68,16 +68,16 @@ const Template = memo((props: TemplateProps) => {
Promise.all( Promise.all(
[ [
...toArr(props.stylesCommon).map(relativePath => pathJoin(url.resourcesCommonPath, relativePath)), ...toArr(props.stylesCommon).map(relativePath => pathJoin(url.resourcesCommonPath, relativePath)),
...toArr(props.styles).map(relativePath => pathJoin(url.resourcesPath, relativePath)), ...toArr(props.styles).map(relativePath => pathJoin(url.resourcesPath, relativePath))
] ]
.reverse() .reverse()
.map(href => .map(href =>
headInsert({ headInsert({
"type": "css", "type": "css",
href, href,
"position": "prepend", "position": "prepend"
}), })
), )
).then(() => { ).then(() => {
if (isUnmounted) { if (isUnmounted) {
return; return;
@ -89,8 +89,8 @@ const Template = memo((props: TemplateProps) => {
toArr(props.scripts).forEach(relativePath => toArr(props.scripts).forEach(relativePath =>
headInsert({ headInsert({
"type": "javascript", "type": "javascript",
"src": pathJoin(url.resourcesPath, relativePath), "src": pathJoin(url.resourcesPath, relativePath)
}), })
); );
if (props.kcHtmlClass !== undefined) { if (props.kcHtmlClass !== undefined) {
@ -211,7 +211,7 @@ const Template = memo((props: TemplateProps) => {
<span <span
className="kc-feedback-text" className="kc-feedback-text"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
"__html": message.summary, "__html": message.summary
}} }}
/> />
</div> </div>

View File

@ -36,7 +36,7 @@ export function useDownloadTerms(params: {
const downloadTermMarkdownConst = useConstCallback(downloadTermMarkdown); const downloadTermMarkdownConst = useConstCallback(downloadTermMarkdown);
const downloadTermMarkdownMemoized = useConst(() => const downloadTermMarkdownMemoized = useConst(() =>
memoize((currentLanguageTag: string) => downloadTermMarkdownConst({ currentLanguageTag }), { "promise": true }), memoize((currentLanguageTag: string) => downloadTermMarkdownConst({ currentLanguageTag }), { "promise": true })
); );
return { downloadTermMarkdownMemoized }; return { downloadTermMarkdownMemoized };
@ -48,7 +48,7 @@ export function useDownloadTerms(params: {
} }
downloadTermMarkdownMemoized(kcContext.locale?.currentLanguageTag ?? fallbackLanguageTag).then( downloadTermMarkdownMemoized(kcContext.locale?.currentLanguageTag ?? fallbackLanguageTag).then(
thermMarkdown => (evtTermMarkdown.state = thermMarkdown), thermMarkdown => (evtTermMarkdown.state = thermMarkdown)
); );
}, []); }, []);
} }
@ -82,7 +82,7 @@ const Terms = memo(({ kcContext, i18n, ...props }: { kcContext: KcContextBase.Te
props.kcButtonClass, props.kcButtonClass,
props.kcButtonClass, props.kcButtonClass,
props.kcButtonPrimaryClass, props.kcButtonPrimaryClass,
props.kcButtonLargeClass, props.kcButtonLargeClass
)} )}
name="accept" name="accept"
id="kc-accept" id="kc-accept"

View File

@ -29,8 +29,8 @@ export function getKcContext<KcContextExtended extends { pageId: string } = neve
[ [
`WARNING: You declared the non build in page ${mockPageId} but you didn't `, `WARNING: You declared the non build in page ${mockPageId} but you didn't `,
`provide mock data needed to debug the page outside of Keycloak as you are trying to do now.`, `provide mock data needed to debug the page outside of Keycloak as you are trying to do now.`,
`Please check the documentation of the getKcContext function`, `Please check the documentation of the getKcContext function`
].join("\n"), ].join("\n")
); );
} }
@ -38,13 +38,13 @@ export function getKcContext<KcContextExtended extends { pageId: string } = neve
deepAssign({ deepAssign({
"target": kcContext, "target": kcContext,
"source": kcContextDefaultMock !== undefined ? kcContextDefaultMock : { "pageId": mockPageId, ...kcContextCommonMock }, "source": kcContextDefaultMock !== undefined ? kcContextDefaultMock : { "pageId": mockPageId, ...kcContextCommonMock }
}); });
if (partialKcContextCustomMock !== undefined) { if (partialKcContextCustomMock !== undefined) {
deepAssign({ deepAssign({
"target": kcContext, "target": kcContext,
"source": partialKcContextCustomMock, "source": partialKcContextCustomMock
}); });
if (partialKcContextCustomMock.pageId === "register-user-profile.ftl") { if (partialKcContextCustomMock.pageId === "register-user-profile.ftl") {
@ -56,7 +56,7 @@ export function getKcContext<KcContextExtended extends { pageId: string } = neve
id<KcContextBase.RegisterUserProfile>(kcContext).profile.attributesByName = {}; id<KcContextBase.RegisterUserProfile>(kcContext).profile.attributesByName = {};
const partialAttributes = [ const partialAttributes = [
...((partialKcContextCustomMock as DeepPartial<KcContextBase.RegisterUserProfile>).profile?.attributes ?? []), ...((partialKcContextCustomMock as DeepPartial<KcContextBase.RegisterUserProfile>).profile?.attributes ?? [])
].filter(exclude(undefined)); ].filter(exclude(undefined));
attributes.forEach(attribute => { attributes.forEach(attribute => {
@ -66,7 +66,7 @@ export function getKcContext<KcContextExtended extends { pageId: string } = neve
deepAssign({ deepAssign({
"target": augmentedAttribute, "target": augmentedAttribute,
"source": attribute, "source": attribute
}); });
if (partialAttribute !== undefined) { if (partialAttribute !== undefined) {
@ -74,7 +74,7 @@ export function getKcContext<KcContextExtended extends { pageId: string } = neve
deepAssign({ deepAssign({
"target": augmentedAttribute, "target": augmentedAttribute,
"source": partialAttribute, "source": partialAttribute
}); });
} }

View File

@ -13,20 +13,20 @@ export const kcContextCommonMock: KcContextBase.Common = {
"resourcesPath": pathJoin(PUBLIC_URL, mockTestingResourcesPath), "resourcesPath": pathJoin(PUBLIC_URL, mockTestingResourcesPath),
"resourcesCommonPath": pathJoin(PUBLIC_URL, mockTestingResourcesCommonPath), "resourcesCommonPath": pathJoin(PUBLIC_URL, mockTestingResourcesCommonPath),
"loginRestartFlowUrl": "/auth/realms/myrealm/login-actions/restart?client_id=account&tab_id=HoAx28ja4xg", "loginRestartFlowUrl": "/auth/realms/myrealm/login-actions/restart?client_id=account&tab_id=HoAx28ja4xg",
"loginUrl": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg", "loginUrl": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg"
}, },
"realm": { "realm": {
"name": "myrealm", "name": "myrealm",
"displayName": "myrealm", "displayName": "myrealm",
"displayNameHtml": "myrealm", "displayNameHtml": "myrealm",
"internationalizationEnabled": true, "internationalizationEnabled": true,
"registrationEmailAsUsername": false, "registrationEmailAsUsername": false
}, },
"messagesPerField": { "messagesPerField": {
"printIfExists": (...[, x]) => x, "printIfExists": (...[, x]) => x,
"existsError": () => true, "existsError": () => true,
"get": key => `Fake error for ${key}`, "get": key => `Fake error for ${key}`,
"exists": () => true, "exists": () => true
}, },
"locale": { "locale": {
"supported": [ "supported": [
@ -34,117 +34,117 @@ export const kcContextCommonMock: KcContextBase.Common = {
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=de", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=de",
"label": "Deutsch", "label": "Deutsch",
"languageTag": "de", "languageTag": "de"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=no", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=no",
"label": "Norsk", "label": "Norsk",
"languageTag": "no", "languageTag": "no"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ru", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ru",
"label": "Русский", "label": "Русский",
"languageTag": "ru", "languageTag": "ru"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=sv", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=sv",
"label": "Svenska", "label": "Svenska",
"languageTag": "sv", "languageTag": "sv"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=pt-BR", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=pt-BR",
"label": "Português (Brasil)", "label": "Português (Brasil)",
"languageTag": "pt-BR", "languageTag": "pt-BR"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=lt", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=lt",
"label": "Lietuvių", "label": "Lietuvių",
"languageTag": "lt", "languageTag": "lt"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=en", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=en",
"label": "English", "label": "English",
"languageTag": "en", "languageTag": "en"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=it", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=it",
"label": "Italiano", "label": "Italiano",
"languageTag": "it", "languageTag": "it"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=fr", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=fr",
"label": "Français", "label": "Français",
"languageTag": "fr", "languageTag": "fr"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=zh-CN", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=zh-CN",
"label": "中文简体", "label": "中文简体",
"languageTag": "zh-CN", "languageTag": "zh-CN"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=es", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=es",
"label": "Español", "label": "Español",
"languageTag": "es", "languageTag": "es"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=cs", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=cs",
"label": "Čeština", "label": "Čeština",
"languageTag": "cs", "languageTag": "cs"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ja", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ja",
"label": "日本語", "label": "日本語",
"languageTag": "ja", "languageTag": "ja"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=sk", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=sk",
"label": "Slovenčina", "label": "Slovenčina",
"languageTag": "sk", "languageTag": "sk"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=pl", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=pl",
"label": "Polski", "label": "Polski",
"languageTag": "pl", "languageTag": "pl"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ca", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ca",
"label": "Català", "label": "Català",
"languageTag": "ca", "languageTag": "ca"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=nl", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=nl",
"label": "Nederlands", "label": "Nederlands",
"languageTag": "nl", "languageTag": "nl"
}, },
{ {
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=tr", "url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=tr",
"label": "Türkçe", "label": "Türkçe",
"languageTag": "tr", "languageTag": "tr"
}, }
/* spell-checker: enable */ /* spell-checker: enable */
], ],
"currentLanguageTag": "en", "currentLanguageTag": "en"
}, },
"auth": { "auth": {
"showUsername": false, "showUsername": false,
"showResetCredentials": false, "showResetCredentials": false,
"showTryAnotherWayLink": false, "showTryAnotherWayLink": false
}, },
"client": { "client": {
"clientId": "myApp", "clientId": "myApp"
}, },
"scripts": [], "scripts": [],
"message": { "message": {
"type": "success", "type": "success",
"summary": "This is a test message", "summary": "This is a test message"
}, },
"isAppInitiatedAction": false, "isAppInitiatedAction": false
}; };
const loginUrl = { const loginUrl = {
...kcContextCommonMock.url, ...kcContextCommonMock.url,
"loginResetCredentialsUrl": "/auth/realms/myrealm/login-actions/reset-credentials?client_id=account&tab_id=HoAx28ja4xg", "loginResetCredentialsUrl": "/auth/realms/myrealm/login-actions/reset-credentials?client_id=account&tab_id=HoAx28ja4xg",
"registrationUrl": "/auth/realms/myrealm/login-actions/registration?client_id=account&tab_id=HoAx28ja4xg", "registrationUrl": "/auth/realms/myrealm/login-actions/registration?client_id=account&tab_id=HoAx28ja4xg"
}; };
export const kcContextMocks: KcContextBase[] = [ export const kcContextMocks: KcContextBase[] = [
@ -158,17 +158,17 @@ export const kcContextMocks: KcContextBase[] = [
"rememberMe": true, "rememberMe": true,
"password": true, "password": true,
"resetPasswordAllowed": true, "resetPasswordAllowed": true,
"registrationAllowed": true, "registrationAllowed": true
}, },
"auth": kcContextCommonMock.auth!, "auth": kcContextCommonMock.auth!,
"social": { "social": {
"displayInfo": true, "displayInfo": true
}, },
"usernameEditDisabled": false, "usernameEditDisabled": false,
"login": { "login": {
"rememberMe": false, "rememberMe": false
}, },
"registrationDisabled": false, "registrationDisabled": false
}), }),
...(() => { ...(() => {
const registerCommon: KcContextBase.RegisterCommon = { const registerCommon: KcContextBase.RegisterCommon = {
@ -176,15 +176,15 @@ export const kcContextMocks: KcContextBase[] = [
"url": { "url": {
...loginUrl, ...loginUrl,
"registrationAction": "registrationAction":
"http://localhost:8080/auth/realms/myrealm/login-actions/registration?session_code=gwZdUeO7pbYpFTRxiIxRg_QtzMbtFTKrNu6XW_f8asM&execution=12146ce0-b139-4bbd-b25b-0eccfee6577e&client_id=account&tab_id=uS8lYfebLa0", "http://localhost:8080/auth/realms/myrealm/login-actions/registration?session_code=gwZdUeO7pbYpFTRxiIxRg_QtzMbtFTKrNu6XW_f8asM&execution=12146ce0-b139-4bbd-b25b-0eccfee6577e&client_id=account&tab_id=uS8lYfebLa0"
}, },
"scripts": [], "scripts": [],
"isAppInitiatedAction": false, "isAppInitiatedAction": false,
"passwordRequired": true, "passwordRequired": true,
"recaptchaRequired": false, "recaptchaRequired": false,
"social": { "social": {
"displayInfo": true, "displayInfo": true
}, }
}; };
return [ return [
@ -192,8 +192,8 @@ export const kcContextMocks: KcContextBase[] = [
"pageId": "register.ftl", "pageId": "register.ftl",
...registerCommon, ...registerCommon,
"register": { "register": {
"formData": {}, "formData": {}
}, }
}), }),
id<KcContextBase.RegisterUserProfile>({ id<KcContextBase.RegisterUserProfile>({
"pageId": "register-user-profile.ftl", "pageId": "register-user-profile.ftl",
@ -205,16 +205,16 @@ export const kcContextMocks: KcContextBase[] = [
{ {
"validators": { "validators": {
"username-prohibited-characters": { "username-prohibited-characters": {
"ignore.empty.value": true, "ignore.empty.value": true
}, },
"up-username-has-value": {}, "up-username-has-value": {},
"length": { "length": {
"ignore.empty.value": true, "ignore.empty.value": true,
"min": "3", "min": "3",
"max": "255", "max": "255"
}, },
"up-duplicate-username": {}, "up-duplicate-username": {},
"up-username-mutation": {}, "up-username-mutation": {}
}, },
"displayName": "${username}", "displayName": "${username}",
"annotations": {}, "annotations": {},
@ -223,27 +223,27 @@ export const kcContextMocks: KcContextBase[] = [
"autocomplete": "username", "autocomplete": "username",
"readOnly": false, "readOnly": false,
"name": "username", "name": "username",
"value": "xxxx", "value": "xxxx"
}, },
{ {
"validators": { "validators": {
"up-email-exists-as-username": {}, "up-email-exists-as-username": {},
"length": { "length": {
"max": "255", "max": "255",
"ignore.empty.value": true, "ignore.empty.value": true
}, },
"up-blank-attribute-value": { "up-blank-attribute-value": {
"error-message": "missingEmailMessage", "error-message": "missingEmailMessage",
"fail-on-null": false, "fail-on-null": false
}, },
"up-duplicate-email": {}, "up-duplicate-email": {},
"email": { "email": {
"ignore.empty.value": true, "ignore.empty.value": true
}, },
"pattern": { "pattern": {
"ignore.empty.value": true, "ignore.empty.value": true,
"pattern": "gmail\\.com$", "pattern": "gmail\\.com$"
}, }
}, },
"displayName": "${email}", "displayName": "${email}",
"annotations": {}, "annotations": {},
@ -251,55 +251,55 @@ export const kcContextMocks: KcContextBase[] = [
"groupAnnotations": {}, "groupAnnotations": {},
"autocomplete": "email", "autocomplete": "email",
"readOnly": false, "readOnly": false,
"name": "email", "name": "email"
}, },
{ {
"validators": { "validators": {
"length": { "length": {
"max": "255", "max": "255",
"ignore.empty.value": true, "ignore.empty.value": true
}, },
"person-name-prohibited-characters": { "person-name-prohibited-characters": {
"ignore.empty.value": true, "ignore.empty.value": true
}, },
"up-immutable-attribute": {}, "up-immutable-attribute": {},
"up-attribute-required-by-metadata-value": {}, "up-attribute-required-by-metadata-value": {}
}, },
"displayName": "${firstName}", "displayName": "${firstName}",
"annotations": {}, "annotations": {},
"required": true, "required": true,
"groupAnnotations": {}, "groupAnnotations": {},
"readOnly": false, "readOnly": false,
"name": "firstName", "name": "firstName"
}, },
{ {
"validators": { "validators": {
"length": { "length": {
"max": "255", "max": "255",
"ignore.empty.value": true, "ignore.empty.value": true
}, },
"person-name-prohibited-characters": { "person-name-prohibited-characters": {
"ignore.empty.value": true, "ignore.empty.value": true
}, },
"up-immutable-attribute": {}, "up-immutable-attribute": {},
"up-attribute-required-by-metadata-value": {}, "up-attribute-required-by-metadata-value": {}
}, },
"displayName": "${lastName}", "displayName": "${lastName}",
"annotations": {}, "annotations": {},
"required": true, "required": true,
"groupAnnotations": {}, "groupAnnotations": {},
"readOnly": false, "readOnly": false,
"name": "lastName", "name": "lastName"
}, }
]; ];
return { return {
attributes, attributes,
"attributesByName": Object.fromEntries(attributes.map(attribute => [attribute.name, attribute])) as any, "attributesByName": Object.fromEntries(attributes.map(attribute => [attribute.name, attribute])) as any
} as any; } as any;
})(), })()
}, }
}), })
]; ];
})(), })(),
id<KcContextBase.Info>({ id<KcContextBase.Info>({
@ -311,39 +311,39 @@ export const kcContextMocks: KcContextBase[] = [
"actionUri": "#", "actionUri": "#",
"client": { "client": {
"clientId": "myApp", "clientId": "myApp",
"baseUrl": "#", "baseUrl": "#"
}, }
}), }),
id<KcContextBase.Error>({ id<KcContextBase.Error>({
...kcContextCommonMock, ...kcContextCommonMock,
"pageId": "error.ftl", "pageId": "error.ftl",
"client": { "client": {
"clientId": "myApp", "clientId": "myApp",
"baseUrl": "#", "baseUrl": "#"
}, },
"message": { "message": {
"type": "error", "type": "error",
"summary": "This is the error message", "summary": "This is the error message"
}, }
}), }),
id<KcContextBase.LoginResetPassword>({ id<KcContextBase.LoginResetPassword>({
...kcContextCommonMock, ...kcContextCommonMock,
"pageId": "login-reset-password.ftl", "pageId": "login-reset-password.ftl",
"realm": { "realm": {
...kcContextCommonMock.realm, ...kcContextCommonMock.realm,
"loginWithEmailAllowed": false, "loginWithEmailAllowed": false
}, }
}), }),
id<KcContextBase.LoginVerifyEmail>({ id<KcContextBase.LoginVerifyEmail>({
...kcContextCommonMock, ...kcContextCommonMock,
"pageId": "login-verify-email.ftl", "pageId": "login-verify-email.ftl",
"user": { "user": {
"email": "john.doe@gmail.com", "email": "john.doe@gmail.com"
}, }
}), }),
id<KcContextBase.Terms>({ id<KcContextBase.Terms>({
...kcContextCommonMock, ...kcContextCommonMock,
"pageId": "terms.ftl", "pageId": "terms.ftl"
}), }),
id<KcContextBase.LoginOtp>({ id<KcContextBase.LoginOtp>({
...kcContextCommonMock, ...kcContextCommonMock,
@ -352,19 +352,19 @@ export const kcContextMocks: KcContextBase[] = [
"userOtpCredentials": [ "userOtpCredentials": [
{ {
"id": "id1", "id": "id1",
"userLabel": "label1", "userLabel": "label1"
}, },
{ {
"id": "id2", "id": "id2",
"userLabel": "label2", "userLabel": "label2"
}, }
], ]
}, }
}), }),
id<KcContextBase.LoginUpdatePassword>({ id<KcContextBase.LoginUpdatePassword>({
...kcContextCommonMock, ...kcContextCommonMock,
"pageId": "login-update-password.ftl", "pageId": "login-update-password.ftl",
"username": "anUsername", "username": "anUsername"
}), }),
id<KcContextBase.LoginUpdateProfile>({ id<KcContextBase.LoginUpdateProfile>({
...kcContextCommonMock, ...kcContextCommonMock,
@ -374,21 +374,21 @@ export const kcContextMocks: KcContextBase[] = [
"username": "anUsername", "username": "anUsername",
"email": "foo@example.com", "email": "foo@example.com",
"firstName": "aFirstName", "firstName": "aFirstName",
"lastName": "aLastName", "lastName": "aLastName"
}, }
}), }),
id<KcContextBase.LoginIdpLinkConfirm>({ id<KcContextBase.LoginIdpLinkConfirm>({
...kcContextCommonMock, ...kcContextCommonMock,
"pageId": "login-idp-link-confirm.ftl", "pageId": "login-idp-link-confirm.ftl",
"idpAlias": "FranceConnect", "idpAlias": "FranceConnect"
}), }),
id<KcContextBase.LoginIdpLinkEmail>({ id<KcContextBase.LoginIdpLinkEmail>({
...kcContextCommonMock, ...kcContextCommonMock,
"pageId": "login-idp-link-email.ftl", "pageId": "login-idp-link-email.ftl",
"idpAlias": "FranceConnect", "idpAlias": "FranceConnect",
"brokerContext": { "brokerContext": {
"username": "anUsername", "username": "anUsername"
}, }
}), }),
id<KcContextBase.LoginConfigTotp>({ id<KcContextBase.LoginConfigTotp>({
...kcContextCommonMock, ...kcContextCommonMock,
@ -407,21 +407,21 @@ export const kcContextMocks: KcContextBase[] = [
digits: 6, digits: 6,
lookAheadWindow: 1, lookAheadWindow: 1,
type: "totp", type: "totp",
period: 30, period: 30
}, }
}, }
}), }),
id<KcContextBase.LogoutConfirm>({ id<KcContextBase.LogoutConfirm>({
...kcContextCommonMock, ...kcContextCommonMock,
"pageId": "logout-confirm.ftl", "pageId": "logout-confirm.ftl",
"url": { "url": {
...kcContextCommonMock.url, ...kcContextCommonMock.url,
"logoutConfirmAction": "Continuer?", "logoutConfirmAction": "Continuer?"
}, },
"client": { "client": {
"clientId": "myApp", "clientId": "myApp",
"baseUrl": "#", "baseUrl": "#"
}, },
"logoutConfirm": { "code": "123", skipLink: false }, "logoutConfirm": { "code": "123", skipLink: false }
}), })
]; ];

View File

@ -130,7 +130,7 @@ const messages = {
"invalidPasswordMinSpecialCharsMessage": "Contrasenya incorrecta: ha de contenir almenys {0} caràcters especials.", "invalidPasswordMinSpecialCharsMessage": "Contrasenya incorrecta: ha de contenir almenys {0} caràcters especials.",
"invalidPasswordNotUsernameMessage": "Contrasenya incorrecta: no pot ser igual al nom d'usuari.", "invalidPasswordNotUsernameMessage": "Contrasenya incorrecta: no pot ser igual al nom d'usuari.",
"invalidPasswordRegexPatternMessage": "Contrasenya incorrecta: no compleix l'expressió regular.", "invalidPasswordRegexPatternMessage": "Contrasenya incorrecta: no compleix l'expressió regular.",
"invalidPasswordHistoryMessage": "Contrasenya incorrecta: no pot ser igual a cap de les últimes {0} contrasenyes.", "invalidPasswordHistoryMessage": "Contrasenya incorrecta: no pot ser igual a cap de les últimes {0} contrasenyes."
}; };
export default messages; export default messages;

View File

@ -149,7 +149,7 @@ const messages = {
"invalidPasswordRegexPatternMessage": "Neplatné heslo: neshoduje se zadaným regulárním výrazem.", "invalidPasswordRegexPatternMessage": "Neplatné heslo: neshoduje se zadaným regulárním výrazem.",
"invalidPasswordHistoryMessage": "Neplatné heslo: Nesmí se opakovat žádné z posledních {0} hesel.", "invalidPasswordHistoryMessage": "Neplatné heslo: Nesmí se opakovat žádné z posledních {0} hesel.",
"invalidPasswordBlacklistedMessage": "Neplatné heslo: heslo je na černé listině.", "invalidPasswordBlacklistedMessage": "Neplatné heslo: heslo je na černé listině.",
"invalidPasswordGenericMessage": "Neplatné heslo: nové heslo neodpovídá pravidlům hesla.", "invalidPasswordGenericMessage": "Neplatné heslo: nové heslo neodpovídá pravidlům hesla."
}; };
export default messages; export default messages;

View File

@ -149,7 +149,7 @@ const messages = {
"invalidPasswordRegexPatternMessage": "Ungültiges Passwort: Es entspricht nicht dem Regex-Muster.", "invalidPasswordRegexPatternMessage": "Ungültiges Passwort: Es entspricht nicht dem Regex-Muster.",
"invalidPasswordHistoryMessage": "Ungültiges Passwort: Es darf nicht einem der letzten {0} Passwörter entsprechen.", "invalidPasswordHistoryMessage": "Ungültiges Passwort: Es darf nicht einem der letzten {0} Passwörter entsprechen.",
"invalidPasswordBlacklistedMessage": "Ungültiges Passwort: Das Passwort steht auf der Blocklist (schwarzen Liste).", "invalidPasswordBlacklistedMessage": "Ungültiges Passwort: Das Passwort steht auf der Blocklist (schwarzen Liste).",
"invalidPasswordGenericMessge": "Ungültiges Passwort: Das neue Passwort verletzt die Passwort-Richtlinien.", "invalidPasswordGenericMessge": "Ungültiges Passwort: Das neue Passwort verletzt die Passwort-Richtlinien."
}; };
export default messages; export default messages;

View File

@ -318,7 +318,7 @@ const messages = {
"openshift.scope.user_info": "User information", "openshift.scope.user_info": "User information",
"openshift.scope.user_check-access": "User access information", "openshift.scope.user_check-access": "User access information",
"openshift.scope.user_full": "Full Access", "openshift.scope.user_full": "Full Access",
"openshift.scope.list-projects": "List projects", "openshift.scope.list-projects": "List projects"
}; };
export default messages; export default messages;

View File

@ -130,7 +130,7 @@ const messages = {
"invalidPasswordMinSpecialCharsMessage": "Contraseña incorrecta: debe contener al menos {0} caracteres especiales.", "invalidPasswordMinSpecialCharsMessage": "Contraseña incorrecta: debe contener al menos {0} caracteres especiales.",
"invalidPasswordNotUsernameMessage": "Contraseña incorrecta: no puede ser igual al nombre de usuario.", "invalidPasswordNotUsernameMessage": "Contraseña incorrecta: no puede ser igual al nombre de usuario.",
"invalidPasswordRegexPatternMessage": "Contraseña incorrecta: no cumple la expresión regular.", "invalidPasswordRegexPatternMessage": "Contraseña incorrecta: no cumple la expresión regular.",
"invalidPasswordHistoryMessage": "Contraseña incorrecta: no puede ser igual a ninguna de las últimas {0} contraseñas.", "invalidPasswordHistoryMessage": "Contraseña incorrecta: no puede ser igual a ninguna de las últimas {0} contraseñas."
}; };
export default messages; export default messages;

View File

@ -143,7 +143,7 @@ const messages = {
"invalidPasswordMinSpecialCharsMessage": "Mot de passe invalide: doit contenir au moins {0} caractère(s) spéciaux.", "invalidPasswordMinSpecialCharsMessage": "Mot de passe invalide: doit contenir au moins {0} caractère(s) spéciaux.",
"invalidPasswordNotUsernameMessage": "Mot de passe invalide: ne doit pas être identique au nom d'utilisateur.", "invalidPasswordNotUsernameMessage": "Mot de passe invalide: ne doit pas être identique au nom d'utilisateur.",
"invalidPasswordRegexPatternMessage": "Mot de passe invalide: ne valide pas l'expression rationnelle.", "invalidPasswordRegexPatternMessage": "Mot de passe invalide: ne valide pas l'expression rationnelle.",
"invalidPasswordHistoryMessage": "Mot de passe invalide: ne doit pas être égal aux {0} derniers mots de passe.", "invalidPasswordHistoryMessage": "Mot de passe invalide: ne doit pas être égal aux {0} derniers mots de passe."
}; };
export default messages; export default messages;

View File

@ -303,7 +303,7 @@ const messages = {
"openshift.scope.user_info": "Informazioni utente", "openshift.scope.user_info": "Informazioni utente",
"openshift.scope.user_check-access": "Informazioni per l'accesso dell'utente", "openshift.scope.user_check-access": "Informazioni per l'accesso dell'utente",
"openshift.scope.user_full": "Accesso completo", "openshift.scope.user_full": "Accesso completo",
"openshift.scope.list-projects": "Elenca progetti", "openshift.scope.list-projects": "Elenca progetti"
}; };
export default messages; export default messages;

View File

@ -317,7 +317,7 @@ const messages = {
"openshift.scope.user_info": "ユーザー情報", "openshift.scope.user_info": "ユーザー情報",
"openshift.scope.user_check-access": "ユーザーアクセス情報", "openshift.scope.user_check-access": "ユーザーアクセス情報",
"openshift.scope.user_full": "フルアクセス", "openshift.scope.user_full": "フルアクセス",
"openshift.scope.list-projects": "プロジェクトの一覧表示", "openshift.scope.list-projects": "プロジェクトの一覧表示"
}; };
export default messages; export default messages;

View File

@ -136,7 +136,7 @@ const messages = {
"invalidPasswordMinSpecialCharsMessage": "Neteisingas slaptažodis: privaloma įvesti {0} specialų simbolį.", "invalidPasswordMinSpecialCharsMessage": "Neteisingas slaptažodis: privaloma įvesti {0} specialų simbolį.",
"invalidPasswordNotUsernameMessage": "Neteisingas slaptažodis: slaptažodis negali sutapti su naudotojo vardu.", "invalidPasswordNotUsernameMessage": "Neteisingas slaptažodis: slaptažodis negali sutapti su naudotojo vardu.",
"invalidPasswordRegexPatternMessage": "Neteisingas slaptažodis: slaptažodis netenkina regex taisyklės(ių).", "invalidPasswordRegexPatternMessage": "Neteisingas slaptažodis: slaptažodis netenkina regex taisyklės(ių).",
"invalidPasswordHistoryMessage": "Neteisingas slaptažodis: slaptažodis negali sutapti su prieš tai buvusiais {0} slaptažodžiais.", "invalidPasswordHistoryMessage": "Neteisingas slaptažodis: slaptažodis negali sutapti su prieš tai buvusiais {0} slaptažodžiais."
}; };
export default messages; export default messages;

View File

@ -136,7 +136,7 @@ const messages = {
"invalidPasswordNotUsernameMessage": "Ongeldig wachtwoord: het mag niet overeenkomen met de gebruikersnaam.", "invalidPasswordNotUsernameMessage": "Ongeldig wachtwoord: het mag niet overeenkomen met de gebruikersnaam.",
"invalidPasswordRegexPatternMessage": "Ongeldig wachtwoord: het voldoet niet aan het door de beheerder ingestelde patroon.", "invalidPasswordRegexPatternMessage": "Ongeldig wachtwoord: het voldoet niet aan het door de beheerder ingestelde patroon.",
"invalidPasswordHistoryMessage": "Ongeldig wachtwoord: het mag niet overeen komen met een van de laatste {0} wachtwoorden.", "invalidPasswordHistoryMessage": "Ongeldig wachtwoord: het mag niet overeen komen met een van de laatste {0} wachtwoorden.",
"invalidPasswordGenericMessage": "Ongeldig wachtwoord: het nieuwe wachtwoord voldoet niet aan het wachtwoordbeleid.", "invalidPasswordGenericMessage": "Ongeldig wachtwoord: het nieuwe wachtwoord voldoet niet aan het wachtwoordbeleid."
}; };
export default messages; export default messages;

View File

@ -146,7 +146,7 @@ const messages = {
"locale_nl": "Nederlands", "locale_nl": "Nederlands",
"locale_pt-BR": "Português (Brasil)", "locale_pt-BR": "Português (Brasil)",
"locale_ru": "Русский", "locale_ru": "Русский",
"locale_zh-CN": "中文简体", "locale_zh-CN": "中文简体"
}; };
export default messages; export default messages;

View File

@ -133,7 +133,7 @@ const messages = {
"invalidPasswordMinSpecialCharsMessage": "Senha inválida: deve conter pelo menos {0} caractere(s) especial", "invalidPasswordMinSpecialCharsMessage": "Senha inválida: deve conter pelo menos {0} caractere(s) especial",
"invalidPasswordNotUsernameMessage": "Senha inválida: não deve ser igual ao nome de usuário", "invalidPasswordNotUsernameMessage": "Senha inválida: não deve ser igual ao nome de usuário",
"invalidPasswordRegexPatternMessage": "Senha inválida: não corresponde ao padrão da expressão regular.", "invalidPasswordRegexPatternMessage": "Senha inválida: não corresponde ao padrão da expressão regular.",
"invalidPasswordHistoryMessage": "Senha inválida: não pode ser igual a qualquer uma das {0} últimas senhas.", "invalidPasswordHistoryMessage": "Senha inválida: não pode ser igual a qualquer uma das {0} últimas senhas."
}; };
export default messages; export default messages;

View File

@ -136,7 +136,7 @@ const messages = {
"invalidPasswordNotUsernameMessage": "Некорректный пароль: пароль не должен совпадать с именем пользователя.", "invalidPasswordNotUsernameMessage": "Некорректный пароль: пароль не должен совпадать с именем пользователя.",
"invalidPasswordRegexPatternMessage": "Некорректный пароль: пароль не удовлетворяет регулярному выражению.", "invalidPasswordRegexPatternMessage": "Некорректный пароль: пароль не удовлетворяет регулярному выражению.",
"invalidPasswordHistoryMessage": "Некорректный пароль: пароль не должен совпадать с последним(и) {0} паролями.", "invalidPasswordHistoryMessage": "Некорректный пароль: пароль не должен совпадать с последним(и) {0} паролями.",
"invalidPasswordGenericMessage": "Некорректный пароль: новый пароль не соответствует правилам пароля.", "invalidPasswordGenericMessage": "Некорректный пароль: новый пароль не соответствует правилам пароля."
}; };
export default messages; export default messages;

View File

@ -173,7 +173,7 @@ const messages = {
"resourcesSharedWithMe": "Zdroje zdieľané so mnou", "resourcesSharedWithMe": "Zdroje zdieľané so mnou",
"permissionRequestion": "Žiadosti o povolenie", "permissionRequestion": "Žiadosti o povolenie",
"permission": "Oprávnenie", "permission": "Oprávnenie",
"shares": "podiel (y)", "shares": "podiel (y)"
}; };
export default messages; export default messages;

View File

@ -132,7 +132,7 @@ const messages = {
"invalidPasswordNotUsernameMessage": "Ogiltigt lösenord: Får inte vara samma som användarnamnet.", "invalidPasswordNotUsernameMessage": "Ogiltigt lösenord: Får inte vara samma som användarnamnet.",
"invalidPasswordRegexPatternMessage": "Ogiltigt lösenord: matchar inte kravet för lösenordsmönster.", "invalidPasswordRegexPatternMessage": "Ogiltigt lösenord: matchar inte kravet för lösenordsmönster.",
"invalidPasswordHistoryMessage": "Ogiltigt lösenord: Får inte vara samma som de senaste {0} lösenorden.", "invalidPasswordHistoryMessage": "Ogiltigt lösenord: Får inte vara samma som de senaste {0} lösenorden.",
"invalidPasswordGenericMessage": "Ogiltigt lösenord: Det nya lösenordet stämmer inte med lösenordspolicyn.", "invalidPasswordGenericMessage": "Ogiltigt lösenord: Det nya lösenordet stämmer inte med lösenordspolicyn."
}; };
export default messages; export default messages;

View File

@ -302,7 +302,7 @@ const messages = {
"addTeam": "Kaynağınızı paylaşmak için ekip ekleyin", "addTeam": "Kaynağınızı paylaşmak için ekip ekleyin",
"myPermissions": "İzinlerim", "myPermissions": "İzinlerim",
"waitingforApproval": "Onay bekleniyor", "waitingforApproval": "Onay bekleniyor",
"anyPermission": "Herhangi bir izin", "anyPermission": "Herhangi bir izin"
}; };
export default messages; export default messages;

View File

@ -148,7 +148,7 @@ const messages = {
"locale_lt": "Lietuvių", "locale_lt": "Lietuvių",
"locale_pt-BR": "Português (Brasil)", "locale_pt-BR": "Português (Brasil)",
"locale_ru": "Русский", "locale_ru": "Русский",
"locale_zh-CN": "中文简体", "locale_zh-CN": "中文简体"
}; };
export default messages; export default messages;

View File

@ -10,7 +10,7 @@ const messages = {
"invalidPasswordMinSpecialCharsMessage": "Contrasenya incorrecta: ha de contenir almenys {0} caràcters especials.", "invalidPasswordMinSpecialCharsMessage": "Contrasenya incorrecta: ha de contenir almenys {0} caràcters especials.",
"invalidPasswordMinUpperCaseCharsMessage": "Contrasenya incorrecta: ha de contenir almenys {0} lletres majúscules.", "invalidPasswordMinUpperCaseCharsMessage": "Contrasenya incorrecta: ha de contenir almenys {0} lletres majúscules.",
"invalidPasswordNotUsernameMessage": "Contrasenya incorrecta: no pot ser igual al nom d'usuari.", "invalidPasswordNotUsernameMessage": "Contrasenya incorrecta: no pot ser igual al nom d'usuari.",
"invalidPasswordRegexPatternMessage": "Contrasenya incorrecta: no compleix l'expressió regular.", "invalidPasswordRegexPatternMessage": "Contrasenya incorrecta: no compleix l'expressió regular."
}; };
export default messages; export default messages;

View File

@ -12,7 +12,7 @@ const messages = {
"invalidPasswordRegexPatternMessage": "Ungültiges Passwort: stimmt nicht mit Regex-Muster überein.", "invalidPasswordRegexPatternMessage": "Ungültiges Passwort: stimmt nicht mit Regex-Muster überein.",
"invalidPasswordHistoryMessage": "Ungültiges Passwort: darf nicht identisch mit einem der letzten {0} Passwörter sein.", "invalidPasswordHistoryMessage": "Ungültiges Passwort: darf nicht identisch mit einem der letzten {0} Passwörter sein.",
"invalidPasswordBlacklistedMessage": "Ungültiges Passwort: Passwort ist zu bekannt und auf der schwarzen Liste.", "invalidPasswordBlacklistedMessage": "Ungültiges Passwort: Passwort ist zu bekannt und auf der schwarzen Liste.",
"invalidPasswordGenericMessage": "Ungültiges Passwort: neues Passwort erfüllt die Passwort-Anforderungen nicht.", "invalidPasswordGenericMessage": "Ungültiges Passwort: neues Passwort erfüllt die Passwort-Anforderungen nicht."
}; };
export default messages; export default messages;

View File

@ -37,7 +37,7 @@ const messages = {
"Without a configured Sector Identifier URI, client redirect URIs must not contain multiple host components.", "Without a configured Sector Identifier URI, client redirect URIs must not contain multiple host components.",
"pairwiseMalformedSectorIdentifierURI": "Malformed Sector Identifier URI.", "pairwiseMalformedSectorIdentifierURI": "Malformed Sector Identifier URI.",
"pairwiseFailedToGetRedirectURIs": "Failed to get redirect URIs from the Sector Identifier URI.", "pairwiseFailedToGetRedirectURIs": "Failed to get redirect URIs from the Sector Identifier URI.",
"pairwiseRedirectURIsMismatch": "Client redirect URIs does not match redirect URIs fetched from the Sector Identifier URI.", "pairwiseRedirectURIsMismatch": "Client redirect URIs does not match redirect URIs fetched from the Sector Identifier URI."
}; };
export default messages; export default messages;

View File

@ -10,7 +10,7 @@ const messages = {
"invalidPasswordMinSpecialCharsMessage": "Contraseña incorrecta: debe contener al menos {0} caracteres especiales.", "invalidPasswordMinSpecialCharsMessage": "Contraseña incorrecta: debe contener al menos {0} caracteres especiales.",
"invalidPasswordNotUsernameMessage": "Contraseña incorrecta: no puede ser igual al nombre de usuario.", "invalidPasswordNotUsernameMessage": "Contraseña incorrecta: no puede ser igual al nombre de usuario.",
"invalidPasswordRegexPatternMessage": "Contraseña incorrecta: no cumple la expresión regular.", "invalidPasswordRegexPatternMessage": "Contraseña incorrecta: no cumple la expresión regular.",
"invalidPasswordHistoryMessage": "Contraseña incorrecta: no puede ser igual a ninguna de las últimas {0} contraseñas.", "invalidPasswordHistoryMessage": "Contraseña incorrecta: no puede ser igual a ninguna de las últimas {0} contraseñas."
}; };
export default messages; export default messages;

View File

@ -10,7 +10,7 @@ const messages = {
"invalidPasswordMinSpecialCharsMessage": "Mot de passe invalide : doit contenir au moins {0} caractère(s) spéciaux.", "invalidPasswordMinSpecialCharsMessage": "Mot de passe invalide : doit contenir au moins {0} caractère(s) spéciaux.",
"invalidPasswordNotUsernameMessage": "Mot de passe invalide : ne doit pas être identique au nom d'utilisateur.", "invalidPasswordNotUsernameMessage": "Mot de passe invalide : ne doit pas être identique au nom d'utilisateur.",
"invalidPasswordRegexPatternMessage": "Mot de passe invalide : ne valide pas l'expression rationnelle.", "invalidPasswordRegexPatternMessage": "Mot de passe invalide : ne valide pas l'expression rationnelle.",
"invalidPasswordHistoryMessage": "Mot de passe invalide : ne doit pas être égal aux {0} derniers mot de passe.", "invalidPasswordHistoryMessage": "Mot de passe invalide : ne doit pas être égal aux {0} derniers mot de passe."
}; };
export default messages; export default messages;

View File

@ -30,7 +30,7 @@ const messages = {
"設定されたセレクター識別子URIがない場合は、クライアントのリダイレクトURIは複数のホスト・コンポーネントを含むことはできません。", "設定されたセレクター識別子URIがない場合は、クライアントのリダイレクトURIは複数のホスト・コンポーネントを含むことはできません。",
"pairwiseMalformedSectorIdentifierURI": "不正なセレクター識別子URIです。", "pairwiseMalformedSectorIdentifierURI": "不正なセレクター識別子URIです。",
"pairwiseFailedToGetRedirectURIs": "セクター識別子URIからリダイレクトURIを取得できませんでした。", "pairwiseFailedToGetRedirectURIs": "セクター識別子URIからリダイレクトURIを取得できませんでした。",
"pairwiseRedirectURIsMismatch": "クライアントのリダイレクトURIは、セクター識別子URIからフェッチされたリダイレクトURIと一致しません。", "pairwiseRedirectURIsMismatch": "クライアントのリダイレクトURIは、セクター識別子URIからフェッチされたリダイレクトURIと一致しません。"
}; };
export default messages; export default messages;

View File

@ -24,7 +24,7 @@ const messages = {
"Kuomet nesukonfigūruotas sektoriaus identifikatoriaus URL, kliento nukreipimo nuorodos privalo talpinti ne daugiau kaip vieną skirtingą serverio vardo komponentą.", "Kuomet nesukonfigūruotas sektoriaus identifikatoriaus URL, kliento nukreipimo nuorodos privalo talpinti ne daugiau kaip vieną skirtingą serverio vardo komponentą.",
"pairwiseMalformedSectorIdentifierURI": "Neteisinga sektoriaus identifikatoriaus URI.", "pairwiseMalformedSectorIdentifierURI": "Neteisinga sektoriaus identifikatoriaus URI.",
"pairwiseFailedToGetRedirectURIs": "Nepavyko gauti nukreipimo nuorodų iš sektoriaus identifikatoriaus URI.", "pairwiseFailedToGetRedirectURIs": "Nepavyko gauti nukreipimo nuorodų iš sektoriaus identifikatoriaus URI.",
"pairwiseRedirectURIsMismatch": "Kliento nukreipimo nuoroda neatitinka nukreipimo nuorodų iš sektoriaus identifikatoriaus URI.", "pairwiseRedirectURIsMismatch": "Kliento nukreipimo nuoroda neatitinka nukreipimo nuorodų iš sektoriaus identifikatoriaus URI."
}; };
export default messages; export default messages;

View File

@ -27,7 +27,7 @@ const messages = {
"Zonder een geconfigureerde Sector Identifier URI mogen client redirect URIs niet meerdere host componenten hebben.", "Zonder een geconfigureerde Sector Identifier URI mogen client redirect URIs niet meerdere host componenten hebben.",
"pairwiseMalformedSectorIdentifierURI": "Onjuist notatie in Sector Identifier URI.", "pairwiseMalformedSectorIdentifierURI": "Onjuist notatie in Sector Identifier URI.",
"pairwiseFailedToGetRedirectURIs": "Kon geen redirect URIs verkrijgen van de Sector Identifier URI.", "pairwiseFailedToGetRedirectURIs": "Kon geen redirect URIs verkrijgen van de Sector Identifier URI.",
"pairwiseRedirectURIsMismatch": "Client redirect URIs komen niet overeen met redict URIs ontvangen van de Sector Identifier URI.", "pairwiseRedirectURIsMismatch": "Client redirect URIs komen niet overeen met redict URIs ontvangen van de Sector Identifier URI."
}; };
export default messages; export default messages;

View File

@ -15,7 +15,7 @@ const messages = {
"ldapErrorMissingClientId": "KlientID må være tilgjengelig i config når sikkerhetsdomenerollemapping ikke brukes.", "ldapErrorMissingClientId": "KlientID må være tilgjengelig i config når sikkerhetsdomenerollemapping ikke brukes.",
"ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType": "Ikke mulig å bevare gruppearv og samtidig bruke UID medlemskapstype.", "ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType": "Ikke mulig å bevare gruppearv og samtidig bruke UID medlemskapstype.",
"ldapErrorCantWriteOnlyForReadOnlyLdap": "Kan ikke sette write-only når LDAP leverandør-modus ikke er WRITABLE", "ldapErrorCantWriteOnlyForReadOnlyLdap": "Kan ikke sette write-only når LDAP leverandør-modus ikke er WRITABLE",
"ldapErrorCantWriteOnlyAndReadOnly": "Kan ikke sette både write-only og read-only", "ldapErrorCantWriteOnlyAndReadOnly": "Kan ikke sette både write-only og read-only"
}; };
export default messages; export default messages;

View File

@ -18,7 +18,7 @@ const messages = {
"ldapErrorCantWriteOnlyForReadOnlyLdap": "Não é possível definir modo de somente escrita quando o provedor LDAP não suporta escrita", "ldapErrorCantWriteOnlyForReadOnlyLdap": "Não é possível definir modo de somente escrita quando o provedor LDAP não suporta escrita",
"ldapErrorCantWriteOnlyAndReadOnly": "Não é possível definir somente escrita e somente leitura ao mesmo tempo", "ldapErrorCantWriteOnlyAndReadOnly": "Não é possível definir somente escrita e somente leitura ao mesmo tempo",
"clientRedirectURIsFragmentError": "URIs de redirecionamento não podem conter fragmentos", "clientRedirectURIsFragmentError": "URIs de redirecionamento não podem conter fragmentos",
"clientRootURLFragmentError": "URL raiz não pode conter fragmentos", "clientRootURLFragmentError": "URL raiz não pode conter fragmentos"
}; };
export default messages; export default messages;

View File

@ -25,7 +25,7 @@ const messages = {
"Без конфигурации по части идентификатора URI, URI перенаправления клиента не может содержать несколько компонентов хоста.", "Без конфигурации по части идентификатора URI, URI перенаправления клиента не может содержать несколько компонентов хоста.",
"pairwiseMalformedSectorIdentifierURI": "Искаженная часть идентификатора URI.", "pairwiseMalformedSectorIdentifierURI": "Искаженная часть идентификатора URI.",
"pairwiseFailedToGetRedirectURIs": "Не удалось получить идентификаторы URI перенаправления из части идентификатора URI.", "pairwiseFailedToGetRedirectURIs": "Не удалось получить идентификаторы URI перенаправления из части идентификатора URI.",
"pairwiseRedirectURIsMismatch": "Клиент URI переадресации не соответствует URI переадресации, полученной из части идентификатора URI.", "pairwiseRedirectURIsMismatch": "Клиент URI переадресации не соответствует URI переадресации, полученной из части идентификатора URI."
}; };
export default messages; export default messages;

View File

@ -25,7 +25,7 @@ const messages = {
"Without a configured Sector Identifier URI, client redirect URIs must not contain multiple host components.", "Without a configured Sector Identifier URI, client redirect URIs must not contain multiple host components.",
"pairwiseMalformedSectorIdentifierURI": "Malformed Sector Identifier URI.", "pairwiseMalformedSectorIdentifierURI": "Malformed Sector Identifier URI.",
"pairwiseFailedToGetRedirectURIs": "无法从服务器获得重定向URL", "pairwiseFailedToGetRedirectURIs": "无法从服务器获得重定向URL",
"pairwiseRedirectURIsMismatch": "客户端的重定向URI与服务器端获取的URI配置不匹配。", "pairwiseRedirectURIsMismatch": "客户端的重定向URI与服务器端获取的URI配置不匹配。"
}; };
export default messages; export default messages;

View File

@ -34,7 +34,7 @@ const messages = {
"eventUpdateTotpSubject": "Actualització de OTP", "eventUpdateTotpSubject": "Actualització de OTP",
"eventUpdateTotpBody": "OTP s'ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l'administrador.", "eventUpdateTotpBody": "OTP s'ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l'administrador.",
"eventUpdateTotpBodyHtml": "eventUpdateTotpBodyHtml":
"<p>OTP s'ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l'administrador.</p>", "<p>OTP s'ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l'administrador.</p>"
}; };
export default messages; export default messages;

View File

@ -62,7 +62,7 @@ const messages = {
"linkExpirationFormatter.timePeriodUnit.days.1": "den", "linkExpirationFormatter.timePeriodUnit.days.1": "den",
"linkExpirationFormatter.timePeriodUnit.days.2": "dny", "linkExpirationFormatter.timePeriodUnit.days.2": "dny",
"linkExpirationFormatter.timePeriodUnit.days.3": "dny", "linkExpirationFormatter.timePeriodUnit.days.3": "dny",
"linkExpirationFormatter.timePeriodUnit.days.4": "dny", "linkExpirationFormatter.timePeriodUnit.days.4": "dny"
}; };
export default messages; export default messages;

View File

@ -38,7 +38,7 @@ const messages = {
"<p>Ihr Passwort wurde am {0} von {1} geändert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p>", "<p>Ihr Passwort wurde am {0} von {1} geändert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p>",
"eventUpdateTotpSubject": "OTP Aktualisiert", "eventUpdateTotpSubject": "OTP Aktualisiert",
"eventUpdateTotpBody": "OTP wurde am {0} von {1} geändert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.", "eventUpdateTotpBody": "OTP wurde am {0} von {1} geändert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.",
"eventUpdateTotpBodyHtml": "<p>OTP wurde am {0} von {1} geändert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p>", "eventUpdateTotpBodyHtml": "<p>OTP wurde am {0} von {1} geändert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p>"
}; };
export default messages; export default messages;

View File

@ -54,7 +54,7 @@ const messages = {
"linkExpirationFormatter.timePeriodUnit.days": "days", "linkExpirationFormatter.timePeriodUnit.days": "days",
"linkExpirationFormatter.timePeriodUnit.days.1": "day", "linkExpirationFormatter.timePeriodUnit.days.1": "day",
"emailVerificationBodyCode": "Please verify your email address by entering in the following code.\n\n{0}\n\n.", "emailVerificationBodyCode": "Please verify your email address by entering in the following code.\n\n{0}\n\n.",
"emailVerificationBodyCodeHtml": "<p>Please verify your email address by entering in the following code.</p><p><b>{0}</b></p>", "emailVerificationBodyCodeHtml": "<p>Please verify your email address by entering in the following code.</p><p><b>{0}</b></p>"
}; };
export default messages; export default messages;

View File

@ -33,7 +33,7 @@ const messages = {
"eventUpdateTotpSubject": "Actualización de OTP", "eventUpdateTotpSubject": "Actualización de OTP",
"eventUpdateTotpBody": "OTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido tú, por favor contacta con el administrador.", "eventUpdateTotpBody": "OTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido tú, por favor contacta con el administrador.",
"eventUpdateTotpBodyHtml": "eventUpdateTotpBodyHtml":
"<p>OTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido tú, por favor contacta con el administrador.</p>", "<p>OTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido tú, por favor contacta con el administrador.</p>"
}; };
export default messages; export default messages;

View File

@ -37,7 +37,7 @@ const messages = {
"eventUpdateTotpBody": "eventUpdateTotpBody":
"Le OTP a été mis à jour pour votre compte {0} depuis {1}. Si vous n'étiez pas à l'origine de cette requête, veuillez contacter votre administrateur.", "Le OTP a été mis à jour pour votre compte {0} depuis {1}. Si vous n'étiez pas à l'origine de cette requête, veuillez contacter votre administrateur.",
"eventUpdateTotpBodyHtml": "eventUpdateTotpBodyHtml":
"<p>Le OTP a été mis à jour pour votre compte {0} depuis {1}. Si vous n'étiez pas à l'origine de cette requête, veuillez contacter votre administrateur.</p>", "<p>Le OTP a été mis à jour pour votre compte {0} depuis {1}. Si vous n'étiez pas à l'origine de cette requête, veuillez contacter votre administrateur.</p>"
}; };
export default messages; export default messages;

View File

@ -59,7 +59,7 @@ const messages = {
"linkExpirationFormatter.timePeriodUnit.days": "giorni", "linkExpirationFormatter.timePeriodUnit.days": "giorni",
"linkExpirationFormatter.timePeriodUnit.days.1": "giorno", "linkExpirationFormatter.timePeriodUnit.days.1": "giorno",
"emailVerificationBodyCode": "Per favore verifica il tuo indirizzo email inserendo il codice seguente.\n\n{0}\n\n.", "emailVerificationBodyCode": "Per favore verifica il tuo indirizzo email inserendo il codice seguente.\n\n{0}\n\n.",
"emailVerificationBodyCodeHtml": "<p>Per favore verifica il tuo indirizzo email inserendo il codice seguente.</p><p><b>{0}</b></p>", "emailVerificationBodyCodeHtml": "<p>Per favore verifica il tuo indirizzo email inserendo il codice seguente.</p><p><b>{0}</b></p>"
}; };
export default messages; export default messages;

View File

@ -53,7 +53,7 @@ const messages = {
"linkExpirationFormatter.timePeriodUnit.days": "日", "linkExpirationFormatter.timePeriodUnit.days": "日",
"linkExpirationFormatter.timePeriodUnit.days.1": "日", "linkExpirationFormatter.timePeriodUnit.days.1": "日",
"emailVerificationBodyCode": "次のコードを入力してメールアドレスを確認してください。\n\n{0}\n\n.", "emailVerificationBodyCode": "次のコードを入力してメールアドレスを確認してください。\n\n{0}\n\n.",
"emailVerificationBodyCodeHtml": "<p>次のコードを入力してメールアドレスを確認してください。</p><p><b>{0}</b></p>", "emailVerificationBodyCodeHtml": "<p>次のコードを入力してメールアドレスを確認してください。</p><p><b>{0}</b></p>"
}; };
export default messages; export default messages;

View File

@ -37,7 +37,7 @@ const messages = {
"eventUpdatePasswordBodyHtml": "<p>{1} paskyroje {0} pakeisas jūsų slaptažodis. Jei Jūs nekeitėte, tuomet susisiekite su administratoriumi</p>", "eventUpdatePasswordBodyHtml": "<p>{1} paskyroje {0} pakeisas jūsų slaptažodis. Jei Jūs nekeitėte, tuomet susisiekite su administratoriumi</p>",
"eventUpdateTotpSubject": "OTP atnaujinimas", "eventUpdateTotpSubject": "OTP atnaujinimas",
"eventUpdateTotpBody": "OTP Jūsų {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi", "eventUpdateTotpBody": "OTP Jūsų {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi",
"eventUpdateTotpBodyHtml": "<p>OTP Jūsų {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi</p>", "eventUpdateTotpBodyHtml": "<p>OTP Jūsų {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi</p>"
}; };
export default messages; export default messages;

View File

@ -47,7 +47,7 @@ const messages = {
"linkExpirationFormatter.timePeriodUnit.hours": "uur", "linkExpirationFormatter.timePeriodUnit.hours": "uur",
"linkExpirationFormatter.timePeriodUnit.hours.1": "uur", "linkExpirationFormatter.timePeriodUnit.hours.1": "uur",
"linkExpirationFormatter.timePeriodUnit.days": "dagen", "linkExpirationFormatter.timePeriodUnit.days": "dagen",
"linkExpirationFormatter.timePeriodUnit.days.1": "dag", "linkExpirationFormatter.timePeriodUnit.days.1": "dag"
}; };
export default messages; export default messages;

View File

@ -38,7 +38,7 @@ const messages = {
"eventUpdateTotpSubject": "Oppdater engangskode", "eventUpdateTotpSubject": "Oppdater engangskode",
"eventUpdateTotpBody": "Engangskode ble oppdatert for kontoen din på {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.", "eventUpdateTotpBody": "Engangskode ble oppdatert for kontoen din på {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.",
"eventUpdateTotpBodyHtml": "eventUpdateTotpBodyHtml":
"<p>Engangskode ble oppdatert for kontoen din på {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. </p>", "<p>Engangskode ble oppdatert for kontoen din på {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. </p>"
}; };
export default messages; export default messages;

View File

@ -65,7 +65,7 @@ const messages = {
"linkExpirationFormatter.timePeriodUnit.days": "dni", "linkExpirationFormatter.timePeriodUnit.days": "dni",
"linkExpirationFormatter.timePeriodUnit.days.1": "dzień", "linkExpirationFormatter.timePeriodUnit.days.1": "dzień",
"emailVerificationBodyCode": "Potwierdź swój adres e-mail wprowadzając następujący kod.\n\n{0}\n\n.", "emailVerificationBodyCode": "Potwierdź swój adres e-mail wprowadzając następujący kod.\n\n{0}\n\n.",
"emailVerificationBodyCodeHtml": "<p>Potwierdź swój adres e-mail, wprowadzając następujący kod.</p><p><b>{0}</b></p>", "emailVerificationBodyCodeHtml": "<p>Potwierdź swój adres e-mail, wprowadzając następujący kod.</p><p><b>{0}</b></p>"
}; };
export default messages; export default messages;

View File

@ -56,7 +56,7 @@ const messages = {
"linkExpirationFormatter.timePeriodUnit.days": "dias", "linkExpirationFormatter.timePeriodUnit.days": "dias",
"linkExpirationFormatter.timePeriodUnit.days.1": "dia", "linkExpirationFormatter.timePeriodUnit.days.1": "dia",
"emailVerificationBodyCode": "Verifique seu endereço de e-mail digitando o seguinte código.\n\n{0}\n\n.", "emailVerificationBodyCode": "Verifique seu endereço de e-mail digitando o seguinte código.\n\n{0}\n\n.",
"emailVerificationBodyCodeHtml": "<p>Verifique seu endereço de e-mail digitando o seguinte código.</p><p><b>{0}</b></p>", "emailVerificationBodyCodeHtml": "<p>Verifique seu endereço de e-mail digitando o seguinte código.</p><p><b>{0}</b></p>"
}; };
export default messages; export default messages;

View File

@ -38,7 +38,7 @@ const messages = {
"eventUpdateTotpSubject": "Обновление OTP", "eventUpdateTotpSubject": "Обновление OTP",
"eventUpdateTotpBody": "OTP был обновлен в вашей учетной записи {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.", "eventUpdateTotpBody": "OTP был обновлен в вашей учетной записи {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.",
"eventUpdateTotpBodyHtml": "eventUpdateTotpBodyHtml":
"<p>OTP был обновлен в вашей учетной записи {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.</p>", "<p>OTP был обновлен в вашей учетной записи {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.</p>"
}; };
export default messages; export default messages;

View File

@ -51,7 +51,7 @@ const messages = {
"linkExpirationFormatter.timePeriodUnit.hours": "hodiny", "linkExpirationFormatter.timePeriodUnit.hours": "hodiny",
"linkExpirationFormatter.timePeriodUnit.hours.1": "hodina", "linkExpirationFormatter.timePeriodUnit.hours.1": "hodina",
"linkExpirationFormatter.timePeriodUnit.days": "dni", "linkExpirationFormatter.timePeriodUnit.days": "dni",
"linkExpirationFormatter.timePeriodUnit.days.1": "deň ", "linkExpirationFormatter.timePeriodUnit.days.1": "deň "
}; };
export default messages; export default messages;

View File

@ -39,7 +39,7 @@ const messages = {
"eventUpdateTotpSubject": "Uppdatera OTP", "eventUpdateTotpSubject": "Uppdatera OTP",
"eventUpdateTotpBody": "OTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.", "eventUpdateTotpBody": "OTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.",
"eventUpdateTotpBodyHtml": "eventUpdateTotpBodyHtml":
"<p>OTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.</p>", "<p>OTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.</p>"
}; };
export default messages; export default messages;

View File

@ -55,7 +55,7 @@ const messages = {
"linkExpirationFormatter.timePeriodUnit.days": "gün", "linkExpirationFormatter.timePeriodUnit.days": "gün",
"linkExpirationFormatter.timePeriodUnit.days.1": "gün", "linkExpirationFormatter.timePeriodUnit.days.1": "gün",
"emailVerificationBodyCode": "Lütfen aşağıdaki kodu girerek e-posta adresinizi doğrulayın.\n\n{0}\n\n.", "emailVerificationBodyCode": "Lütfen aşağıdaki kodu girerek e-posta adresinizi doğrulayın.\n\n{0}\n\n.",
"emailVerificationBodyCodeHtml": "<p>Lütfen aşağıdaki kodu girerek e-posta adresinizi doğrulayın.</p><p><b>{0}</b></p>", "emailVerificationBodyCodeHtml": "<p>Lütfen aşağıdaki kodu girerek e-posta adresinizi doğrulayın.</p><p><b>{0}</b></p>"
}; };
export default messages; export default messages;

View File

@ -34,7 +34,7 @@ const messages = {
"eventUpdatePasswordBodyHtml": "<p>您的密码在{0} 由 {1}更改. 如非本人操作,请联系管理员</p>", "eventUpdatePasswordBodyHtml": "<p>您的密码在{0} 由 {1}更改. 如非本人操作,请联系管理员</p>",
"eventUpdateTotpSubject": "更新 OTP", "eventUpdateTotpSubject": "更新 OTP",
"eventUpdateTotpBody": "您账户的OTP 配置在{0} 由 {1}更改. 如非本人操作,请联系管理员。", "eventUpdateTotpBody": "您账户的OTP 配置在{0} 由 {1}更改. 如非本人操作,请联系管理员。",
"eventUpdateTotpBodyHtml": "<p>您账户的OTP 配置在{0} 由 {1}更改. 如非本人操作,请联系管理员。</p>", "eventUpdateTotpBodyHtml": "<p>您账户的OTP 配置在{0} 由 {1}更改. 如非本人操作,请联系管理员。</p>"
}; };
export default messages; export default messages;

View File

@ -182,7 +182,7 @@ const messages = {
"missingParameterMessage": "Paràmetres que falten: {0}", "missingParameterMessage": "Paràmetres que falten: {0}",
"clientNotFoundMessage": "Client no trobat", "clientNotFoundMessage": "Client no trobat",
"invalidParameterMessage": "Paràmetre no vàlid: {0}", "invalidParameterMessage": "Paràmetre no vàlid: {0}",
"alreadyLoggedIn": "You are already logged in.", "alreadyLoggedIn": "You are already logged in."
}; };
export default messages; export default messages;

View File

@ -233,7 +233,7 @@ const messages = {
"requiredAction.UPDATE_PASSWORD": "Aktualizace hesla", "requiredAction.UPDATE_PASSWORD": "Aktualizace hesla",
"requiredAction.UPDATE_PROFILE": "Aktualizovat profil", "requiredAction.UPDATE_PROFILE": "Aktualizovat profil",
"requiredAction.VERIFY_EMAIL": "Ověřit e-mail", "requiredAction.VERIFY_EMAIL": "Ověřit e-mail",
"p3pPolicy": 'CP="Toto není politika P3P!"', "p3pPolicy": 'CP="Toto není politika P3P!"'
}; };
export default messages; export default messages;

View File

@ -244,7 +244,7 @@ const messages = {
"clientCertificate": "X509 Client Zertifikat:", "clientCertificate": "X509 Client Zertifikat:",
"noCertificate": "[Kein Zertifikat]", "noCertificate": "[Kein Zertifikat]",
"pageNotFound": "Seite nicht gefunden", "pageNotFound": "Seite nicht gefunden",
"internalServerError": "Es ist ein interner Server-Fehler aufgetreten", "internalServerError": "Es ist ein interner Server-Fehler aufgetreten"
}; };
export default messages; export default messages;

View File

@ -328,7 +328,7 @@ const messages = {
"webauthn-error-auth-verification": "Security key authentication result is invalid.", "webauthn-error-auth-verification": "Security key authentication result is invalid.",
"webauthn-error-register-verification": "Security key registration result is invalid.", "webauthn-error-register-verification": "Security key registration result is invalid.",
"webauthn-error-user-not-found": "Unknown user authenticated by the Security key.", "webauthn-error-user-not-found": "Unknown user authenticated by the Security key.",
"identity-provider-redirector": "Connect with another Identity Provider", "identity-provider-redirector": "Connect with another Identity Provider"
}; };
export default messages; export default messages;

View File

@ -182,7 +182,7 @@ const messages = {
"missingParameterMessage": "Parámetros que faltan: {0}", "missingParameterMessage": "Parámetros que faltan: {0}",
"clientNotFoundMessage": "Cliente no encontrado", "clientNotFoundMessage": "Cliente no encontrado",
"invalidParameterMessage": "Parámetro no válido: {0}", "invalidParameterMessage": "Parámetro no válido: {0}",
"alreadyLoggedIn": "You are already logged in.", "alreadyLoggedIn": "You are already logged in."
}; };
export default messages; export default messages;

View File

@ -249,7 +249,7 @@ const messages = {
"clientCertificate": "X509 certificat client:", "clientCertificate": "X509 certificat client:",
"noCertificate": "[Pas de certificat]", "noCertificate": "[Pas de certificat]",
"pageNotFound": "Page non trouvée", "pageNotFound": "Page non trouvée",
"internalServerError": "Une erreur interne du serveur s'est produite", "internalServerError": "Une erreur interne du serveur s'est produite"
}; };
export default messages; export default messages;

View File

@ -310,7 +310,7 @@ const messages = {
"webauthn-error-auth-verification": "Il risultato dell'autenticazione con la chiave di sicurezza non è valido.", "webauthn-error-auth-verification": "Il risultato dell'autenticazione con la chiave di sicurezza non è valido.",
"webauthn-error-register-verification": "Il risultato della registrazione della chiave di sicurezza non è valido.", "webauthn-error-register-verification": "Il risultato della registrazione della chiave di sicurezza non è valido.",
"webauthn-error-user-not-found": "Utente sconosciuto autenticato con la chiave di sicurezza.", "webauthn-error-user-not-found": "Utente sconosciuto autenticato con la chiave di sicurezza.",
"identity-provider-redirector": "Connettiti con un altro identity provider.", "identity-provider-redirector": "Connettiti con un altro identity provider."
}; };
export default messages; export default messages;

View File

@ -327,7 +327,7 @@ const messages = {
"webauthn-error-auth-verification": "セキュリティーキーの認証結果が無効です。", "webauthn-error-auth-verification": "セキュリティーキーの認証結果が無効です。",
"webauthn-error-register-verification": "セキュリティーキーの登録結果が無効です。", "webauthn-error-register-verification": "セキュリティーキーの登録結果が無効です。",
"webauthn-error-user-not-found": "セキュリティーキーで認証された不明なユーザー。", "webauthn-error-user-not-found": "セキュリティーキーで認証された不明なユーザー。",
"identity-provider-redirector": "別のアイデンティティー・プロバイダーと接続する", "identity-provider-redirector": "別のアイデンティティー・プロバイダーと接続する"
}; };
export default messages; export default messages;

View File

@ -197,7 +197,7 @@ const messages = {
"clientNotFoundMessage": "Nenurodytas klientas.", "clientNotFoundMessage": "Nenurodytas klientas.",
"clientDisabledMessage": "Kliento galiojimas išjungtas.", "clientDisabledMessage": "Kliento galiojimas išjungtas.",
"invalidParameterMessage": "Neteisingas parametras: {0}", "invalidParameterMessage": "Neteisingas parametras: {0}",
"alreadyLoggedIn": "Jūs jau esate prisijungę.", "alreadyLoggedIn": "Jūs jau esate prisijungę."
}; };
export default messages; export default messages;

View File

@ -264,7 +264,7 @@ const messages = {
"U bent verplicht om uw e-mailadres te verifiëren. Een e-mail met de verificatiecode is naar {0} gestuurd. Voer deze code hieronder in.", "U bent verplicht om uw e-mailadres te verifiëren. Een e-mail met de verificatiecode is naar {0} gestuurd. Voer deze code hieronder in.",
"console-email-code": "E-mail Code:", "console-email-code": "E-mail Code:",
"console-accept-terms": "Accepteert u de voorwaarden? [y/n]:", "console-accept-terms": "Accepteert u de voorwaarden? [y/n]:",
"console-accept": "y", "console-accept": "y"
}; };
export default messages; export default messages;

View File

@ -209,7 +209,7 @@ const messages = {
"clientNotFoundMessage": "Klient ikke funnet.", "clientNotFoundMessage": "Klient ikke funnet.",
"clientDisabledMessage": "Klient deaktivert.", "clientDisabledMessage": "Klient deaktivert.",
"invalidParameterMessage": "Ugyldig parameter: {0}", "invalidParameterMessage": "Ugyldig parameter: {0}",
"alreadyLoggedIn": "Du er allerede innlogget.", "alreadyLoggedIn": "Du er allerede innlogget."
}; };
export default messages; export default messages;

View File

@ -280,7 +280,7 @@ const messages = {
"Musisz zweryfikować swój adres e-mail. Wiadomość e-mail z kodem weryfikacyjnym została wysłana do {0}. Podaj ten kod poniżej.", "Musisz zweryfikować swój adres e-mail. Wiadomość e-mail z kodem weryfikacyjnym została wysłana do {0}. Podaj ten kod poniżej.",
"console-email-code": "Kod z e-mail:", "console-email-code": "Kod z e-mail:",
"console-accept-terms": "Akceptujesz warunki? [t/n]:", "console-accept-terms": "Akceptujesz warunki? [t/n]:",
"console-accept": "t", "console-accept": "t"
}; };
export default messages; export default messages;

View File

@ -326,7 +326,7 @@ const messages = {
"webauthn-error-auth-verification": "O resultado da autenticação da Chave de Segurança é inválido.", "webauthn-error-auth-verification": "O resultado da autenticação da Chave de Segurança é inválido.",
"webauthn-error-register-verification": "O resultado do registro da Chave de Segurança é inválido.", "webauthn-error-register-verification": "O resultado do registro da Chave de Segurança é inválido.",
"webauthn-error-user-not-found": "Usuário desconhecido autenticado pela Chave de Segurança.", "webauthn-error-user-not-found": "Usuário desconhecido autenticado pela Chave de Segurança.",
"identity-provider-redirector": "Conecte-se com outro Provedor de Identidade", "identity-provider-redirector": "Conecte-se com outro Provedor de Identidade"
}; };
export default messages; export default messages;

View File

@ -199,7 +199,7 @@ const messages = {
"clientNotFoundMessage": "Клиент не найден.", "clientNotFoundMessage": "Клиент не найден.",
"clientDisabledMessage": "Клиент отключен.", "clientDisabledMessage": "Клиент отключен.",
"invalidParameterMessage": "Неверный параметр: {0}", "invalidParameterMessage": "Неверный параметр: {0}",
"alreadyLoggedIn": "Вы уже вошли.", "alreadyLoggedIn": "Вы уже вошли."
}; };
export default messages; export default messages;

View File

@ -238,7 +238,7 @@ const messages = {
"clientCertificate": "certifikát klienta X509:", "clientCertificate": "certifikát klienta X509:",
"noCertificate": "[Bez certifikátu]", "noCertificate": "[Bez certifikátu]",
"pageNotFound": "Stránka nebola nájdená", "pageNotFound": "Stránka nebola nájdená",
"internalServerError": "Vyskytla sa interná chyba servera", "internalServerError": "Vyskytla sa interná chyba servera"
}; };
export default messages; export default messages;

View File

@ -195,7 +195,7 @@ const messages = {
"clientNotFoundMessage": "Klienten hittades ej.", "clientNotFoundMessage": "Klienten hittades ej.",
"clientDisabledMessage": "Klienten är inaktiverad.", "clientDisabledMessage": "Klienten är inaktiverad.",
"invalidParameterMessage": "Ogiltig parameter: {0}", "invalidParameterMessage": "Ogiltig parameter: {0}",
"alreadyLoggedIn": "Du är redan inloggad.", "alreadyLoggedIn": "Du är redan inloggad."
}; };
export default messages; export default messages;

View File

@ -281,7 +281,7 @@ const messages = {
"E-posta adresinizi doğrulamanız gerekiyor. Bir doğrulama kodu içeren {0} adresine bir e-posta gönderildi. Lütfen bu kodu aşağıdaki girdiye giriniz.", "E-posta adresinizi doğrulamanız gerekiyor. Bir doğrulama kodu içeren {0} adresine bir e-posta gönderildi. Lütfen bu kodu aşağıdaki girdiye giriniz.",
"console-email-code": "E-posta Kodu:", "console-email-code": "E-posta Kodu:",
"console-accept-terms": "Şartları kabul et? [e/h]:", "console-accept-terms": "Şartları kabul et? [e/h]:",
"console-accept": "e", "console-accept": "e"
}; };
export default messages; export default messages;

View File

@ -206,7 +206,7 @@ const messages = {
"clientNotFoundMessage": "客户端未找到", "clientNotFoundMessage": "客户端未找到",
"clientDisabledMessage": "客户端已禁用", "clientDisabledMessage": "客户端已禁用",
"invalidParameterMessage": "无效的参数 : {0}", "invalidParameterMessage": "无效的参数 : {0}",
"alreadyLoggedIn": "您已经登录", "alreadyLoggedIn": "您已经登录"
}; };
export default messages; export default messages;

Some files were not shown because too many files have changed in this diff Show More