Compare commits

...

6 Commits

Author SHA1 Message Date
d88e0e4dd5 Bump version 2025-02-24 18:46:06 +01:00
18c36eb4de Help pepole debug when mvn build fails 2025-02-24 18:06:28 +01:00
80aeabad51 Bump version 2025-02-17 12:59:49 +01:00
419e1f473a Merge pull request #791 from keycloakify/all-contributors/add-EternalSide
docs: add EternalSide as a contributor for code
2025-02-17 12:59:19 +01:00
80988125e8 Merge pull request #789 from EternalSide/fix/add-passwordPolicy-maxLength
fix: add maxLength passwordPolicy in the getUserProfileApi
2025-02-17 12:59:08 +01:00
53820e1e34 fix: add maxLength passwordPolicy in the getUserProfileApi 2025-02-17 13:21:55 +03:00
4 changed files with 64 additions and 24 deletions

View File

@ -1,6 +1,6 @@
{
"name": "keycloakify",
"version": "11.8.14",
"version": "11.8.16",
"description": "Framework to create custom Keycloak UIs",
"repository": {
"type": "git",

View File

@ -220,31 +220,39 @@ export async function buildJar(params: {
);
}
await new Promise<void>((resolve, reject) =>
child_process.exec(
`mvn clean install -Dmaven.repo.local="${pathJoin(keycloakifyBuildCacheDirPath, ".m2")}"`,
{ cwd: keycloakifyBuildCacheDirPath },
error => {
if (error !== null) {
console.error(
`Build jar failed: ${JSON.stringify(
{
jarFileBasename,
keycloakAccountV1Version,
keycloakThemeAdditionalInfoExtensionVersion
},
null,
2
)}`
);
{
const mvnBuildCmd = `mvn clean install -Dmaven.repo.local="${pathJoin(keycloakifyBuildCacheDirPath, ".m2")}"`;
reject(error);
return;
await new Promise<void>((resolve, reject) =>
child_process.exec(
mvnBuildCmd,
{ cwd: keycloakifyBuildCacheDirPath },
error => {
if (error !== null) {
console.error(
[
`Build jar failed: ${JSON.stringify(
{
jarFileBasename,
keycloakAccountV1Version,
keycloakThemeAdditionalInfoExtensionVersion
},
null,
2
)}`,
"Try running the following command to debug the issue (you are probably under a restricted network and you need to configure your proxy):",
`cd ${keycloakifyBuildCacheDirPath} && ${mvnBuildCmd}`
].join("\n")
);
reject(error);
return;
}
resolve();
}
resolve();
}
)
);
)
);
}
await fs.rename(
pathJoin(

View File

@ -769,6 +769,8 @@ export declare namespace Validators {
export type PasswordPolicies = {
/** The minimum length of the password */
length?: number;
/** The maximum length of the password */
maxLength?: number;
/** The minimum number of digits required in the password */
digits?: number;
/** The minimum number of lowercase characters required in the password */

View File

@ -509,6 +509,8 @@ function formStateSelector(params: { state: internal.State }): FormState {
switch (error.source.name) {
case "length":
return hasLostFocusAtLeastOnce;
case "maxLength":
return hasLostFocusAtLeastOnce;
case "digits":
return hasLostFocusAtLeastOnce;
case "lowerCase":
@ -967,6 +969,34 @@ function createGetErrors(params: { kcContext: KcContextLike_useGetErrors }) {
});
}
check_password_policy_x: {
const policyName = "maxLength";
const policy = passwordPolicies[policyName];
if (!policy) {
break check_password_policy_x;
}
const maxLength = policy;
if (value.length <= maxLength) {
break check_password_policy_x;
}
errors.push({
advancedMsgArgs: [
"invalidPasswordMaxLengthMessage" satisfies MessageKey_defaultSet,
`${maxLength}`
] as const,
fieldIndex: undefined,
source: {
type: "passwordPolicy",
name: policyName
}
});
}
check_password_policy_x: {
const policyName = "digits";