keycloakify 2.2.0 → 2.5.1

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 (177) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +156 -127
  3. package/bin/KeycloakVersion.js.map +1 -1
  4. package/bin/build-keycloak-theme/build-keycloak-theme.js +57 -54
  5. package/bin/build-keycloak-theme/build-keycloak-theme.js.map +1 -1
  6. package/bin/build-keycloak-theme/ftlValuesGlobalName.js.map +1 -1
  7. package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js +4 -11
  8. package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js.map +1 -1
  9. package/bin/build-keycloak-theme/generateFtl/common.ftl +72 -56
  10. package/bin/build-keycloak-theme/generateFtl/generateFtl.d.ts +1 -1
  11. package/bin/build-keycloak-theme/generateFtl/generateFtl.js +47 -44
  12. package/bin/build-keycloak-theme/generateFtl/generateFtl.js.map +1 -1
  13. package/bin/build-keycloak-theme/generateJavaStackFiles.js +12 -8
  14. package/bin/build-keycloak-theme/generateJavaStackFiles.js.map +1 -1
  15. package/bin/build-keycloak-theme/generateKeycloakThemeResources.js +20 -21
  16. package/bin/build-keycloak-theme/generateKeycloakThemeResources.js.map +1 -1
  17. package/bin/build-keycloak-theme/index.js.map +1 -1
  18. package/bin/build-keycloak-theme/replaceImportFromStatic.js +18 -30
  19. package/bin/build-keycloak-theme/replaceImportFromStatic.js.map +1 -1
  20. package/bin/download-builtin-keycloak-theme.js +2 -2
  21. package/bin/download-builtin-keycloak-theme.js.map +1 -1
  22. package/bin/generate-i18n-messages.js +9 -11
  23. package/bin/generate-i18n-messages.js.map +1 -1
  24. package/bin/link_in_test_app.js +6 -22
  25. package/bin/link_in_test_app.js.map +1 -1
  26. package/bin/tools/crawl.js.map +1 -1
  27. package/bin/tools/downloadAndUnzip.js +4 -5
  28. package/bin/tools/downloadAndUnzip.js.map +1 -1
  29. package/bin/tools/grant-exec-perms.js +4 -3
  30. package/bin/tools/grant-exec-perms.js.map +1 -1
  31. package/bin/tools/isInside.js.map +1 -1
  32. package/bin/tools/rm.js +1 -1
  33. package/bin/tools/rm.js.map +1 -1
  34. package/bin/tools/transformCodebase.js +7 -3
  35. package/bin/tools/transformCodebase.js.map +1 -1
  36. package/lib/components/Error.js +1 -2
  37. package/lib/components/Error.js.map +1 -1
  38. package/lib/components/Info.js +1 -15
  39. package/lib/components/Info.js.map +1 -1
  40. package/lib/components/KcApp.js +23 -10
  41. package/lib/components/KcApp.js.map +1 -1
  42. package/lib/components/KcProps.d.ts +4 -2
  43. package/lib/components/KcProps.js +10 -8
  44. package/lib/components/KcProps.js.map +1 -1
  45. package/lib/components/Login.js +20 -18
  46. package/lib/components/Login.js.map +1 -1
  47. package/lib/components/LoginIdpLinkConfirm.js.map +1 -1
  48. package/lib/components/LoginOtp.js +14 -15
  49. package/lib/components/LoginOtp.js.map +1 -1
  50. package/lib/components/LoginResetPassword.js +5 -7
  51. package/lib/components/LoginResetPassword.js.map +1 -1
  52. package/lib/components/LoginUpdateProfile.js +1 -5
  53. package/lib/components/LoginUpdateProfile.js.map +1 -1
  54. package/lib/components/LoginVerifyEmail.js.map +1 -1
  55. package/lib/components/Register.js +1 -4
  56. package/lib/components/Register.js.map +1 -1
  57. package/lib/components/RegisterUserProfile.d.ts +6 -0
  58. package/lib/components/RegisterUserProfile.js +78 -0
  59. package/lib/components/RegisterUserProfile.js.map +1 -0
  60. package/lib/components/Template.js +28 -43
  61. package/lib/components/Template.js.map +1 -1
  62. package/lib/components/Terms.js.map +1 -1
  63. package/lib/getKcContext/KcContextBase.d.ts +78 -18
  64. package/lib/getKcContext/KcContextBase.js +2 -3
  65. package/lib/getKcContext/KcContextBase.js.map +1 -1
  66. package/lib/getKcContext/getKcContext.d.ts +1 -3
  67. package/lib/getKcContext/getKcContext.js +5 -9
  68. package/lib/getKcContext/getKcContext.js.map +1 -1
  69. package/lib/getKcContext/kcContextMocks/kcContextMocks.d.ts +1 -0
  70. package/lib/getKcContext/kcContextMocks/kcContextMocks.js +187 -55
  71. package/lib/getKcContext/kcContextMocks/kcContextMocks.js.map +1 -1
  72. package/lib/getKcContext/kcContextMocks/urlResourcesPath.js.map +1 -1
  73. package/lib/i18n/KcLanguageTag.d.ts +25 -2
  74. package/lib/i18n/KcLanguageTag.js +27 -27
  75. package/lib/i18n/KcLanguageTag.js.map +1 -1
  76. package/lib/i18n/generated_kcMessages/11.0.3/account.js +27 -27
  77. package/lib/i18n/generated_kcMessages/11.0.3/account.js.map +1 -1
  78. package/lib/i18n/generated_kcMessages/11.0.3/admin.js +23 -23
  79. package/lib/i18n/generated_kcMessages/11.0.3/admin.js.map +1 -1
  80. package/lib/i18n/generated_kcMessages/11.0.3/email.js +97 -97
  81. package/lib/i18n/generated_kcMessages/11.0.3/email.js.map +1 -1
  82. package/lib/i18n/generated_kcMessages/11.0.3/login.js +30 -30
  83. package/lib/i18n/generated_kcMessages/11.0.3/login.js.map +1 -1
  84. package/lib/i18n/generated_kcMessages/15.0.2/account.js +29 -29
  85. package/lib/i18n/generated_kcMessages/15.0.2/account.js.map +1 -1
  86. package/lib/i18n/generated_kcMessages/15.0.2/admin.js +23 -23
  87. package/lib/i18n/generated_kcMessages/15.0.2/admin.js.map +1 -1
  88. package/lib/i18n/generated_kcMessages/15.0.2/email.js +111 -111
  89. package/lib/i18n/generated_kcMessages/15.0.2/email.js.map +1 -1
  90. package/lib/i18n/generated_kcMessages/15.0.2/login.js +32 -32
  91. package/lib/i18n/generated_kcMessages/15.0.2/login.js.map +1 -1
  92. package/lib/i18n/kcMessages/login.js +1 -1
  93. package/lib/i18n/kcMessages/login.js.map +1 -1
  94. package/lib/i18n/useKcLanguageTag.js +1 -3
  95. package/lib/i18n/useKcLanguageTag.js.map +1 -1
  96. package/lib/i18n/useKcMessage.d.ts +4 -2
  97. package/lib/i18n/useKcMessage.js +12 -3
  98. package/lib/i18n/useKcMessage.js.map +1 -1
  99. package/lib/keycloakJsAdapter.d.ts +6 -6
  100. package/lib/keycloakJsAdapter.js +10 -12
  101. package/lib/keycloakJsAdapter.js.map +1 -1
  102. package/lib/tools/ReactComponent.d.ts +2 -0
  103. package/lib/tools/ReactComponent.js +3 -0
  104. package/lib/tools/ReactComponent.js.map +1 -0
  105. package/lib/tools/allPropertiesValuesToUndefined.js +1 -2
  106. package/lib/tools/allPropertiesValuesToUndefined.js.map +1 -1
  107. package/lib/tools/appendHead.js +16 -12
  108. package/lib/tools/appendHead.js.map +1 -1
  109. package/lib/tools/assert.js.map +1 -1
  110. package/lib/tools/deepAssign.js +3 -4
  111. package/lib/tools/deepAssign.js.map +1 -1
  112. package/lib/tools/deepClone.js.map +1 -1
  113. package/package.json +25 -5
  114. package/src/bin/KeycloakVersion.ts +0 -2
  115. package/src/bin/build-keycloak-theme/build-keycloak-theme.ts +70 -77
  116. package/src/bin/build-keycloak-theme/ftlValuesGlobalName.ts +1 -2
  117. package/src/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.ts +26 -37
  118. package/src/bin/build-keycloak-theme/generateDebugFiles/index.ts +1 -1
  119. package/src/bin/build-keycloak-theme/generateFtl/common.ftl +72 -56
  120. package/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +75 -95
  121. package/src/bin/build-keycloak-theme/generateFtl/index.ts +1 -1
  122. package/src/bin/build-keycloak-theme/generateJavaStackFiles.ts +38 -56
  123. package/src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts +47 -85
  124. package/src/bin/build-keycloak-theme/index.ts +2 -4
  125. package/src/bin/build-keycloak-theme/replaceImportFromStatic.ts +34 -78
  126. package/src/bin/download-builtin-keycloak-theme.ts +5 -19
  127. package/src/bin/generate-i18n-messages.ts +13 -25
  128. package/src/bin/link_in_test_app.ts +9 -38
  129. package/src/bin/tools/crawl.ts +2 -12
  130. package/src/bin/tools/downloadAndUnzip.ts +6 -22
  131. package/src/bin/tools/getProjectRoot.ts +1 -1
  132. package/src/bin/tools/grant-exec-perms.ts +8 -7
  133. package/src/bin/tools/isInside.ts +2 -9
  134. package/src/bin/tools/rm.ts +21 -32
  135. package/src/bin/tools/transformCodebase.ts +20 -43
  136. package/src/lib/components/Error.tsx +3 -7
  137. package/src/lib/components/Info.tsx +23 -47
  138. package/src/lib/components/KcApp.tsx +25 -13
  139. package/src/lib/components/KcProps.ts +94 -92
  140. package/src/lib/components/Login.tsx +126 -116
  141. package/src/lib/components/LoginIdpLinkConfirm.tsx +38 -53
  142. package/src/lib/components/LoginOtp.tsx +39 -76
  143. package/src/lib/components/LoginResetPassword.tsx +9 -26
  144. package/src/lib/components/LoginUpdateProfile.tsx +104 -117
  145. package/src/lib/components/LoginVerifyEmail.tsx +3 -12
  146. package/src/lib/components/Register.tsx +76 -46
  147. package/src/lib/components/RegisterUserProfile.tsx +201 -0
  148. package/src/lib/components/Template.tsx +109 -161
  149. package/src/lib/components/Terms.tsx +4 -13
  150. package/src/lib/getKcContext/KcContextBase.ts +104 -53
  151. package/src/lib/getKcContext/getKcContext.ts +47 -78
  152. package/src/lib/getKcContext/index.ts +2 -2
  153. package/src/lib/getKcContext/kcContextMocks/index.ts +1 -1
  154. package/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts +362 -241
  155. package/src/lib/getKcContext/kcContextMocks/urlResourcesPath.ts +1 -2
  156. package/src/lib/i18n/KcLanguageTag.ts +34 -45
  157. package/src/lib/i18n/generated_kcMessages/11.0.3/account.ts +3086 -3059
  158. package/src/lib/i18n/generated_kcMessages/11.0.3/admin.ts +248 -239
  159. package/src/lib/i18n/generated_kcMessages/11.0.3/email.ts +848 -633
  160. package/src/lib/i18n/generated_kcMessages/11.0.3/login.ts +4466 -4359
  161. package/src/lib/i18n/generated_kcMessages/15.0.2/account.ts +4247 -4202
  162. package/src/lib/i18n/generated_kcMessages/15.0.2/admin.ts +273 -264
  163. package/src/lib/i18n/generated_kcMessages/15.0.2/email.ts +997 -749
  164. package/src/lib/i18n/generated_kcMessages/15.0.2/login.ts +5352 -5212
  165. package/src/lib/i18n/kcMessages/login.ts +4 -9
  166. package/src/lib/i18n/useKcLanguageTag.ts +2 -16
  167. package/src/lib/i18n/useKcMessage.tsx +26 -15
  168. package/src/lib/index.ts +0 -1
  169. package/src/lib/keycloakJsAdapter.ts +23 -53
  170. package/src/lib/tools/AndByDiscriminatingKey.ts +16 -30
  171. package/src/lib/tools/DeepPartial.ts +1 -2
  172. package/src/lib/tools/ReactComponent.ts +4 -0
  173. package/src/lib/tools/allPropertiesValuesToUndefined.ts +1 -6
  174. package/src/lib/tools/appendHead.ts +28 -25
  175. package/src/lib/tools/assert.ts +1 -2
  176. package/src/lib/tools/deepAssign.ts +28 -46
  177. package/src/lib/tools/deepClone.ts +2 -3
