keycloakify 5.4.6 → 5.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +4 -0
  3. package/bin/build-keycloak-theme/build-keycloak-theme.js +11 -7
  4. package/bin/build-keycloak-theme/build-keycloak-theme.js.map +1 -1
  5. package/bin/build-keycloak-theme/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +25 -27
  6. package/bin/build-keycloak-theme/generateFtl/generateFtl.d.ts +1 -1
  7. package/bin/build-keycloak-theme/generateFtl/generateFtl.js +4 -3
  8. package/bin/build-keycloak-theme/generateFtl/generateFtl.js.map +1 -1
  9. package/bin/build-keycloak-theme/generateFtl/index.js +5 -1
  10. package/bin/build-keycloak-theme/generateFtl/index.js.map +1 -1
  11. package/bin/build-keycloak-theme/generateJavaStackFiles.js +12 -8
  12. package/bin/build-keycloak-theme/generateJavaStackFiles.js.map +1 -1
  13. package/bin/build-keycloak-theme/generateKeycloakThemeResources.js +7 -3
  14. package/bin/build-keycloak-theme/generateKeycloakThemeResources.js.map +1 -1
  15. package/bin/build-keycloak-theme/generateStartKeycloakTestingContainer.js +10 -6
  16. package/bin/build-keycloak-theme/generateStartKeycloakTestingContainer.js.map +1 -1
  17. package/bin/build-keycloak-theme/index.js +5 -1
  18. package/bin/build-keycloak-theme/index.js.map +1 -1
  19. package/bin/build-keycloak-theme/replaceImportFromStatic.js +15 -11
  20. package/bin/build-keycloak-theme/replaceImportFromStatic.js.map +1 -1
  21. package/bin/create-keycloak-email-directory.js +7 -3
  22. package/bin/create-keycloak-email-directory.js.map +1 -1
  23. package/bin/download-builtin-keycloak-theme.js +3 -3
  24. package/bin/download-builtin-keycloak-theme.js.map +1 -1
  25. package/bin/generate-i18n-messages.js +9 -5
  26. package/bin/generate-i18n-messages.js.map +1 -1
  27. package/bin/link_in_test_app.js +11 -6
  28. package/bin/link_in_test_app.js.map +1 -1
  29. package/bin/tools/NpmModuleVersion.js +3 -3
  30. package/bin/tools/NpmModuleVersion.js.map +1 -1
  31. package/bin/tools/crawl.js +5 -1
  32. package/bin/tools/crawl.js.map +1 -1
  33. package/bin/tools/downloadAndUnzip.js +2 -2
  34. package/bin/tools/downloadAndUnzip.js.map +1 -1
  35. package/bin/tools/getProjectRoot.js +5 -1
  36. package/bin/tools/getProjectRoot.js.map +1 -1
  37. package/bin/tools/grant-exec-perms.js +1 -1
  38. package/bin/tools/grant-exec-perms.js.map +1 -1
  39. package/bin/tools/rm.js +1 -1
  40. package/bin/tools/rm.js.map +1 -1
  41. package/bin/tools/transformCodebase.js +5 -1
  42. package/bin/tools/transformCodebase.js.map +1 -1
  43. package/lib/components/Error.js +1 -1
  44. package/lib/components/Error.js.map +1 -1
  45. package/lib/components/Info.js +1 -1
  46. package/lib/components/Info.js.map +1 -1
  47. package/lib/components/KcApp.js +17 -14
  48. package/lib/components/KcApp.js.map +1 -1
  49. package/lib/components/Login.js +6 -6
  50. package/lib/components/Login.js.map +1 -1
  51. package/lib/components/LoginConfigTotp.d.ts +6 -0
  52. package/lib/components/LoginConfigTotp.js +44 -0
  53. package/lib/components/LoginConfigTotp.js.map +1 -0
  54. package/lib/components/LoginIdpLinkConfirm.js +1 -1
  55. package/lib/components/LoginIdpLinkConfirm.js.map +1 -1
  56. package/lib/components/LoginIdpLinkEmail.js +1 -1
  57. package/lib/components/LoginIdpLinkEmail.js.map +1 -1
  58. package/lib/components/LoginOtp.js +1 -1
  59. package/lib/components/LoginOtp.js.map +1 -1
  60. package/lib/components/LoginPageExpired.js +1 -1
  61. package/lib/components/LoginPageExpired.js.map +1 -1
  62. package/lib/components/LoginResetPassword.js +1 -1
  63. package/lib/components/LoginResetPassword.js.map +1 -1
  64. package/lib/components/LoginUpdatePassword.js +1 -1
  65. package/lib/components/LoginUpdatePassword.js.map +1 -1
  66. package/lib/components/LoginUpdateProfile.js +1 -1
  67. package/lib/components/LoginUpdateProfile.js.map +1 -1
  68. package/lib/components/LoginVerifyEmail.js +1 -1
  69. package/lib/components/LoginVerifyEmail.js.map +1 -1
  70. package/lib/components/Register.js +1 -1
  71. package/lib/components/Register.js.map +1 -1
  72. package/lib/components/RegisterUserProfile.js +7 -7
  73. package/lib/components/RegisterUserProfile.js.map +1 -1
  74. package/lib/components/Template.js +4 -4
  75. package/lib/components/Template.js.map +1 -1
  76. package/lib/components/Terms.js +1 -1
  77. package/lib/components/Terms.js.map +1 -1
  78. package/lib/getKcContext/KcContextBase.d.ts +28 -1
  79. package/lib/getKcContext/KcContextBase.js.map +1 -1
  80. package/lib/getKcContext/getKcContext.js +1 -1
  81. package/lib/getKcContext/getKcContext.js.map +1 -1
  82. package/lib/getKcContext/kcContextMocks/index.js +5 -1
  83. package/lib/getKcContext/kcContextMocks/index.js.map +1 -1
  84. package/lib/getKcContext/kcContextMocks/kcContextMocks.js +17 -1
  85. package/lib/getKcContext/kcContextMocks/kcContextMocks.js.map +1 -1
  86. package/lib/i18n/index.d.ts +1 -1
  87. package/lib/i18n/index.js +5 -5
  88. package/lib/i18n/index.js.map +1 -1
  89. package/lib/index.js +5 -1
  90. package/lib/index.js.map +1 -1
  91. package/lib/keycloakJsAdapter.d.ts +1 -0
  92. package/lib/keycloakJsAdapter.js +31 -10
  93. package/lib/keycloakJsAdapter.js.map +1 -1
  94. package/lib/useFormValidationSlice.d.ts +1 -1
  95. package/package.json +7 -3
  96. package/src/bin/build-keycloak-theme/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +25 -27
  97. package/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +1 -0
  98. package/src/bin/link_in_test_app.ts +1 -1
  99. package/src/lib/components/KcApp.tsx +3 -0
  100. package/src/lib/components/LoginConfigTotp.tsx +183 -0
  101. package/src/lib/getKcContext/KcContextBase.ts +30 -1
  102. package/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts +21 -0
  103. package/src/lib/keycloakJsAdapter.ts +37 -11
