diff --git a/package.json b/package.json index 72879ae6..cbbc833b 100755 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "dependencies": { "scripting-tools": "^0.19.13", "cheerio": "^1.0.0-rc.5", - "evt": "^1.9.12", + "evt": "2.0.0-beta.15", "minimal-polyfills": "^2.1.6", "powerhooks": "^0.0.14", "tss-react": "^0.0.9" diff --git a/src/bin/build-keycloak-theme/generateFtl/ftl2js.ftl b/src/bin/build-keycloak-theme/generateFtl/ftl2js.ftl index c6c816d9..5c060197 100644 --- a/src/bin/build-keycloak-theme/generateFtl/ftl2js.ftl +++ b/src/bin/build-keycloak-theme/generateFtl/ftl2js.ftl @@ -6,7 +6,9 @@ "resourcesCommonPath": "${url.resourcesCommonPath}", "loginRestartFlowUrl": "${url.loginRestartFlowUrl}", "loginResetCredentialsUrl": "${url.loginResetCredentialsUrl}", - "registrationUrl": "${url.registrationUrl}" + "registrationUrl": "${url.registrationUrl}", + "registrationAction": "${url.registrationUrl}", + "loginUrl": "${url.loginUrl}" }, "realm": { "displayName": "${realm.displayName!''}" || undefined, @@ -168,6 +170,45 @@ return false; - }) + }), + "messagesPerField": { + "printIfExists": function (key, x) { + switch(key){ + case "userLabel": "${messagesPerField.printIfExists('userLabel','1'}" ? x : undefined; + case "username": "${messagesPerField.printIfExists('username','1'}" ? x : undefined; + case "email": "${messagesPerField.printIfExists('email','1'}" ? x : undefined; + case "firstName": "${messagesPerField.printIfExists('firstName','1'}" ? x : undefined; + case "lastName": "${messagesPerField.printIfExists('lastName','1'}" ? x : undefined; + case "password": "${messagesPerField.printIfExists('password','1'}" ? x : undefined; + case "password-confirm": "${messagesPerField.printIfExists('password-confirm','1'}" ? x : undefined; + } + } + }, + "register": { + "formData": { + "firstName": "${register.formData.firstName!''}" || undefined, + "displayName": "${register.formData.displayName!''}" || undefined, + "lastName": "${register.formData.lastName!''}" || undefined, + "email": "${register.formData.email!''}" || undefined, + "username": "${register.formData.username!''}" || undefined + } + }, + "passwordRequired": (function (){ + + <#if passwordRequired??> + return true; + + return false; + + }), + "recaptchaRequired": (function (){ + + <#if passwordRequired??> + return true; + + return false; + + }), + "recaptchaSiteKey": "${recaptchaSiteKey}" } \ No newline at end of file diff --git a/src/lib/components/KcApp.tsx b/src/lib/components/KcApp.tsx index 4b743001..c4275aa0 100644 --- a/src/lib/components/KcApp.tsx +++ b/src/lib/components/KcApp.tsx @@ -4,6 +4,7 @@ import { kcContext } from "../kcContext"; import { assert } from "evt/tools/typeSafety/assert"; import type { KcPagesProperties } from "./KcProperties"; import { Login } from "./Login"; +import { Register } from "./Register"; export type KcAppProps = { kcProperties?: KcPagesProperties; @@ -16,10 +17,8 @@ export const KcApp = memo((props: KcAppProps) => { assert(kcContext !== undefined, "App is not currently served by a Keycloak server"); switch (kcContext.pageBasename) { - case "login.ftl": return - case "register.ftl": - alert(`TODO: Implement ${kcContext.pageBasename}`); - return null; + case "login.ftl": return ; + case "register.ftl": return ; } }); \ No newline at end of file diff --git a/src/lib/components/Login.tsx b/src/lib/components/Login.tsx index 88dd8e56..a4bdb663 100644 --- a/src/lib/components/Login.tsx +++ b/src/lib/components/Login.tsx @@ -46,7 +46,6 @@ export const Login = memo((props: LoginProps) => { displayWide={realm.password && social.providers !== undefined} kcProperties={kcProperties} headerNode={t("doLogIn")} - showUsernameNode={null} formNode={
{ + + const { kcProperties = {} } = props; + + const { t, tStr } = useKcTranslation(); + + Object.assign(kcProperties, defaultKcPagesProperties); + + const [{ + url, + messagesPerField, + register, + realm, + passwordRequired, + recaptchaRequired, + recaptchaSiteKey + }] = useState(() => ( + assert( + kcContext !== undefined, + "App is currently being served by keycloak" + ), + kcContext + )); + + return ( +