keycloakify 7.0.0-rc.6 → 7.0.0-rc.7

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 (76) hide show
  1. package/bin/eject-keycloak-page.js +1 -1
  2. package/bin/eject-keycloak-page.js.map +1 -1
  3. package/bin/initialize-email-theme.js +6 -2
  4. package/bin/initialize-email-theme.js.map +1 -1
  5. package/login/Template.js +2 -2
  6. package/login/Template.js.map +1 -1
  7. package/login/TemplateProps.d.ts +1 -1
  8. package/login/TemplateProps.js.map +1 -1
  9. package/login/pages/Error.js +1 -1
  10. package/login/pages/Error.js.map +1 -1
  11. package/login/pages/IdpReviewUserProfile.js +1 -1
  12. package/login/pages/IdpReviewUserProfile.js.map +1 -1
  13. package/login/pages/Info.js +2 -2
  14. package/login/pages/Info.js.map +1 -1
  15. package/login/pages/Login.js +4 -4
  16. package/login/pages/Login.js.map +1 -1
  17. package/login/pages/LoginConfigTotp.js +1 -1
  18. package/login/pages/LoginConfigTotp.js.map +1 -1
  19. package/login/pages/LoginIdpLinkConfirm.js +1 -1
  20. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  21. package/login/pages/LoginIdpLinkEmail.js +2 -2
  22. package/login/pages/LoginIdpLinkEmail.js.map +1 -1
  23. package/login/pages/LoginOtp.js +1 -1
  24. package/login/pages/LoginOtp.js.map +1 -1
  25. package/login/pages/LoginPageExpired.js +2 -2
  26. package/login/pages/LoginPageExpired.js.map +1 -1
  27. package/login/pages/LoginPassword.js +1 -1
  28. package/login/pages/LoginPassword.js.map +1 -1
  29. package/login/pages/LoginResetPassword.js +2 -2
  30. package/login/pages/LoginResetPassword.js.map +1 -1
  31. package/login/pages/LoginUpdatePassword.js +1 -1
  32. package/login/pages/LoginUpdatePassword.js.map +1 -1
  33. package/login/pages/LoginUpdateProfile.js +1 -1
  34. package/login/pages/LoginUpdateProfile.js.map +1 -1
  35. package/login/pages/LoginUsername.js +4 -4
  36. package/login/pages/LoginUsername.js.map +1 -1
  37. package/login/pages/LoginVerifyEmail.js +2 -2
  38. package/login/pages/LoginVerifyEmail.js.map +1 -1
  39. package/login/pages/LogoutConfirm.js +2 -2
  40. package/login/pages/LogoutConfirm.js.map +1 -1
  41. package/login/pages/Register.js +1 -1
  42. package/login/pages/Register.js.map +1 -1
  43. package/login/pages/RegisterUserProfile.js +1 -1
  44. package/login/pages/RegisterUserProfile.js.map +1 -1
  45. package/login/pages/Terms.js +2 -2
  46. package/login/pages/Terms.js.map +1 -1
  47. package/login/pages/UpdateUserProfile.js +1 -1
  48. package/login/pages/UpdateUserProfile.js.map +1 -1
  49. package/login/pages/WebauthnAuthenticate.js +1 -1
  50. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  51. package/package.json +1 -1
  52. package/src/bin/eject-keycloak-page.ts +1 -1
  53. package/src/bin/initialize-email-theme.ts +9 -1
  54. package/src/login/Template.tsx +3 -3
  55. package/src/login/TemplateProps.ts +2 -1
  56. package/src/login/pages/Error.tsx +12 -17
  57. package/src/login/pages/IdpReviewUserProfile.tsx +27 -31
  58. package/src/login/pages/Info.tsx +22 -23
  59. package/src/login/pages/Login.tsx +143 -144
  60. package/src/login/pages/LoginConfigTotp.tsx +135 -143
  61. package/src/login/pages/LoginIdpLinkConfirm.tsx +34 -38
  62. package/src/login/pages/LoginIdpLinkEmail.tsx +11 -17
  63. package/src/login/pages/LoginOtp.tsx +44 -48
  64. package/src/login/pages/LoginPageExpired.tsx +14 -21
  65. package/src/login/pages/LoginPassword.tsx +50 -54
  66. package/src/login/pages/LoginResetPassword.tsx +44 -45
  67. package/src/login/pages/LoginUpdatePassword.tsx +96 -100
  68. package/src/login/pages/LoginUpdateProfile.tsx +100 -107
  69. package/src/login/pages/LoginUsername.tsx +108 -109
  70. package/src/login/pages/LoginVerifyEmail.tsx +10 -17
  71. package/src/login/pages/LogoutConfirm.tsx +33 -40
  72. package/src/login/pages/Register.tsx +120 -127
  73. package/src/login/pages/RegisterUserProfile.tsx +36 -37
  74. package/src/login/pages/Terms.tsx +26 -33
  75. package/src/login/pages/UpdateUserProfile.tsx +46 -50
  76. package/src/login/pages/WebauthnAuthenticate.tsx +87 -96