@@ -24,7 +24,8 @@ export type KcContextBase =
24
24
  | KcContextBase.LoginUpdateProfile
25
25
  | KcContextBase.LoginIdpLinkConfirm
26
26
  | KcContextBase.LoginIdpLinkEmail
27
- | KcContextBase.LoginPageExpired;
27
+ | KcContextBase.LoginPageExpired
28
+ | KcContextBase.LoginConfigTotp;
28
29
 
29
30
  export declare namespace KcContextBase {
30
31
  export type Common = {
@@ -223,6 +224,34 @@ export declare namespace KcContextBase {
223
224
  export type LoginPageExpired = Common & {
224
225
  pageId: "login-page-expired.ftl";
225
226
  };
227
+
228
+ export type LoginConfigTotp = Common & {
229
+ pageId: "login-config-totp.ftl";
230
+ mode?: "qr" | "manual" | undefined | null;
231
+ totp: {
232
+ totpSecretEncoded: string;
233
+ qrUrl: string;
234
+ policy: {
235
+ supportedApplications: string[];
236
+ algorithm: "HmacSHA1" | "HmacSHA256" | "HmacSHA512";
237
+ digits: number;
238
+ lookAheadWindow: number;
239
+ } & (
240
+ | {
241
+ type: "totp";
242
+ period: number;
243
+ }
244
+ | {
245
+ type: "hotp";
246
+ initialCounter: number;
247
+ }
248
+ );
249
+ totpSecretQrCode: string;
250
+ manualUrl: string;
251
+ totpSecret: string;
252
+ otpCredentials: { id: string; userLabel: string }[];
253
+ };
254
+ };
226
255
  }
227
256
 
228
257
  export type Attribute = {
@@ -387,4 +387,25 @@ export const kcContextMocks: KcContextBase[] = [
387
387
  "username": "anUsername",
388
388
  },
389
389
  }),
390
+ id<KcContextBase.LoginConfigTotp>({
391
+ ...kcContextCommonMock,
392
+ "pageId": "login-config-totp.ftl",
393
+ totp: {
394
+ totpSecretEncoded: "KVVF G2BY N4YX S6LB IUYT K2LH IFYE 4SBV",
395
+ qrUrl: "#",
396
+ totpSecretQrCode:
397
+ "iVBORw0KGgoAAAANSUhEUgAAAPYAAAD2AQAAAADNaUdlAAACM0lEQVR4Xu3OIZJgOQwDUDFd2UxiurLAVnnbHw4YGDKtSiWOn4Gxf81//7r/+q8b4HfLGBZDK9d85NmNR+sB42sXvOYrN5P1DcgYYFTGfOlbzE8gzwy3euweGizw7cfdl34/GRhlkxjKNV+5AebPXPORX1JuB9x8ZfbyyD2y1krWAKsbMq1HnqQDaLfa77p4+MqvzEGSqvSAD/2IHW2yHaigR9tX3m8dDIYGcNf3f+gDpVBZbZU77zyJ6Rlcy+qoTMG887KAPD9hsh6a1Sv3gJUHGHUAxSMzj7zqDDe7Phmt2eG+8UsMxjRGm816MAO+8VMl1R1jGHOrZB/5Zo/WXAPgxixm9Mo96vDGrM1eOto8c4Ax4wF437mifOXlpiPzCnN7Y9l95NnEMxgMY9AAGA8fucH14Y1aVb6N/cqrmyh0BVht7k1e+bU8LK0Cg5vmVq9c5vHIjOfqxDIfeTraNVTwewa4wVe+SW5N+uP1qACeudUZbqGOfA6VZV750Noq2Xx3kpveV44ZelSV1V7KFHzkWyVrrlUwG0Pl9pWnoy3vsQoME6vKI69i5osVgwWzHT7zjmJtMcNUSVn1oYMd7ZodbgowZl45VG0uVuLPUr1yc79uaQBag/mqR34xhlWyHm1prplHboCWdZ4TeZjsK8+dI+jbz1C5hl65mcpgB5dhcj8+dGO+0Ko68+lD37JDD83dpDLzzK+TrQyaVwGj6pUboGV+7+AyN8An/pf84/7rv/4/1l4OCc/1BYMAAAAASUVORK5CYII=",
398
+ manualUrl: "#",
399
+ totpSecret: "G4nsI8lQagRMUchH8jEG",
400
+ otpCredentials: [],
401
+ policy: {
402
+ supportedApplications: ["FreeOTP", "Google Authenticator"],
403
+ algorithm: "HmacSHA1",
404
+ digits: 6,
405
+ lookAheadWindow: 1,
406
+ type: "totp",
407
+ period: 30,
408
+ },
409
+ },
410
+ }),
390
411
  ];