@@ -1,4 +1,3 @@
1
-
2
1
  import { useState, memo } from "react";
3
2
  import { Template } from "./Template";
4
3
  import type { KcProps } from "./KcProps";
@@ -7,13 +6,8 @@ import { useKcMessage } from "../i18n/useKcMessage";
7
6
  import { useCssAndCx } from "tss-react";
8
7
  import { useConstCallback } from "powerhooks/useConstCallback";
9
8
 
10
- export const Login = memo(({ kcContext, ...props }: { kcContext: KcContextBase.Login; } & KcProps) => {
11
-
12
- const {
13
- social, realm, url,
14
- usernameEditDisabled, login,
15
- auth, registrationDisabled
16
- } = kcContext;
9
+ export const Login = memo(({ kcContext, ...props }: { kcContext: KcContextBase.Login } & KcProps) => {
10
+ const { social, realm, url, usernameEditDisabled, login, auth, registrationDisabled } = kcContext;
17
11
 
18
12
  const { msg, msgStr } = useKcMessage();
19
13
 
@@ -21,9 +15,7 @@ export const Login = memo(({ kcContext, ...props }: { kcContext: KcContextBase.L
21
15
 
22
16
  const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
23
17
 
24
- const onSubmit = useConstCallback(() =>
25
- (setIsLoginButtonDisabled(true), true)
26
- );
18
+ const onSubmit = useConstCallback(() => (setIsLoginButtonDisabled(true), true));
27
19
 
28
20
  return (
29
21
  <Template
@@ -33,125 +25,143 @@ export const Login = memo(({ kcContext, ...props }: { kcContext: KcContextBase.L
33
25
  displayWide={realm.password && social.providers !== undefined}
34
26
  headerNode={msg("doLogIn")}
35
27
  formNode={
36
- <div
37
- id="kc-form"
38
- className={cx(realm.password && social.providers !== undefined && props.kcContentWrapperClass)}
39
- >
28
+ <div id="kc-form" className={cx(realm.password && social.providers !== undefined && props.kcContentWrapperClass)}>
40
29
  <div
41
30
  id="kc-form-wrapper"
42
31
  className={cx(realm.password && social.providers && [props.kcFormSocialAccountContentClass, props.kcFormSocialAccountClass])}
43
32
  >
44
- {
45
- realm.password &&
46
- (
47
- <form id="kc-form-login" onSubmit={onSubmit} action={url.loginAction} method="post">
48
- <div className={cx(props.kcFormGroupClass)}>
49
- <label htmlFor="username" className={cx(props.kcLabelClass)}>
50
- {
51
- !realm.loginWithEmailAllowed ?
52
- msg("username")
53
- :
54
- (
55
- !realm.registrationEmailAsUsername ?
56
- msg("usernameOrEmail") :
57
- msg("email")
58
- )
59
- }
60
- </label>
61
- <input
62
- tabIndex={1}
63
- id="username"
64
- className={cx(props.kcInputClass)}
65
- name="username"
66
- defaultValue={login.username ?? ''}
67
- type="text"
68
- {...(usernameEditDisabled ? { "disabled": true } : { "autoFocus": true, "autoComplete": "off" })}
69
- />
70
- </div>
71
- <div className={cx(props.kcFormGroupClass)}>
72
- <label htmlFor="password" className={cx(props.kcLabelClass)}>
73
- {msg("password")}
74
- </label>
75
- <input tabIndex={2} id="password" className={cx(props.kcInputClass)} name="password" type="password" autoComplete="off" />
76
- </div>
77
- <div className={cx(props.kcFormGroupClass, props.kcFormSettingClass)}>
78
- <div id="kc-form-options">
79
- {
80
- (
81
- realm.rememberMe &&
82
- !usernameEditDisabled
83
- ) &&
84
- <div className="checkbox">
85
- <label>
86
- <input tabIndex={3} id="rememberMe" name="rememberMe" type="checkbox" {...(login.rememberMe ? { "checked": true } : {})} />
87
- {msg("rememberMe")}
88
- </label>
89
- </div>
90
- }
91
- </div>
92
- <div className={cx(props.kcFormOptionsWrapperClass)}>
93
- {
94
- realm.resetPasswordAllowed &&
95
- <span>
96
- <a tabIndex={5} href={url.loginResetCredentialsUrl}>{msg("doForgotPassword")}</a>
97
- </span>
98
- }
99
- </div>
100
-
33
+ {realm.password && (
34
+ <form id="kc-form-login" onSubmit={onSubmit} action={url.loginAction} method="post">
35
+ <div className={cx(props.kcFormGroupClass)}>
36
+ <label htmlFor="username" className={cx(props.kcLabelClass)}>
37
+ {!realm.loginWithEmailAllowed
38
+ ? msg("username")
39
+ : !realm.registrationEmailAsUsername
40
+ ? msg("usernameOrEmail")
41
+ : msg("email")}
42
+ </label>
43
+ <input
44
+ tabIndex={1}
45
+ id="username"
46
+ className={cx(props.kcInputClass)}
47
+ name="username"
48
+ defaultValue={login.username ?? ""}
49
+ type="text"
50
+ {...(usernameEditDisabled
51
+ ? { "disabled": true }
52
+ : {
53
+ "autoFocus": true,
54
+ "autoComplete": "off",
55
+ })}
56
+ />
57
+ </div>
58
+ <div className={cx(props.kcFormGroupClass)}>
59
+ <label htmlFor="password" className={cx(props.kcLabelClass)}>
60
+ {msg("password")}
61
+ </label>
62
+ <input
63
+ tabIndex={2}
64
+ id="password"
65
+ className={cx(props.kcInputClass)}
66
+ name="password"
67
+ type="password"
68
+ autoComplete="off"
69
+ />
70
+ </div>
71
+ <div className={cx(props.kcFormGroupClass, props.kcFormSettingClass)}>
72
+ <div id="kc-form-options">
73
+ {realm.rememberMe && !usernameEditDisabled && (
74
+ <div className="checkbox">
75
+ <label>
76
+ <input
77
+ tabIndex={3}
78
+ id="rememberMe"
79
+ name="rememberMe"
80
+ type="checkbox"
81
+ {...(login.rememberMe
82
+ ? {
83
+ "checked": true,
84
+ }
85
+ : {})}
86
+ />
87
+ {msg("rememberMe")}
88
+ </label>
89
+ </div>
90
+ )}
101
91
  </div>
102
- <div id="kc-form-buttons" className={cx(props.kcFormGroupClass)}>
103
- <input
104
- type="hidden"
105
- id="id-hidden-input"
106
- name="credentialId"
107
- {...(auth?.selectedCredential !== undefined ? { "value": auth.selectedCredential } : {})}
108
- />
109
- <input
110
- tabIndex={4}
111
- className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)} name="login" id="kc-login" type="submit"
112
- value={msgStr("doLogIn")}
113
- disabled={isLoginButtonDisabled}
114
- />
92
+ <div className={cx(props.kcFormOptionsWrapperClass)}>
93
+ {realm.resetPasswordAllowed && (
94
+ <span>
95
+ <a tabIndex={5} href={url.loginResetCredentialsUrl}>
96
+ {msg("doForgotPassword")}
97
+ </a>
98
+ </span>
99
+ )}
115
100
  </div>
116
- </form>
117
- )
118
- }
101
+ </div>
102
+ <div id="kc-form-buttons" className={cx(props.kcFormGroupClass)}>
103
+ <input
104
+ type="hidden"
105
+ id="id-hidden-input"
106
+ name="credentialId"
107
+ {...(auth?.selectedCredential !== undefined
108
+ ? {
109
+ "value": auth.selectedCredential,
110
+ }
111
+ : {})}
112
+ />
113
+ <input
114
+ tabIndex={4}
115
+ className={cx(
116
+ props.kcButtonClass,
117
+ props.kcButtonPrimaryClass,
118
+ props.kcButtonBlockClass,
119
+ props.kcButtonLargeClass,
120
+ )}
121
+ name="login"
122
+ id="kc-login"
123
+ type="submit"
124
+ value={msgStr("doLogIn")}
125
+ disabled={isLoginButtonDisabled}
126
+ />
127
+ </div>
128
+ </form>
129
+ )}
119
130
  </div>
120
- {
121
- (realm.password && social.providers !== undefined) &&
131
+ {realm.password && social.providers !== undefined && (
122
132
  <div id="kc-social-providers" className={cx(props.kcFormSocialAccountContentClass, props.kcFormSocialAccountClass)}>
123
- <ul className={cx(props.kcFormSocialAccountListClass, social.providers.length > 4 && props.kcFormSocialAccountDoubleListClass)}>
124
- {
125
- social.providers.map(p =>
126
- <li key={p.providerId} className={cx(props.kcFormSocialAccountListLinkClass)}>
127
- <a href={p.loginUrl} id={`zocial-${p.alias}`} className={cx("zocial", p.providerId)}>
128
- <span>{p.displayName}</span>
129
- </a>
130
- </li>
131
- )
132
- }
133
+ <ul
134
+ className={cx(
135
+ props.kcFormSocialAccountListClass,
136
+ social.providers.length > 4 && props.kcFormSocialAccountDoubleListClass,
137
+ )}
138
+ >
139
+ {social.providers.map(p => (
140
+ <li key={p.providerId} className={cx(props.kcFormSocialAccountListLinkClass)}>
141
+ <a href={p.loginUrl} id={`zocial-${p.alias}`} className={cx("zocial", p.providerId)}>
142
+ <span>{p.displayName}</span>
143
+ </a>
144
+ </li>
145
+ ))}
133
146
  </ul>
134
147
  </div>
135
- }
148
+ )}
136
149
  </div>
137
150
  }
138
151
  infoNode={
139
- (
140
- realm.password &&
141
- realm.registrationAllowed &&
142
- !registrationDisabled
143
- ) &&
144
- <div id="kc-registration">
145
- <span>
146
- {msg("noAccount")}
147
- <a tabIndex={6} href={url.registrationUrl}>
148
- {msg("doRegister")}
149
- </a>
150
- </span>
151
- </div>
152
+ realm.password &&
153
+ realm.registrationAllowed &&
154
+ !registrationDisabled && (
155
+ <div id="kc-registration">
156
+ <span>
157
+ {msg("noAccount")}
158
+ <a tabIndex={6} href={url.registrationUrl}>
159
+ {msg("doRegister")}
160
+ </a>
161
+ </span>
162
+ </div>
163
+ )
152
164
  }
153
165
  />
154
166
  );
155
167
  });
156
-
157
-
@@ -1,4 +1,3 @@
1
-
2
1
  import { memo } from "react";
3
2
  import { Template } from "./Template";
4
3
  import type { KcProps } from "./KcProps";
@@ -6,56 +5,42 @@ import type { KcContextBase } from "../getKcContext/KcContextBase";
6
5
  import { useKcMessage } from "../i18n/useKcMessage";
7
6
  import { useCssAndCx } from "tss-react";
8
7
 
9
- export const LoginIdpLinkConfirm = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginIdpLinkConfirm; } & KcProps) => {
10
-
11
- const { url, idpAlias } = kcContext;
12
-
13
- const { msg } = useKcMessage();
14
-
15
- const { cx } = useCssAndCx();
16
-
17
- return (
18
- <Template
19
- {...{ kcContext, ...props }}
20
- doFetchDefaultThemeResources={true}
21
- headerNode={msg("confirmLinkIdpTitle")}
22
- formNode={
23
- <form id="kc-register-form" action={url.loginAction} method="post">
24
- <div className={cx(props.kcFormGroupClass)}>
25
- <button
26
- type="submit"
27
- className={cx(
28
- props.kcButtonClass,
29
- props.kcButtonDefaultClass,
30
- props.kcButtonBlockClass,
31
- props.kcButtonLargeClass
32
- )}
33
- name="submitAction"
34
- id="updateProfile"
35
- value="updateProfile"
36
- >
37
- {msg("confirmLinkIdpReviewProfile")}
38
- </button>
39
- <button
40
- type="submit"
41
- className={cx(
42
- props.kcButtonClass,
43
- props.kcButtonDefaultClass,
44
- props.kcButtonBlockClass,
45
- props.kcButtonLargeClass
46
- )}
47
- name="submitAction"
48
- id="linkAccount"
49
- value="linkAccount"
50
- >
51
- {msg("confirmLinkIdpContinue", idpAlias)}
52
- </button>
53
- </div>
54
- </form>
55
- }
56
- />
57
- );
58
-
8
+ export const LoginIdpLinkConfirm = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginIdpLinkConfirm } & KcProps) => {
9
+ const { url, idpAlias } = kcContext;
10
+
11
+ const { msg } = useKcMessage();
12
+
13
+ const { cx } = useCssAndCx();
14
+
15
+ return (
16
+ <Template
17
+ {...{ kcContext, ...props }}
18
+ doFetchDefaultThemeResources={true}
19
+ headerNode={msg("confirmLinkIdpTitle")}
20
+ formNode={
21
+ <form id="kc-register-form" action={url.loginAction} method="post">
22
+ <div className={cx(props.kcFormGroupClass)}>
23
+ <button
24
+ type="submit"
25
+ className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
26
+ name="submitAction"
27
+ id="updateProfile"
28
+ value="updateProfile"
29
+ >
30
+ {msg("confirmLinkIdpReviewProfile")}
31
+ </button>
32
+ <button
33
+ type="submit"
34
+ className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
35
+ name="submitAction"
36
+ id="linkAccount"
37
+ value="linkAccount"
38
+ >
39
+ {msg("confirmLinkIdpContinue", idpAlias)}
40
+ </button>
41
+ </div>
42
+ </form>
43
+ }
44
+ />
45
+ );
59
46
  });
60
-
61
-
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  import { useEffect, memo } from "react";
4
2
  import { Template } from "./Template";
5
3
  import type { KcProps } from "./KcProps";
@@ -9,38 +7,29 @@ import { appendHead } from "../tools/appendHead";
9
7
  import { join as pathJoin } from "path";
10
8
  import { useCssAndCx } from "tss-react";
11
9
 
12
- export const LoginOtp = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginOtp; } & KcProps) => {
13
-
10
+ export const LoginOtp = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginOtp } & KcProps) => {
14
11
  const { otpLogin, url } = kcContext;
15
12
 
16
13
  const { cx } = useCssAndCx();
17
14
 
18
15
  const { msg, msgStr } = useKcMessage();
19
16
 
20
- useEffect(
21
- () => {
22
-
23
- let isCleanedUp = false;
24
-
25
- appendHead({
26
- "type": "javascript",
27
- "src": pathJoin(
28
- kcContext.url.resourcesCommonPath,
29
- "node_modules/jquery/dist/jquery.min.js"
30
- )
31
- }).then(() => {
17
+ useEffect(() => {
18
+ let isCleanedUp = false;
32
19
 
33
- if (isCleanedUp) return;
20
+ appendHead({
21
+ "type": "javascript",
22
+ "src": pathJoin(kcContext.url.resourcesCommonPath, "node_modules/jquery/dist/jquery.min.js"),
23
+ }).then(() => {
24
+ if (isCleanedUp) return;
34
25
 
35
- evaluateInlineScript();
36
-
37
- });
38
-
39
- return () => { isCleanedUp = true };
26
+ evaluateInlineScript();
27
+ });
40
28
 
41
- },
42
- []
43
- );
29
+ return () => {
30
+ isCleanedUp = true;
31
+ };
32
+ }, []);
44
33
 
45
34
  return (
46
35
  <Template
@@ -48,33 +37,22 @@ export const LoginOtp = memo(({ kcContext, ...props }: { kcContext: KcContextBas
48
37
  doFetchDefaultThemeResources={true}
49
38
  headerNode={msg("doLogIn")}
50
39
  formNode={
51
-
52
- <form
53
- id="kc-otp-login-form"
54
- className={cx(props.kcFormClass)}
55
- action={url.loginAction}
56
- method="post"
57
- >
58
- {
59
- otpLogin.userOtpCredentials.length > 1 &&
40
+ <form id="kc-otp-login-form" className={cx(props.kcFormClass)} action={url.loginAction} method="post">
41
+ {otpLogin.userOtpCredentials.length > 1 && (
60
42
  <div className={cx(props.kcFormGroupClass)}>
61
43
  <div className={cx(props.kcInputWrapperClass)}>
62
- {
63
- otpLogin.userOtpCredentials.map(otpCredential =>
64
- <div key={otpCredential.id} className={cx(props.kcSelectOTPListClass)}>
65
- <input type="hidden" value="${otpCredential.id}" />
66
- <div className={cx(props.kcSelectOTPListItemClass)}>
67
- <span className={cx(props.kcAuthenticatorOtpCircleClass)} />
68
- <h2 className={cx(props.kcSelectOTPItemHeadingClass)}>
69
- {otpCredential.userLabel}
70
- </h2>
71
- </div>
44
+ {otpLogin.userOtpCredentials.map(otpCredential => (
45
+ <div key={otpCredential.id} className={cx(props.kcSelectOTPListClass)}>
46
+ <input type="hidden" value="${otpCredential.id}" />
47
+ <div className={cx(props.kcSelectOTPListItemClass)}>
48
+ <span className={cx(props.kcAuthenticatorOtpCircleClass)} />
49
+ <h2 className={cx(props.kcSelectOTPItemHeadingClass)}>{otpCredential.userLabel}</h2>
72
50
  </div>
73
- )
74
- }
51
+ </div>
52
+ ))}
75
53
  </div>
76
54
  </div>
77
- }
55
+ )}
78
56
  <div className={cx(props.kcFormGroupClass)}>
79
57
  <div className={cx(props.kcLabelWrapperClass)}>
80
58
  <label htmlFor="otp" className={cx(props.kcLabelClass)}>
@@ -83,14 +61,7 @@ export const LoginOtp = memo(({ kcContext, ...props }: { kcContext: KcContextBas
83
61
  </div>
84
62
 
85
63
  <div className={cx(props.kcInputWrapperClass)}>
86
- <input
87
- id="otp"
88
- name="otp"
89
- autoComplete="off"
90
- type="text"
91
- className={cx(props.kcInputClass)}
92
- autoFocus
93
- />
64
+ <input id="otp" name="otp" autoComplete="off" type="text" className={cx(props.kcInputClass)} autoFocus />
94
65
  </div>
95
66
  </div>
96
67
 
@@ -101,12 +72,7 @@ export const LoginOtp = memo(({ kcContext, ...props }: { kcContext: KcContextBas
101
72
 
102
73
  <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
103
74
  <input
104
- className={cx(
105
- props.kcButtonClass,
106
- props.kcButtonPrimaryClass,
107
- props.kcButtonBlockClass,
108
- props.kcButtonLargeClass
109
- )}
75
+ className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
110
76
  name="login"
111
77
  id="kc-login"
112
78
  type="submit"
@@ -114,35 +80,32 @@ export const LoginOtp = memo(({ kcContext, ...props }: { kcContext: KcContextBas
114
80
  />
115
81
  </div>
116
82
  </div>
117
- </form >
118
-
83
+ </form>
119
84
  }
120
85
  />
121
86
  );
122
87
  });
123
88
 
124
-
125
-
126
-
127
89
  declare const $: any;
128
90
 
129
91
  function evaluateInlineScript() {
130
-
131
92
  $(document).ready(function () {
132
93
  // Card Single Select
133
- $('.card-pf-view-single-select').click(function (this: any) {
134
- if ($(this).hasClass('active')) { $(this).removeClass('active'); $(this).children().removeAttr('name'); }
135
- else {
136
- $('.card-pf-view-single-select').removeClass('active');
137
- $('.card-pf-view-single-select').children().removeAttr('name');
138
- $(this).addClass('active'); $(this).children().attr('name', 'selectedCredentialId');
94
+ $(".card-pf-view-single-select").click(function (this: any) {
95
+ if ($(this).hasClass("active")) {
96
+ $(this).removeClass("active");
97
+ $(this).children().removeAttr("name");
98
+ } else {
99
+ $(".card-pf-view-single-select").removeClass("active");
100
+ $(".card-pf-view-single-select").children().removeAttr("name");
101
+ $(this).addClass("active");
102
+ $(this).children().attr("name", "selectedCredentialId");
139
103
  }
140
104
  });
141
105
 
142
- var defaultCred = $('.card-pf-view-single-select')[0];
106
+ var defaultCred = $(".card-pf-view-single-select")[0];
143
107
  if (defaultCred) {
144
108
  defaultCred.click();
145
109
  }
146
110
  });
147
-
148
- }
111
+ }
@@ -1,4 +1,3 @@
1
-
2
1
  import { memo } from "react";
3
2
  import { Template } from "./Template";
4
3
  import type { KcProps } from "./KcProps";
@@ -6,13 +5,8 @@ import type { KcContextBase } from "../getKcContext/KcContextBase";
6
5
  import { useKcMessage } from "../i18n/useKcMessage";
7
6
  import { useCssAndCx } from "tss-react";
8
7
 
9
- export const LoginResetPassword = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginResetPassword; } & KcProps) => {
10
-
11
- const {
12
- url,
13
- realm,
14
- auth
15
- } = kcContext;
8
+ export const LoginResetPassword = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginResetPassword } & KcProps) => {
9
+ const { url, realm, auth } = kcContext;
16
10
 
17
11
  const { msg, msgStr } = useKcMessage();
18
12
 
@@ -29,14 +23,11 @@ export const LoginResetPassword = memo(({ kcContext, ...props }: { kcContext: Kc
29
23
  <div className={cx(props.kcFormGroupClass)}>
30
24
  <div className={cx(props.kcLabelWrapperClass)}>
31
25
  <label htmlFor="username" className={cx(props.kcLabelClass)}>
32
- {
33
- !realm.loginWithEmailAllowed ?
34
- msg("username")
35
- :
36
- !realm.registrationEmailAsUsername ?
37
- msg("usernameOrEmail") :
38
- msg("email")
39
- }
26
+ {!realm.loginWithEmailAllowed
27
+ ? msg("username")
28
+ : !realm.registrationEmailAsUsername
29
+ ? msg("usernameOrEmail")
30
+ : msg("email")}
40
31
  </label>
41
32
  </div>
42
33
  <div className={cx(props.kcInputWrapperClass)}>
@@ -46,10 +37,7 @@ export const LoginResetPassword = memo(({ kcContext, ...props }: { kcContext: Kc
46
37
  name="username"
47
38
  className={cx(props.kcInputClass)}
48
39
  autoFocus
49
- defaultValue={
50
- auth !== undefined && auth.showUsername ?
51
- auth.attemptedUsername : undefined
52
- }
40
+ defaultValue={auth !== undefined && auth.showUsername ? auth.attemptedUsername : undefined}
53
41
  />
54
42
  </div>
55
43
  </div>
@@ -64,10 +52,7 @@ export const LoginResetPassword = memo(({ kcContext, ...props }: { kcContext: Kc
64
52
 
65
53
  <div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
66
54
  <input
67
- className={cx(
68
- props.kcButtonClass, props.kcButtonPrimaryClass,
69
- props.kcButtonBlockClass, props.kcButtonLargeClass
70
- )}
55
+ className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
71
56
  type="submit"
72
57
  value={msgStr("doSubmit")}
73
58
  />
@@ -79,5 +64,3 @@ export const LoginResetPassword = memo(({ kcContext, ...props }: { kcContext: Kc
79
64
  />
80
65
  );
81
66
  });
82
-
83
-