@@ -17,32 +17,31 @@ export default function Info(props: PageProps<Extract<KcContext, { pageId: "info
17
17
  {...{ kcContext, i18n, doUseDefaultCss, classes }}
18
18
  displayMessage={false}
19
19
  headerNode={messageHeader !== undefined ? <>{messageHeader}</> : <>{message.summary}</>}
20
- formNode={
21
- <div id="kc-info-message">
22
- <p className="instruction">
23
- {message.summary}
20
+ >
21
+ <div id="kc-info-message">
22
+ <p className="instruction">
23
+ {message.summary}
24
24
 
25
- {requiredActions !== undefined && (
26
- <b>{requiredActions.map(requiredAction => msgStr(`requiredAction.${requiredAction}` as const)).join(",")}</b>
27
- )}
25
+ {requiredActions !== undefined && (
26
+ <b>{requiredActions.map(requiredAction => msgStr(`requiredAction.${requiredAction}` as const)).join(",")}</b>
27
+ )}
28
+ </p>
29
+ {!skipLink && pageRedirectUri !== undefined ? (
30
+ <p>
31
+ <a href={pageRedirectUri}>{msg("backToApplication")}</a>
28
32
  </p>
29
- {!skipLink && pageRedirectUri !== undefined ? (
30
- <p>
31
- <a href={pageRedirectUri}>{msg("backToApplication")}</a>
32
- </p>
33
- ) : actionUri !== undefined ? (
33
+ ) : actionUri !== undefined ? (
34
+ <p>
35
+ <a href={actionUri}>{msg("proceedWithAction")}</a>
36
+ </p>
37
+ ) : (
38
+ client.baseUrl !== undefined && (
34
39
  <p>
35
- <a href={actionUri}>{msg("proceedWithAction")}</a>
40
+ <a href={client.baseUrl}>{msg("backToApplication")}</a>
36
41
  </p>
37
- ) : (
38
- client.baseUrl !== undefined && (
39
- <p>
40
- <a href={client.baseUrl}>{msg("backToApplication")}</a>
41
- </p>
42
- )
43
- )}
44
- </div>
45
- }
46
- />
42
+ )
43
+ )}
44
+ </div>
45
+ </Template>
47
46
  );
48
47
  }
