-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
142 additions
and
94 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,9 @@ | ||
FROM quay.io/keycloak/keycloak:21.0.1 as builder | ||
FROM quay.io/keycloak/keycloak:23.0.3 as builder | ||
ENV KC_DB=postgres | ||
COPY target/keycloak-ekklesia.jar /opt/keycloak/providers/ | ||
RUN /opt/keycloak/bin/kc.sh build | ||
|
||
FROM quay.io/keycloak/keycloak:21.0.1 | ||
FROM quay.io/keycloak/keycloak:23.0.3 | ||
COPY --from=builder /opt/keycloak/ /opt/keycloak/ | ||
WORKDIR /opt/keycloak | ||
ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start", "--optimized", "--spi-theme-welcome-theme=keycloak-ekklesia-pirates", "--spi-user-profile-declarative-user-profile-read-only-attributes=ekklesia*"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
157 changes: 91 additions & 66 deletions
157
keycloak-theme/src/main/resources/theme/keycloak-ekklesia/login/login.ftl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,91 +1,116 @@ | ||
<#import "template.ftl" as layout> | ||
<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','password') displayInfo=realm.password && realm.registrationAllowed && !registrationDisabled??; section> | ||
<#if section = "header"> | ||
${msg("doLogIn")} | ||
${msg("loginAccountTitle")} | ||
<#elseif section = "form"> | ||
<div id="kc-form"> | ||
<div>${msg("loginInfoText")}<br /><br /></div> | ||
<div id="kc-form-wrapper"> | ||
<#if realm.password> | ||
<form id="kc-form-login" onsubmit="login.disabled = true; return true;" action="${url.loginAction}" method="post"> | ||
<div class="${properties.kcFormGroupClass!}"> | ||
<label for="username" class="${properties.kcLabelClass!}"><#if !realm.loginWithEmailAllowed>${msg("username")}<#elseif !realm.registrationEmailAsUsername>${msg("usernameOrEmail")}<#else>${msg("email")}</#if></label> | ||
<div id="kc-form"> | ||
<div>${msg("loginInfoText")}<br /><br /></div> | ||
<div id="kc-form-wrapper"> | ||
<#if realm.password> | ||
<form id="kc-form-login" onsubmit="login.disabled = true; return true;" action="${url.loginAction}" method="post"> | ||
<#if !usernameHidden??> | ||
<div class="${properties.kcFormGroupClass!}"> | ||
<label for="username" class="${properties.kcLabelClass!}"><#if !realm.loginWithEmailAllowed>${msg("username")}<#elseif !realm.registrationEmailAsUsername>${msg("usernameOrEmail")}<#else>${msg("email")}</#if></label> | ||
|
||
<#if usernameEditDisabled??> | ||
<input tabindex="1" id="username" class="${properties.kcInputClass!}" name="username" value="${(login.username!'')}" type="text" disabled /> | ||
<#else> | ||
<input tabindex="1" id="username" class="${properties.kcInputClass!}" name="username" value="${(login.username!'')}" type="text" autofocus autocomplete="off" aria-invalid="<#if messagesPerField.existsError('username','password')>true</#if>" /> | ||
<#if messagesPerField.existsError('username','password')> | ||
<span id="input-error" class="${properties.kcInputErrorMessageClass!}" aria-live="polite"> | ||
${kcSanitize(messagesPerField.getFirstError('username','password'))?no_esc} | ||
</span> | ||
</#if> | ||
<input tabindex="1" id="username" class="${properties.kcInputClass!}" name="username" value="${(login.username!'')}" type="text" autofocus autocomplete="off" | ||
aria-invalid="<#if messagesPerField.existsError('username','password')>true</#if>" | ||
/> | ||
|
||
<#if messagesPerField.existsError('username','password')> | ||
<span id="input-error" class="${properties.kcInputErrorMessageClass!}" aria-live="polite"> | ||
${kcSanitize(messagesPerField.getFirstError('username','password'))?no_esc} | ||
</span> | ||
</#if> | ||
|
||
</div> | ||
</#if> | ||
</div> | ||
|
||
<div class="${properties.kcFormGroupClass!}"> | ||
<label for="password" class="${properties.kcLabelClass!}">${msg("password")}</label> | ||
<input tabindex="2" id="password" class="${properties.kcInputClass!}" name="password" type="password" autocomplete="off" aria-invalid="<#if messagesPerField.existsError('username','password')>true</#if>" /> | ||
</div> | ||
<div class="${properties.kcFormGroupClass!}"> | ||
<label for="password" class="${properties.kcLabelClass!}">${msg("password")}</label> | ||
|
||
<div class="${properties.kcFormGroupClass!} ${properties.kcFormSettingClass!}"> | ||
<div id="kc-form-options"> | ||
<#if realm.rememberMe && !usernameEditDisabled??> | ||
<div class="checkbox"> | ||
<label> | ||
<#if login.rememberMe??> | ||
<input tabindex="3" id="rememberMe" name="rememberMe" type="checkbox" checked> ${msg("rememberMe")} | ||
<#else> | ||
<input tabindex="3" id="rememberMe" name="rememberMe" type="checkbox"> ${msg("rememberMe")} | ||
</#if> | ||
</label> | ||
<div class="${properties.kcInputGroup!}"> | ||
<input tabindex="2" id="password" class="${properties.kcInputClass!}" name="password" type="password" autocomplete="off" | ||
aria-invalid="<#if messagesPerField.existsError('username','password')>true</#if>" | ||
/> | ||
<button class="${properties.kcFormPasswordVisibilityButtonClass!}" type="button" aria-label="${msg("showPassword")}" | ||
aria-controls="password" data-password-toggle | ||
data-icon-show="${properties.kcFormPasswordVisibilityIconShow!}" data-icon-hide="${properties.kcFormPasswordVisibilityIconHide!}" | ||
data-label-show="${msg('showPassword')}" data-label-hide="${msg('hidePassword')}"> | ||
<i class="${properties.kcFormPasswordVisibilityIconShow!}" aria-hidden="true"></i> | ||
</button> | ||
</div> | ||
</#if> | ||
</div> | ||
<div class="${properties.kcFormOptionsWrapperClass!}"> | ||
<#if realm.resetPasswordAllowed> | ||
<span><a tabindex="5" href="${url.loginResetCredentialsUrl}">${msg("doForgotPassword")}</a></span> | ||
|
||
<#if usernameHidden?? && messagesPerField.existsError('username','password')> | ||
<span id="input-error" class="${properties.kcInputErrorMessageClass!}" aria-live="polite"> | ||
${kcSanitize(messagesPerField.getFirstError('username','password'))?no_esc} | ||
</span> | ||
</#if> | ||
</div> | ||
|
||
</div> | ||
</div> | ||
|
||
<div id="kc-form-buttons" class="${properties.kcFormGroupClass!}"> | ||
<input type="hidden" id="id-hidden-input" name="credentialId" <#if auth.selectedCredential?has_content>value="${auth.selectedCredential}"</#if>/> | ||
<input tabindex="4" class="${properties.kcButtonClass!} ${properties.kcButtonPrimaryClass!} ${properties.kcButtonBlockClass!} ${properties.kcButtonLargeClass!}" name="login" id="kc-login" type="submit" value="${msg("doLogIn")}"/> | ||
</div> | ||
</form> | ||
</#if> | ||
<div class="${properties.kcFormGroupClass!} ${properties.kcFormSettingClass!}"> | ||
<div id="kc-form-options"> | ||
<#if realm.rememberMe && !usernameHidden??> | ||
<div class="checkbox"> | ||
<label> | ||
<#if login.rememberMe??> | ||
<input tabindex="3" id="rememberMe" name="rememberMe" type="checkbox" checked> ${msg("rememberMe")} | ||
<#else> | ||
<input tabindex="3" id="rememberMe" name="rememberMe" type="checkbox"> ${msg("rememberMe")} | ||
</#if> | ||
</label> | ||
</div> | ||
</#if> | ||
</div> | ||
<div class="${properties.kcFormOptionsWrapperClass!}"> | ||
<#if realm.resetPasswordAllowed> | ||
<span><a tabindex="5" href="${url.loginResetCredentialsUrl}">${msg("doForgotPassword")}</a></span> | ||
</#if> | ||
</div> | ||
|
||
</div> | ||
|
||
<div id="kc-form-buttons" class="${properties.kcFormGroupClass!}"> | ||
<input type="hidden" id="id-hidden-input" name="credentialId" <#if auth.selectedCredential?has_content>value="${auth.selectedCredential}"</#if>/> | ||
<input tabindex="4" class="${properties.kcButtonClass!} ${properties.kcButtonPrimaryClass!} ${properties.kcButtonBlockClass!} ${properties.kcButtonLargeClass!}" name="login" id="kc-login" type="submit" value="${msg("doLogIn")}"/> | ||
</div> | ||
</form> | ||
</#if> | ||
</div> | ||
</div> | ||
<script type="module" src="${url.resourcesPath}/js/passwordVisibility.js"></script> | ||
<#elseif section = "info" > | ||
<#if realm.password && realm.registrationAllowed && !registrationDisabled??> | ||
<div id="kc-registration-container"> | ||
<div id="kc-registration"> | ||
<span>${msg("noAccount")} <a tabindex="6" | ||
href="${url.registrationUrl}">${msg("doRegister")}</a></span> | ||
</div> | ||
</div> | ||
</#if> | ||
<#elseif section = "socialProviders" > | ||
<#if realm.password && social.providers??> | ||
<div id="kc-social-providers" class="${properties.kcFormSocialAccountContentClass!}> | ||
<div id="kc-social-providers" class="${properties.kcFormSocialAccountSectionClass!}"> | ||
<hr/> | ||
<h4>${msg("identity-provider-login-label")}</h4> | ||
|
||
<ul class="${properties.kcFormSocialAccountListClass!} <#if social.providers?size gt 3>${properties.kcFormSocialAccountListGridClass!}</#if>"> | ||
<#list social.providers as p> | ||
<a id="social-${p.alias}" class="${properties.kcFormSocialAccountListButtonClass!} <#if social.providers?size gt 3>${properties.kcFormSocialAccountGridItem!}</#if>" | ||
type="button" href="${p.loginUrl}"> | ||
<#if p.iconClasses?has_content> | ||
<i class="${properties.kcCommonLogoIdP!} ${p.iconClasses!}" aria-hidden="true"></i> | ||
<span class="${properties.kcFormSocialAccountNameClass!} kc-social-icon-text">${p.displayName!}</span> | ||
<#else> | ||
<span class="${properties.kcFormSocialAccountNameClass!}">${p.displayName!}</span> | ||
</#if> | ||
</a> | ||
<li> | ||
<a id="social-${p.alias}" class="${properties.kcFormSocialAccountListButtonClass!} <#if social.providers?size gt 3>${properties.kcFormSocialAccountGridItem!}</#if>" | ||
type="button" href="${p.loginUrl}"> | ||
<#if p.iconClasses?has_content> | ||
<i class="${properties.kcCommonLogoIdP!} ${p.iconClasses!}" aria-hidden="true"></i> | ||
<span class="${properties.kcFormSocialAccountNameClass!} kc-social-icon-text">${p.displayName!}</span> | ||
<#else> | ||
<span class="${properties.kcFormSocialAccountNameClass!}">${p.displayName!}</span> | ||
</#if> | ||
</a> | ||
</li> | ||
</#list> | ||
</ul> | ||
</div> | ||
</#if> | ||
</div> | ||
<#elseif section = "info" > | ||
<#if realm.password && realm.registrationAllowed && !registrationDisabled??> | ||
<div id="kc-registration-container"> | ||
<div id="kc-registration"> | ||
<span>${msg("noAccount")} <a tabindex="6" | ||
href="${url.registrationUrl}">${msg("doRegister")}</a></span> | ||
</div> | ||
</div> | ||
</#if> | ||
</#if> | ||
|
||
</@layout.registrationLayout> |
Oops, something went wrong.