@@ -44,8 +44,9 @@ export declare namespace keycloak_js {
44
44
  export function createKeycloakAdapter(params: {
45
45
  keycloakInstance: keycloak_js.KeycloakInstance;
46
46
  transformUrlBeforeRedirect(url: string): string;
47
+ getRedirectMethod?: () => "overwrite location.href" | "location.replace";
47
48
  }): keycloak_js.KeycloakAdapter {
48
- const { keycloakInstance, transformUrlBeforeRedirect } = params;
49
+ const { keycloakInstance, transformUrlBeforeRedirect, getRedirectMethod = () => "overwrite location.href" } = params;
49
50
 
50
51
  const neverResolvingPromise: keycloak_js.KeycloakPromise<void, void> = Object.defineProperties(new Promise(() => {}), {
51
52
  "success": { "value": () => {} },
@@ -54,25 +55,50 @@ export function createKeycloakAdapter(params: {
54
55
 
55
56
  return {
56
57
  "login": options => {
57
- window.location.href = transformUrlBeforeRedirect(keycloakInstance.createLoginUrl(options));
58
- return neverResolvingPromise;
59
- },
60
- "logout": options => {
61
- window.location.replace(transformUrlBeforeRedirect(keycloakInstance.createLogoutUrl(options)));
58
+ const newHref = transformUrlBeforeRedirect(keycloakInstance.createLoginUrl(options));
59
+ switch (getRedirectMethod()) {
60
+ case "location.replace":
61
+ window.location.replace(newHref);
62
+ break;
63
+ case "overwrite location.href":
64
+ window.location.href = newHref;
65
+ break;
66
+ }
62
67
  return neverResolvingPromise;
63
68
  },
64
69
  "register": options => {
65
- window.location.href = transformUrlBeforeRedirect(keycloakInstance.createRegisterUrl(options));
70
+ const newHref = transformUrlBeforeRedirect(keycloakInstance.createRegisterUrl(options));
71
+ switch (getRedirectMethod()) {
72
+ case "location.replace":
73
+ window.location.replace(newHref);
74
+ break;
75
+ case "overwrite location.href":
76
+ window.location.href = newHref;
77
+ break;
78
+ }
66
79
 
67
80
  return neverResolvingPromise;
68
81
  },
82
+ "logout": options => {
83
+ window.location.replace(transformUrlBeforeRedirect(keycloakInstance.createLogoutUrl(options)));
84
+ return neverResolvingPromise;
85
+ },
69
86
  "accountManagement": () => {
70
- var accountUrl = transformUrlBeforeRedirect(keycloakInstance.createAccountUrl());
71
- if (typeof accountUrl !== "undefined") {
72
- window.location.href = accountUrl;
73
- } else {
87
+ const accountUrl = transformUrlBeforeRedirect(keycloakInstance.createAccountUrl());
88
+
89
+ if (accountUrl === "undefined") {
74
90
  throw new Error("Not supported by the OIDC server");
75
91
  }
92
+
93
+ switch (getRedirectMethod()) {
94
+ case "location.replace":
95
+ window.location.replace(accountUrl);
96
+ break;
97
+ case "overwrite location.href":
98
+ window.location.href = accountUrl;
99
+ break;
100
+ }
101
+
76
102
  return neverResolvingPromise;
77
103
  },
78
104
  "redirectUri": options => {