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.
- package/CHANGELOG.md +21 -0
- package/README.md +156 -127
- package/bin/KeycloakVersion.js.map +1 -1
- package/bin/build-keycloak-theme/build-keycloak-theme.js +57 -54
- package/bin/build-keycloak-theme/build-keycloak-theme.js.map +1 -1
- package/bin/build-keycloak-theme/ftlValuesGlobalName.js.map +1 -1
- package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js +4 -11
- package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js.map +1 -1
- package/bin/build-keycloak-theme/generateFtl/common.ftl +72 -56
- package/bin/build-keycloak-theme/generateFtl/generateFtl.d.ts +1 -1
- package/bin/build-keycloak-theme/generateFtl/generateFtl.js +47 -44
- package/bin/build-keycloak-theme/generateFtl/generateFtl.js.map +1 -1
- package/bin/build-keycloak-theme/generateJavaStackFiles.js +12 -8
- package/bin/build-keycloak-theme/generateJavaStackFiles.js.map +1 -1
- package/bin/build-keycloak-theme/generateKeycloakThemeResources.js +20 -21
- package/bin/build-keycloak-theme/generateKeycloakThemeResources.js.map +1 -1
- package/bin/build-keycloak-theme/index.js.map +1 -1
- package/bin/build-keycloak-theme/replaceImportFromStatic.js +18 -30
- package/bin/build-keycloak-theme/replaceImportFromStatic.js.map +1 -1
- package/bin/download-builtin-keycloak-theme.js +2 -2
- package/bin/download-builtin-keycloak-theme.js.map +1 -1
- package/bin/generate-i18n-messages.js +9 -11
- package/bin/generate-i18n-messages.js.map +1 -1
- package/bin/link_in_test_app.js +6 -22
- package/bin/link_in_test_app.js.map +1 -1
- package/bin/tools/crawl.js.map +1 -1
- package/bin/tools/downloadAndUnzip.js +4 -5
- package/bin/tools/downloadAndUnzip.js.map +1 -1
- package/bin/tools/grant-exec-perms.js +4 -3
- package/bin/tools/grant-exec-perms.js.map +1 -1
- package/bin/tools/isInside.js.map +1 -1
- package/bin/tools/rm.js +1 -1
- package/bin/tools/rm.js.map +1 -1
- package/bin/tools/transformCodebase.js +7 -3
- package/bin/tools/transformCodebase.js.map +1 -1
- package/lib/components/Error.js +1 -2
- package/lib/components/Error.js.map +1 -1
- package/lib/components/Info.js +1 -15
- package/lib/components/Info.js.map +1 -1
- package/lib/components/KcApp.js +23 -10
- package/lib/components/KcApp.js.map +1 -1
- package/lib/components/KcProps.d.ts +4 -2
- package/lib/components/KcProps.js +10 -8
- package/lib/components/KcProps.js.map +1 -1
- package/lib/components/Login.js +20 -18
- package/lib/components/Login.js.map +1 -1
- package/lib/components/LoginIdpLinkConfirm.js.map +1 -1
- package/lib/components/LoginOtp.js +14 -15
- package/lib/components/LoginOtp.js.map +1 -1
- package/lib/components/LoginResetPassword.js +5 -7
- package/lib/components/LoginResetPassword.js.map +1 -1
- package/lib/components/LoginUpdateProfile.js +1 -5
- package/lib/components/LoginUpdateProfile.js.map +1 -1
- package/lib/components/LoginVerifyEmail.js.map +1 -1
- package/lib/components/Register.js +1 -4
- package/lib/components/Register.js.map +1 -1
- package/lib/components/RegisterUserProfile.d.ts +6 -0
- package/lib/components/RegisterUserProfile.js +78 -0
- package/lib/components/RegisterUserProfile.js.map +1 -0
- package/lib/components/Template.js +28 -43
- package/lib/components/Template.js.map +1 -1
- package/lib/components/Terms.js.map +1 -1
- package/lib/getKcContext/KcContextBase.d.ts +78 -18
- package/lib/getKcContext/KcContextBase.js +2 -3
- package/lib/getKcContext/KcContextBase.js.map +1 -1
- package/lib/getKcContext/getKcContext.d.ts +1 -3
- package/lib/getKcContext/getKcContext.js +5 -9
- package/lib/getKcContext/getKcContext.js.map +1 -1
- package/lib/getKcContext/kcContextMocks/kcContextMocks.d.ts +1 -0
- package/lib/getKcContext/kcContextMocks/kcContextMocks.js +187 -55
- package/lib/getKcContext/kcContextMocks/kcContextMocks.js.map +1 -1
- package/lib/getKcContext/kcContextMocks/urlResourcesPath.js.map +1 -1
- package/lib/i18n/KcLanguageTag.d.ts +25 -2
- package/lib/i18n/KcLanguageTag.js +27 -27
- package/lib/i18n/KcLanguageTag.js.map +1 -1
- package/lib/i18n/generated_kcMessages/11.0.3/account.js +27 -27
- package/lib/i18n/generated_kcMessages/11.0.3/account.js.map +1 -1
- package/lib/i18n/generated_kcMessages/11.0.3/admin.js +23 -23
- package/lib/i18n/generated_kcMessages/11.0.3/admin.js.map +1 -1
- package/lib/i18n/generated_kcMessages/11.0.3/email.js +97 -97
- package/lib/i18n/generated_kcMessages/11.0.3/email.js.map +1 -1
- package/lib/i18n/generated_kcMessages/11.0.3/login.js +30 -30
- package/lib/i18n/generated_kcMessages/11.0.3/login.js.map +1 -1
- package/lib/i18n/generated_kcMessages/15.0.2/account.js +29 -29
- package/lib/i18n/generated_kcMessages/15.0.2/account.js.map +1 -1
- package/lib/i18n/generated_kcMessages/15.0.2/admin.js +23 -23
- package/lib/i18n/generated_kcMessages/15.0.2/admin.js.map +1 -1
- package/lib/i18n/generated_kcMessages/15.0.2/email.js +111 -111
- package/lib/i18n/generated_kcMessages/15.0.2/email.js.map +1 -1
- package/lib/i18n/generated_kcMessages/15.0.2/login.js +32 -32
- package/lib/i18n/generated_kcMessages/15.0.2/login.js.map +1 -1
- package/lib/i18n/kcMessages/login.js +1 -1
- package/lib/i18n/kcMessages/login.js.map +1 -1
- package/lib/i18n/useKcLanguageTag.js +1 -3
- package/lib/i18n/useKcLanguageTag.js.map +1 -1
- package/lib/i18n/useKcMessage.d.ts +4 -2
- package/lib/i18n/useKcMessage.js +12 -3
- package/lib/i18n/useKcMessage.js.map +1 -1
- package/lib/keycloakJsAdapter.d.ts +6 -6
- package/lib/keycloakJsAdapter.js +10 -12
- package/lib/keycloakJsAdapter.js.map +1 -1
- package/lib/tools/ReactComponent.d.ts +2 -0
- package/lib/tools/ReactComponent.js +3 -0
- package/lib/tools/ReactComponent.js.map +1 -0
- package/lib/tools/allPropertiesValuesToUndefined.js +1 -2
- package/lib/tools/allPropertiesValuesToUndefined.js.map +1 -1
- package/lib/tools/appendHead.js +16 -12
- package/lib/tools/appendHead.js.map +1 -1
- package/lib/tools/assert.js.map +1 -1
- package/lib/tools/deepAssign.js +3 -4
- package/lib/tools/deepAssign.js.map +1 -1
- package/lib/tools/deepClone.js.map +1 -1
- package/package.json +25 -5
- package/src/bin/KeycloakVersion.ts +0 -2
- package/src/bin/build-keycloak-theme/build-keycloak-theme.ts +70 -77
- package/src/bin/build-keycloak-theme/ftlValuesGlobalName.ts +1 -2
- package/src/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.ts +26 -37
- package/src/bin/build-keycloak-theme/generateDebugFiles/index.ts +1 -1
- package/src/bin/build-keycloak-theme/generateFtl/common.ftl +72 -56
- package/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +75 -95
- package/src/bin/build-keycloak-theme/generateFtl/index.ts +1 -1
- package/src/bin/build-keycloak-theme/generateJavaStackFiles.ts +38 -56
- package/src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts +47 -85
- package/src/bin/build-keycloak-theme/index.ts +2 -4
- package/src/bin/build-keycloak-theme/replaceImportFromStatic.ts +34 -78
- package/src/bin/download-builtin-keycloak-theme.ts +5 -19
- package/src/bin/generate-i18n-messages.ts +13 -25
- package/src/bin/link_in_test_app.ts +9 -38
- package/src/bin/tools/crawl.ts +2 -12
- package/src/bin/tools/downloadAndUnzip.ts +6 -22
- package/src/bin/tools/getProjectRoot.ts +1 -1
- package/src/bin/tools/grant-exec-perms.ts +8 -7
- package/src/bin/tools/isInside.ts +2 -9
- package/src/bin/tools/rm.ts +21 -32
- package/src/bin/tools/transformCodebase.ts +20 -43
- package/src/lib/components/Error.tsx +3 -7
- package/src/lib/components/Info.tsx +23 -47
- package/src/lib/components/KcApp.tsx +25 -13
- package/src/lib/components/KcProps.ts +94 -92
- package/src/lib/components/Login.tsx +126 -116
- package/src/lib/components/LoginIdpLinkConfirm.tsx +38 -53
- package/src/lib/components/LoginOtp.tsx +39 -76
- package/src/lib/components/LoginResetPassword.tsx +9 -26
- package/src/lib/components/LoginUpdateProfile.tsx +104 -117
- package/src/lib/components/LoginVerifyEmail.tsx +3 -12
- package/src/lib/components/Register.tsx +76 -46
- package/src/lib/components/RegisterUserProfile.tsx +201 -0
- package/src/lib/components/Template.tsx +109 -161
- package/src/lib/components/Terms.tsx +4 -13
- package/src/lib/getKcContext/KcContextBase.ts +104 -53
- package/src/lib/getKcContext/getKcContext.ts +47 -78
- package/src/lib/getKcContext/index.ts +2 -2
- package/src/lib/getKcContext/kcContextMocks/index.ts +1 -1
- package/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts +362 -241
- package/src/lib/getKcContext/kcContextMocks/urlResourcesPath.ts +1 -2
- package/src/lib/i18n/KcLanguageTag.ts +34 -45
- package/src/lib/i18n/generated_kcMessages/11.0.3/account.ts +3086 -3059
- package/src/lib/i18n/generated_kcMessages/11.0.3/admin.ts +248 -239
- package/src/lib/i18n/generated_kcMessages/11.0.3/email.ts +848 -633
- package/src/lib/i18n/generated_kcMessages/11.0.3/login.ts +4466 -4359
- package/src/lib/i18n/generated_kcMessages/15.0.2/account.ts +4247 -4202
- package/src/lib/i18n/generated_kcMessages/15.0.2/admin.ts +273 -264
- package/src/lib/i18n/generated_kcMessages/15.0.2/email.ts +997 -749
- package/src/lib/i18n/generated_kcMessages/15.0.2/login.ts +5352 -5212
- package/src/lib/i18n/kcMessages/login.ts +4 -9
- package/src/lib/i18n/useKcLanguageTag.ts +2 -16
- package/src/lib/i18n/useKcMessage.tsx +26 -15
- package/src/lib/index.ts +0 -1
- package/src/lib/keycloakJsAdapter.ts +23 -53
- package/src/lib/tools/AndByDiscriminatingKey.ts +16 -30
- package/src/lib/tools/DeepPartial.ts +1 -2
- package/src/lib/tools/ReactComponent.ts +4 -0
- package/src/lib/tools/allPropertiesValuesToUndefined.ts +1 -6
- package/src/lib/tools/appendHead.ts +28 -25
- package/src/lib/tools/assert.ts +1 -2
- package/src/lib/tools/deepAssign.ts +28 -46
- 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
|
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
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
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
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
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
|
-
</
|
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
|
124
|
-
{
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
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
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
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
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
64
|
-
<
|
65
|
-
|
66
|
-
<
|
67
|
-
|
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
|
-
$(
|
134
|
-
if ($(this).hasClass(
|
135
|
-
|
136
|
-
$(
|
137
|
-
|
138
|
-
$(
|
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 = $(
|
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
|
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
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
-
|