@@ -40,149 +40,6 @@ export default function Login(props: PageProps<Extract<KcContext, { pageId: "log
40
40
  displayInfo={social.displayInfo}
41
41
  displayWide={realm.password && social.providers !== undefined}
42
42
  headerNode={msg("doLogIn")}
43
- formNode={
44
- <div id="kc-form" className={clsx(realm.password && social.providers !== undefined && getClassName("kcContentWrapperClass"))}>
45
- <div
46
- id="kc-form-wrapper"
47
- className={clsx(
48
- realm.password &&
49
- social.providers && [getClassName("kcFormSocialAccountContentClass"), getClassName("kcFormSocialAccountClass")]
50
- )}
51
- >
52
- {realm.password && (
53
- <form id="kc-form-login" onSubmit={onSubmit} action={url.loginAction} method="post">
54
- <div className={getClassName("kcFormGroupClass")}>
55
- {(() => {
56
- const label = !realm.loginWithEmailAllowed
57
- ? "username"
58
- : realm.registrationEmailAsUsername
59
- ? "email"
60
- : "usernameOrEmail";
61
-
62
- const autoCompleteHelper: typeof label = label === "usernameOrEmail" ? "username" : label;
63
-
64
- return (
65
- <>
66
- <label htmlFor={autoCompleteHelper} className={getClassName("kcLabelClass")}>
67
- {msg(label)}
68
- </label>
69
- <input
70
- tabIndex={1}
71
- id={autoCompleteHelper}
72
- className={getClassName("kcInputClass")}
73
- //NOTE: This is used by Google Chrome auto fill so we use it to tell
74
- //the browser how to pre fill the form but before submit we put it back
75
- //to username because it is what keycloak expects.
76
- name={autoCompleteHelper}
77
- defaultValue={login.username ?? ""}
78
- type="text"
79
- {...(usernameEditDisabled
80
- ? { "disabled": true }
81
- : {
82
- "autoFocus": true,
83
- "autoComplete": "off"
84
- })}
85
- />
86
- </>
87
- );
88
- })()}
89
- </div>
90
- <div className={getClassName("kcFormGroupClass")}>
91
- <label htmlFor="password" className={getClassName("kcLabelClass")}>
92
- {msg("password")}
93
- </label>
94
- <input
95
- tabIndex={2}
96
- id="password"
97
- className={getClassName("kcInputClass")}
98
- name="password"
99
- type="password"
100
- autoComplete="off"
101
- />
102
- </div>
103
- <div className={clsx(getClassName("kcFormGroupClass"), getClassName("kcFormSettingClass"))}>
104
- <div id="kc-form-options">
105
- {realm.rememberMe && !usernameEditDisabled && (
106
- <div className="checkbox">
107
- <label>
108
- <input
109
- tabIndex={3}
110
- id="rememberMe"
111
- name="rememberMe"
112
- type="checkbox"
113
- {...(login.rememberMe
114
- ? {
115
- "checked": true
116
- }
117
- : {})}
118
- />
119
- {msg("rememberMe")}
120
- </label>
121
- </div>
122
- )}
123
- </div>
124
- <div className={getClassName("kcFormOptionsWrapperClass")}>
125
- {realm.resetPasswordAllowed && (
126
- <span>
127
- <a tabIndex={5} href={url.loginResetCredentialsUrl}>
128
- {msg("doForgotPassword")}
129
- </a>
130
- </span>
131
- )}
132
- </div>
133
- </div>
134
- <div id="kc-form-buttons" className={getClassName("kcFormGroupClass")}>
135
- <input
136
- type="hidden"
137
- id="id-hidden-input"
138
- name="credentialId"
139
- {...(auth?.selectedCredential !== undefined
140
- ? {
141
- "value": auth.selectedCredential
142
- }
143
- : {})}
144
- />
145
- <input
146
- tabIndex={4}
147
- className={clsx(
148
- getClassName("kcButtonClass"),
149
- getClassName("kcButtonPrimaryClass"),
150
- getClassName("kcButtonBlockClass"),
151
- getClassName("kcButtonLargeClass")
152
- )}
153
- name="login"
154
- id="kc-login"
155
- type="submit"
156
- value={msgStr("doLogIn")}
157
- disabled={isLoginButtonDisabled}
158
- />
159
- </div>
160
- </form>
161
- )}
162
- </div>
163
- {realm.password && social.providers !== undefined && (
164
- <div
165
- id="kc-social-providers"
166
- className={clsx(getClassName("kcFormSocialAccountContentClass"), getClassName("kcFormSocialAccountClass"))}
167
- >
168
- <ul
169
- className={clsx(
170
- getClassName("kcFormSocialAccountListClass"),
171
- social.providers.length > 4 && getClassName("kcFormSocialAccountDoubleListClass")
172
- )}
173
- >
174
- {social.providers.map(p => (
175
- <li key={p.providerId} className={getClassName("kcFormSocialAccountListLinkClass")}>
176
- <a href={p.loginUrl} id={`zocial-${p.alias}`} className={clsx("zocial", p.providerId)}>
177
- <span>{p.displayName}</span>
178
- </a>
179
- </li>
180
- ))}
181
- </ul>
182
- </div>
183
- )}
184
- </div>
185
- }
186
43
  infoNode={
187
44
  realm.password &&
188
45
  realm.registrationAllowed &&
@@ -197,6 +54,148 @@ export default function Login(props: PageProps<Extract<KcContext, { pageId: "log
197
54
  </div>
198
55
  )
199
56
  }
200
- />
57
+ >
58
+ <div id="kc-form" className={clsx(realm.password && social.providers !== undefined && getClassName("kcContentWrapperClass"))}>
59
+ <div
60
+ id="kc-form-wrapper"
61
+ className={clsx(
62
+ realm.password &&
63
+ social.providers && [getClassName("kcFormSocialAccountContentClass"), getClassName("kcFormSocialAccountClass")]
64
+ )}
65
+ >
66
+ {realm.password && (
67
+ <form id="kc-form-login" onSubmit={onSubmit} action={url.loginAction} method="post">
68
+ <div className={getClassName("kcFormGroupClass")}>
69
+ {(() => {
70
+ const label = !realm.loginWithEmailAllowed
71
+ ? "username"
72
+ : realm.registrationEmailAsUsername
73
+ ? "email"
74
+ : "usernameOrEmail";
75
+
76
+ const autoCompleteHelper: typeof label = label === "usernameOrEmail" ? "username" : label;
77
+
78
+ return (
79
+ <>
80
+ <label htmlFor={autoCompleteHelper} className={getClassName("kcLabelClass")}>
81
+ {msg(label)}
82
+ </label>
83
+ <input
84
+ tabIndex={1}
85
+ id={autoCompleteHelper}
86
+ className={getClassName("kcInputClass")}
87
+ //NOTE: This is used by Google Chrome auto fill so we use it to tell
88
+ //the browser how to pre fill the form but before submit we put it back
89
+ //to username because it is what keycloak expects.
90
+ name={autoCompleteHelper}
91
+ defaultValue={login.username ?? ""}
92
+ type="text"
93
+ {...(usernameEditDisabled
94
+ ? { "disabled": true }
95
+ : {
96
+ "autoFocus": true,
97
+ "autoComplete": "off"
98
+ })}
99
+ />
100
+ </>
101
+ );
102
+ })()}
103
+ </div>
104
+ <div className={getClassName("kcFormGroupClass")}>
105
+ <label htmlFor="password" className={getClassName("kcLabelClass")}>
106
+ {msg("password")}
107
+ </label>
108
+ <input
109
+ tabIndex={2}
110
+ id="password"
111
+ className={getClassName("kcInputClass")}
112
+ name="password"
113
+ type="password"
114
+ autoComplete="off"
115
+ />
116
+ </div>
117
+ <div className={clsx(getClassName("kcFormGroupClass"), getClassName("kcFormSettingClass"))}>
118
+ <div id="kc-form-options">
119
+ {realm.rememberMe && !usernameEditDisabled && (
120
+ <div className="checkbox">
121
+ <label>
122
+ <input
123
+ tabIndex={3}
124
+ id="rememberMe"
125
+ name="rememberMe"
126
+ type="checkbox"
127
+ {...(login.rememberMe
128
+ ? {
129
+ "checked": true
130
+ }
131
+ : {})}
132
+ />
133
+ {msg("rememberMe")}
134
+ </label>
135
+ </div>
136
+ )}
137
+ </div>
138
+ <div className={getClassName("kcFormOptionsWrapperClass")}>
139
+ {realm.resetPasswordAllowed && (
140
+ <span>
141
+ <a tabIndex={5} href={url.loginResetCredentialsUrl}>
142
+ {msg("doForgotPassword")}
143
+ </a>
144
+ </span>
145
+ )}
146
+ </div>
147
+ </div>
148
+ <div id="kc-form-buttons" className={getClassName("kcFormGroupClass")}>
149
+ <input
150
+ type="hidden"
151
+ id="id-hidden-input"
152
+ name="credentialId"
153
+ {...(auth?.selectedCredential !== undefined
154
+ ? {
155
+ "value": auth.selectedCredential
156
+ }
157
+ : {})}
158
+ />
159
+ <input
160
+ tabIndex={4}
161
+ className={clsx(
162
+ getClassName("kcButtonClass"),
163
+ getClassName("kcButtonPrimaryClass"),
164
+ getClassName("kcButtonBlockClass"),
165
+ getClassName("kcButtonLargeClass")
166
+ )}
167
+ name="login"
168
+ id="kc-login"
169
+ type="submit"
170
+ value={msgStr("doLogIn")}
171
+ disabled={isLoginButtonDisabled}
172
+ />
173
+ </div>
174
+ </form>
175
+ )}
176
+ </div>
177
+ {realm.password && social.providers !== undefined && (
178
+ <div
179
+ id="kc-social-providers"
180
+ className={clsx(getClassName("kcFormSocialAccountContentClass"), getClassName("kcFormSocialAccountClass"))}
181
+ >
182
+ <ul
183
+ className={clsx(
184
+ getClassName("kcFormSocialAccountListClass"),
185
+ social.providers.length > 4 && getClassName("kcFormSocialAccountDoubleListClass")
186
+ )}
187
+ >
188
+ {social.providers.map(p => (
189
+ <li key={p.providerId} className={getClassName("kcFormSocialAccountListLinkClass")}>
190
+ <a href={p.loginUrl} id={`zocial-${p.alias}`} className={clsx("zocial", p.providerId)}>
191
+ <span>{p.displayName}</span>
192
+ </a>
193
+ </li>
194
+ ))}
195
+ </ul>
196
+ </div>
197
+ )}
198
+ </div>
199
+ </Template>
201
200
  );
202
201
  }