diff --git a/services/keycloak/themes/lagoon/account/resources/public/layout.css b/services/keycloak/themes/lagoon/account/resources/public/layout.css index a3b70de20d..2f89d00f62 100644 --- a/services/keycloak/themes/lagoon/account/resources/public/layout.css +++ b/services/keycloak/themes/lagoon/account/resources/public/layout.css @@ -85,4 +85,8 @@ .pf-c-page{ background-color: #4578E6; +} + +.pf-c-page__header{ + background: linear-gradient(to right, rgba(36, 174, 196, 1) 0%, rgba(42, 109, 254, 1) 25%); } \ No newline at end of file diff --git a/services/keycloak/themes/lagoon/email/html/template.ftl b/services/keycloak/themes/lagoon/email/html/template.ftl index d688a17f0b..57e5bdb4f3 100644 --- a/services/keycloak/themes/lagoon/email/html/template.ftl +++ b/services/keycloak/themes/lagoon/email/html/template.ftl @@ -134,17 +134,17 @@ - - - - + + +
+ + + + - - -
- + -
+
diff --git a/services/keycloak/themes/lagoon/login/login-config-totp.ftl b/services/keycloak/themes/lagoon/login/login-config-totp.ftl index d093c104f3..c24c710d98 100755 --- a/services/keycloak/themes/lagoon/login/login-config-totp.ftl +++ b/services/keycloak/themes/lagoon/login/login-config-totp.ftl @@ -1,16 +1,15 @@ <#import "template.ftl" as layout> - <@layout.registrationLayout displayRequiredFields=false displayMessage=!messagesPerField.existsError('totp','userLabel'); section> - - <#if section = "form"> -

${msg("loginTotpTitle")}

+ <#if section = "header"> + ${msg("loginTotpTitle")} + <#elseif section = "form">
  1. ${msg("loginTotpStep1")}

    @@ -73,7 +72,7 @@
    - <#if totp.otpCredentials?size gte 1>* +
    @@ -89,34 +88,21 @@
    -
    -
    -
    -
    - -
    -
    -
    -
    - <#if isAppInitiatedAction??> + class="${properties.kcButtonClass!} ${properties.kcButtonPrimaryClass!} ${properties.kcButtonLargeClass!}" + id="saveTOTPBtn" value="${msg("doSubmit")}" + /> <#else> - + \ No newline at end of file diff --git a/services/keycloak/themes/lagoon/login/login-idp-link-confirm.ftl b/services/keycloak/themes/lagoon/login/login-idp-link-confirm.ftl index 14bb38a729..c3537c5d3e 100644 --- a/services/keycloak/themes/lagoon/login/login-idp-link-confirm.ftl +++ b/services/keycloak/themes/lagoon/login/login-idp-link-confirm.ftl @@ -1,8 +1,8 @@ <#import "template.ftl" as layout> <@layout.registrationLayout; section> - - <#if section = "form"> -

    ${msg("confirmLinkIdpTitle")}

    + <#if section = "header"> + ${msg("confirmLinkIdpTitle")} + <#elseif section = "form">
    diff --git a/services/keycloak/themes/lagoon/login/login-oauth2-device-verify-user-code.ftl b/services/keycloak/themes/lagoon/login/login-oauth2-device-verify-user-code.ftl index 954bf57477..dfb625fe8b 100644 --- a/services/keycloak/themes/lagoon/login/login-oauth2-device-verify-user-code.ftl +++ b/services/keycloak/themes/lagoon/login/login-oauth2-device-verify-user-code.ftl @@ -1,8 +1,8 @@ <#import "template.ftl" as layout> <@layout.registrationLayout; section> - - <#if section = "form"> -

    ${msg("oauth2DeviceVerificationTitle")}

    + <#if section = "header"> + ${msg("oauth2DeviceVerificationTitle")} + <#elseif section = "form">
    diff --git a/services/keycloak/themes/lagoon/login/login-otp.ftl b/services/keycloak/themes/lagoon/login/login-otp.ftl index 78f1281b93..a43778d900 100755 --- a/services/keycloak/themes/lagoon/login/login-otp.ftl +++ b/services/keycloak/themes/lagoon/login/login-otp.ftl @@ -1,8 +1,8 @@ <#import "template.ftl" as layout> <@layout.registrationLayout displayMessage=!messagesPerField.existsError('totp'); section> - - <#if section = "form"> -

    ${msg("doLogIn")}

    + <#if section="header"> + ${msg("doLogIn")} + <#elseif section="form"> <#if otpLogin.userOtpCredentials?size gt 1> diff --git a/services/keycloak/themes/lagoon/login/login-password.ftl b/services/keycloak/themes/lagoon/login/login-password.ftl index 6563643b82..a0b5bcc20d 100755 --- a/services/keycloak/themes/lagoon/login/login-password.ftl +++ b/services/keycloak/themes/lagoon/login/login-password.ftl @@ -1,8 +1,8 @@ <#import "template.ftl" as layout> <@layout.registrationLayout displayMessage=!messagesPerField.existsError('password'); section> - - <#if section = "form"> -

    ${msg("doLogIn")}

    + <#if section = "header"> + ${msg("doLogIn")} + <#elseif section = "form">
    -<#import "password-commons.ftl" as passwordCommons> <@layout.registrationLayout; section> -<#if section = "form"> -

    ${msg("recovery-code-config-header")}

    +<#if section = "header"> + ${msg("recovery-code-config-header")} +<#elseif section = "form">
    @@ -38,27 +38,17 @@
    -
    - + - +
    - + -
    -
    -
    - -
    -
    -
    <#if isAppInitiatedAction??> <@layout.registrationLayout displayMessage=!messagesPerField.existsError('recoveryCodeInput'); section> - - <#if section = "form"> -

    ${msg("auth-recovery-code-header")}

    + <#if section = "header"> + ${msg("auth-recovery-code-header")} + <#elseif section = "form">
    diff --git a/services/keycloak/themes/lagoon/login/login-reset-otp.ftl b/services/keycloak/themes/lagoon/login/login-reset-otp.ftl deleted file mode 100644 index a7c76e205b..0000000000 --- a/services/keycloak/themes/lagoon/login/login-reset-otp.ftl +++ /dev/null @@ -1,33 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('totp'); section> - - <#if section="form"> -

    ${msg("doLogIn")}

    - -
    -
    -

    ${msg("otp-reset-description")}

    - - <#list configuredOtpCredentials.userOtpCredentials as otpCredential> - checked="checked"> - - - -
    -
    - -
    -
    -
    -
    - - - diff --git a/services/keycloak/themes/lagoon/login/login-reset-password.ftl b/services/keycloak/themes/lagoon/login/login-reset-password.ftl index fb9885f313..800faea1f0 100755 --- a/services/keycloak/themes/lagoon/login/login-reset-password.ftl +++ b/services/keycloak/themes/lagoon/login/login-reset-password.ftl @@ -1,8 +1,8 @@ <#import "template.ftl" as layout> <@layout.registrationLayout displayInfo=true displayMessage=!messagesPerField.existsError('username'); section> - - <#if section = "form"> -

    ${msg("emailForgotTitle")}

    + <#if section = "header"> + ${msg("emailForgotTitle")} + <#elseif section = "form">
    diff --git a/services/keycloak/themes/lagoon/login/login-update-password.ftl b/services/keycloak/themes/lagoon/login/login-update-password.ftl index d5405e2b71..b884d75271 100755 --- a/services/keycloak/themes/lagoon/login/login-update-password.ftl +++ b/services/keycloak/themes/lagoon/login/login-update-password.ftl @@ -1,9 +1,8 @@ <#import "template.ftl" as layout> - <@layout.registrationLayout displayMessage=!messagesPerField.existsError('password','password-confirm'); section> - - <#if section = "form"> -

    ${msg("updatePasswordTitle")}

    + <#if section = "header"> + ${msg("updatePasswordTitle")} + <#elseif section = "form"> @@ -50,12 +49,11 @@
    -
    - -
    + <#if isAppInitiatedAction??> +
    + +
    +
    @@ -70,4 +68,4 @@
    - + \ No newline at end of file diff --git a/services/keycloak/themes/lagoon/login/login-update-profile.ftl b/services/keycloak/themes/lagoon/login/login-update-profile.ftl index 37fa9d96a7..be579b01bd 100755 --- a/services/keycloak/themes/lagoon/login/login-update-profile.ftl +++ b/services/keycloak/themes/lagoon/login/login-update-profile.ftl @@ -1,8 +1,8 @@ <#import "template.ftl" as layout> <@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','email','firstName','lastName'); section> - - <#if section = "form"> -

    ${msg("loginProfileTitle")}

    + <#if section = "header"> + ${msg("loginProfileTitle")} + <#elseif section = "form">
    <#if user.editUsernameAllowed>
    diff --git a/services/keycloak/themes/lagoon/login/login-username.ftl b/services/keycloak/themes/lagoon/login/login-username.ftl index a8f4cfe2e0..02ced45a5c 100755 --- a/services/keycloak/themes/lagoon/login/login-username.ftl +++ b/services/keycloak/themes/lagoon/login/login-username.ftl @@ -1,8 +1,8 @@ <#import "template.ftl" as layout> <@layout.registrationLayout displayMessage=!messagesPerField.existsError('username') displayInfo=(realm.password && realm.registrationAllowed && !registrationDisabled??); section> - - <#if section = "form"> -

    ${msg("loginAccountTitle")}

    + <#if section = "header"> + ${msg("loginAccountTitle")} + <#elseif section = "form">
    <#if realm.password> diff --git a/services/keycloak/themes/lagoon/login/login-verify-email.ftl b/services/keycloak/themes/lagoon/login/login-verify-email.ftl index a96f56ea0e..b47d8ca8d5 100755 --- a/services/keycloak/themes/lagoon/login/login-verify-email.ftl +++ b/services/keycloak/themes/lagoon/login/login-verify-email.ftl @@ -3,8 +3,7 @@ <#if section = "header"> ${msg("emailVerifyTitle")} <#elseif section = "form"> -

    ${msg("emailVerifyTitle")}

    -

    ${msg("emailVerifyInstruction1",user.email)}

    +

    ${msg("emailVerifyInstruction1",user.email)}

    <#elseif section = "info">

    ${msg("emailVerifyInstruction2")} diff --git a/services/keycloak/themes/lagoon/login/login.ftl b/services/keycloak/themes/lagoon/login/login.ftl index 18e53d80d1..21f3f9561c 100755 --- a/services/keycloak/themes/lagoon/login/login.ftl +++ b/services/keycloak/themes/lagoon/login/login.ftl @@ -1,9 +1,10 @@ <#import "template.ftl" as layout> <@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','password') displayInfo=realm.password && realm.registrationAllowed && !registrationDisabled??; section> - - <#if section = "form"> - -

    ${msg("loginAccountTitle")}

    + <#if section = "header"> + ${msg("loginAccountTitle")} + <#elseif section = "form"> +
    +
    <#if realm.password> <#if !usernameHidden??> @@ -66,7 +67,9 @@
    +
    +
    <#elseif section = "info" > <#if realm.password && realm.registrationAllowed && !registrationDisabled??> diff --git a/services/keycloak/themes/lagoon/login/messages/messages_en.properties b/services/keycloak/themes/lagoon/login/messages/messages_en.properties new file mode 100644 index 0000000000..5c3d5c57db --- /dev/null +++ b/services/keycloak/themes/lagoon/login/messages/messages_en.properties @@ -0,0 +1,525 @@ +doLogIn=Sign In +doRegister=Register +doRegisterSecurityKey=Register +doCancel=Cancel +doSubmit=Submit +doBack=Back +doYes=Yes +doNo=No +doContinue=Continue +doIgnore=Ignore +doAccept=Accept +doDecline=Decline +doForgotPassword=Forgot Password? +doClickHere=Click here +doImpersonate=Impersonate +doTryAgain=Try again +doTryAnotherWay=Try Another Way +doConfirmDelete=Confirm deletion +errorDeletingAccount=Error happened while deleting account +deletingAccountForbidden=You do not have enough permissions to delete your own account, contact admin. +kerberosNotConfigured=Kerberos Not Configured +kerberosNotConfiguredTitle=Kerberos Not Configured +bypassKerberosDetail=Either you are not logged in by Kerberos or your browser is not set up for Kerberos login. Please click continue to login in through other means +kerberosNotSetUp=Kerberos is not set up. You cannot login. +registerTitle=Register +loginAccountTitle=Sign in to your account +loginTitle=Sign in to {0} +loginTitleHtml={0} +impersonateTitle={0} Impersonate User +impersonateTitleHtml={0} Impersonate User +realmChoice=Realm +unknownUser=Unknown user +loginTotpTitle=Mobile Authenticator Setup +loginProfileTitle=Update Account Information +loginIdpReviewProfileTitle=Update Account Information +loginTimeout=Your login attempt timed out. Login will start from the beginning. +reauthenticate=Please re-authenticate to continue +authenticateStrong=Strong authentication required to continue +oauthGrantTitle=Grant Access to {0} +oauthGrantTitleHtml={0} +oauthGrantInformation=Make sure you trust {0} by learning how {0} will handle your data. +oauthGrantReview=You could review the +oauthGrantTos=terms of service. +oauthGrantPolicy=privacy policy. +errorTitle=We are sorry... +errorTitleHtml=We are sorry ... +emailVerifyTitle=Email verification +emailForgotTitle=Forgot Your Password? +updateEmailTitle=Update email +emailUpdateConfirmationSentTitle=Confirmation email sent +emailUpdateConfirmationSent=A confirmation email has been sent to {0}. You must follow the instructions of the former to complete the email update. +emailUpdatedTitle=Email updated +emailUpdated=The account email has been successfully updated to {0}. +updatePasswordTitle=Update password +codeSuccessTitle=Success code +codeErrorTitle=Error code\: {0} +displayUnsupported=Requested display type unsupported +browserRequired=Browser required to login +browserContinue=Browser required to complete login +browserContinuePrompt=Open browser and continue login? [y/n]: +browserContinueAnswer=y + +# Transports +usb=USB +nfc=NFC +bluetooth=Bluetooth +internal=Internal +unknown=Unknown + +termsTitle=Terms and Conditions +termsText=

    Terms and conditions to be defined

    +termsPlainText=Terms and conditions to be defined. +termsAcceptanceRequired=You must agree to our terms and conditions. +acceptTerms=I agree to the terms and conditions + +deleteCredentialTitle=Delete {0} +deleteCredentialMessage=Do you want to delete {0}? + +recaptchaFailed=Invalid Recaptcha +recaptchaNotConfigured=Recaptcha is required, but not configured +consentDenied=Consent denied. + +noAccount=New user? +username=Username +usernameOrEmail=Username or email +firstName=First name +givenName=Given name +fullName=Full name +lastName=Last name +familyName=Family name +email=Email +password=Password +passwordConfirm=Confirm password +passwordNew=New Password +passwordNewConfirm=New Password confirmation +hidePassword=Hide password +showPassword=Show password +rememberMe=Remember me +authenticatorCode=One-time code +address=Address +street=Street +locality=City or Locality +region=State, Province, or Region +postal_code=Zip or Postal code +country=Country +emailVerified=Email verified +website=Web page +phoneNumber=Phone number +phoneNumberVerified=Phone number verified +gender=Gender +birthday=Birthdate +zoneinfo=Time zone +gssDelegationCredential=GSS Delegation Credential +logoutOtherSessions=Sign out from other devices + +profileScopeConsentText=User profile +emailScopeConsentText=Email address +addressScopeConsentText=Address +phoneScopeConsentText=Phone number +offlineAccessScopeConsentText=Offline Access +samlRoleListScopeConsentText=My Roles +rolesScopeConsentText=User roles +organizationScopeConsentText=Organization + +restartLoginTooltip=Restart login + +loginTotpIntro=You need to set up a One Time Password generator to access this account +loginTotpStep1=Install one of the following applications on your mobile: +loginTotpStep2=Open the application and scan the barcode: +loginTotpStep3=Enter the one-time code provided by the application and click Submit to finish the setup. +loginTotpStep3DeviceName=Provide a Device Name to help you manage your OTP devices. +loginTotpManualStep2=Open the application and enter the key: +loginTotpManualStep3=Use the following configuration values if the application allows setting them: +loginTotpUnableToScan=Unable to scan? +loginTotpScanBarcode=Scan barcode? +loginCredential=Credential +loginOtpOneTime=One-time code +loginTotpType=Type +loginTotpAlgorithm=Algorithm +loginTotpDigits=Digits +loginTotpInterval=Interval +loginTotpCounter=Counter +loginTotpDeviceName=Device Name + +loginTotp.totp=Time-based +loginTotp.hotp=Counter-based + +totpAppFreeOTPName=FreeOTP +totpAppGoogleName=Google Authenticator +totpAppMicrosoftAuthenticatorName=Microsoft Authenticator + +loginChooseAuthenticator=Select login method + +oauthGrantRequest=Do you grant these access privileges? +inResource=in + +oauth2DeviceVerificationTitle=Device Login +verifyOAuth2DeviceUserCode=Enter the code provided by your device and click Submit +oauth2DeviceInvalidUserCodeMessage=Invalid code, please try again. +oauth2DeviceExpiredUserCodeMessage=The code has expired. Please go back to your device and try connecting again. +oauth2DeviceVerificationCompleteHeader=Device Login Successful +oauth2DeviceVerificationCompleteMessage=You may close this browser window and go back to your device. +oauth2DeviceVerificationFailedHeader=Device Login Failed +oauth2DeviceVerificationFailedMessage=You may close this browser window and go back to your device and try connecting again. +oauth2DeviceConsentDeniedMessage=Consent denied for connecting the device. +oauth2DeviceAuthorizationGrantDisabledMessage=Client is not allowed to initiate OAuth 2.0 Device Authorization Grant. The flow is disabled for the client. + +emailVerifyInstruction1=An email with instructions to verify your email address has been sent to your address {0}. +emailVerifyInstruction2=Haven''t received a verification code in your email? +emailVerifyInstruction3=to re-send the email. + +emailLinkIdpTitle=Link {0} +emailLinkIdp1=An email with instructions to link {0} account {1} with your {2} account has been sent to you. +emailLinkIdp2=Haven''t received a verification code in your email? +emailLinkIdp3=to re-send the email. +emailLinkIdp4=If you already verified the email in different browser +emailLinkIdp5=to continue. + +backToLogin=« Back to Login + +emailInstruction=Enter your username or email address and we will send you instructions on how to create a new password. +emailInstructionUsername=Enter your username and we will send you instructions on how to create a new password. + +copyCodeInstruction=Please copy this code and paste it into your application: + +pageExpiredTitle=Page has expired +pageExpiredMsg1=To restart the login process +pageExpiredMsg2=To continue the login process + +personalInfo=Personal Info: +role_admin=Admin +role_realm-admin=Realm Admin +role_create-realm=Create realm +role_create-client=Create client +role_view-realm=View realm +role_view-users=View users +role_view-applications=View applications +role_view-clients=View clients +role_view-events=View events +role_view-identity-providers=View identity providers +role_manage-realm=Manage realm +role_manage-users=Manage users +role_manage-applications=Manage applications +role_manage-identity-providers=Manage identity providers +role_manage-clients=Manage clients +role_manage-events=Manage events +role_view-profile=View profile +role_manage-account=Manage account +role_manage-account-links=Manage account links +role_read-token=Read token +role_offline-access=Offline access +client_account=Account +client_account-console=Account Console +client_security-admin-console=Security Admin Console +client_admin-cli=Admin CLI +client_realm-management=Realm Management +client_broker=Broker + +requiredFields=Required fields + +invalidUserMessage=Invalid username or password. +invalidUsernameMessage=Invalid username. +invalidUsernameOrEmailMessage=Invalid username or email. +invalidPasswordMessage=Invalid password. +invalidEmailMessage=Invalid email address. +accountDisabledMessage=Account is disabled, contact your administrator. +accountTemporarilyDisabledMessage=Account is temporarily disabled; contact your administrator or retry later. +expiredCodeMessage=Login timeout. Please sign in again. +expiredActionMessage=Action expired. Please continue with login now. +expiredActionTokenNoSessionMessage=Action expired. +expiredActionTokenSessionExistsMessage=Action expired. Please start again. +sessionLimitExceeded=There are too many sessions +identityProviderLogoutFailure=SAML IdP Logout Failure + +missingFirstNameMessage=Please specify first name. +missingLastNameMessage=Please specify last name. +missingEmailMessage=Please specify email. +missingUsernameMessage=Please specify username. +missingPasswordMessage=Please specify password. +missingTotpMessage=Please specify authenticator code. +missingTotpDeviceNameMessage=Please specify device name. +notMatchPasswordMessage=Passwords don''t match. + +error-invalid-value=Invalid value. +error-invalid-blank=Please specify value. +error-empty=Please specify value. +error-invalid-length=Length must be between {1} and {2}. +error-invalid-length-too-short=Minimal length is {1}. +error-invalid-length-too-long=Maximal length is {2}. +error-invalid-email=Invalid email address. +error-invalid-number=Invalid number. +error-number-out-of-range=Number must be between {1} and {2}. +error-number-out-of-range-too-small=Number must have minimal value of {1}. +error-number-out-of-range-too-big=Number must have maximal value of {2}. +error-pattern-no-match=Invalid value. +error-invalid-uri=Invalid URL. +error-invalid-uri-scheme=Invalid URL scheme. +error-invalid-uri-fragment=Invalid URL fragment. +error-user-attribute-required=Please specify this field. +error-invalid-date=Invalid date. +error-user-attribute-read-only=This field is read only. +error-username-invalid-character=Value contains invalid character. +error-person-name-invalid-character=Value contains invalid character. +error-reset-otp-missing-id=Please choose an OTP configuration. + +invalidPasswordExistingMessage=Invalid existing password. +invalidPasswordBlacklistedMessage=Invalid password: password is blacklisted. +invalidPasswordConfirmMessage=Password confirmation doesn''t match. +invalidTotpMessage=Invalid authenticator code. + +usernameExistsMessage=Username already exists. +emailExistsMessage=Email already exists. + +federatedIdentityExistsMessage=User with {0} {1} already exists. Please login to account management to link the account. +federatedIdentityUnavailableMessage=User {0} authenticated with identity provider {1} does not exist. Please contact your administrator. +federatedIdentityUnmatchedEssentialClaimMessage=The ID token issued by the identity provider does not match the configured essential claim. Please contact your administrator. + +confirmLinkIdpTitle=Account already exists +confirmOverrideIdpTitle=Broker link already exists +federatedIdentityConfirmLinkMessage=User with {0} {1} already exists. How do you want to continue? +federatedIdentityConfirmOverrideMessage=You are trying to link your account {0} with the {1} account {2}. But your account is already linked with different {3} account {4}. Can you confirm if you want to replace the existing link with the new account? +federatedIdentityConfirmReauthenticateMessage=Authenticate to link your account with {0} +nestedFirstBrokerFlowMessage=The {0} user {1} is not linked to any known user. +confirmLinkIdpReviewProfile=Review profile +confirmLinkIdpContinue=Add to existing account +confirmOverrideIdpContinue=Yes, override link with current account + +configureTotpMessage=You need to set up Mobile Authenticator to activate your account. +configureBackupCodesMessage=You need to set up Backup Codes to activate your account. +updateProfileMessage=You need to update your user profile to activate your account. +updatePasswordMessage=You need to change your password to activate your account. +updateEmailMessage=You need to update your email address to activate your account. +resetPasswordMessage=You need to change your password. +verifyEmailMessage=You need to verify your email address to activate your account. +linkIdpMessage=You need to verify your email address to link your account with {0}. + +emailSentMessage=You should receive an email shortly with further instructions. +emailSendErrorMessage=Failed to send email, please try again later. + +accountUpdatedMessage=Your account has been updated. +accountPasswordUpdatedMessage=Your password has been updated. + +delegationCompleteHeader=Login Successful +delegationCompleteMessage=You may close this browser window and go back to your console application. +delegationFailedHeader=Login Failed +delegationFailedMessage=You may close this browser window and go back to your console application and try logging in again. + +noAccessMessage=No access + +invalidPasswordMinLengthMessage=Invalid password: minimum length {0}. +invalidPasswordMaxLengthMessage=Invalid password: maximum length {0}. +invalidPasswordMinDigitsMessage=Invalid password: must contain at least {0} numerical digits. +invalidPasswordMinLowerCaseCharsMessage=Invalid password: must contain at least {0} lower case characters. +invalidPasswordMinUpperCaseCharsMessage=Invalid password: must contain at least {0} upper case characters. +invalidPasswordMinSpecialCharsMessage=Invalid password: must contain at least {0} special characters. +invalidPasswordNotUsernameMessage=Invalid password: must not be equal to the username. +invalidPasswordNotContainsUsernameMessage=Invalid password: Can not contain the username. +invalidPasswordNotEmailMessage=Invalid password: must not be equal to the email. +invalidPasswordRegexPatternMessage=Invalid password: fails to match regex pattern(s). +invalidPasswordHistoryMessage=Invalid password: must not be equal to any of last {0} passwords. +invalidPasswordGenericMessage=Invalid password: new password doesn''t match password policies. + +failedToProcessResponseMessage=Failed to process response +httpsRequiredMessage=HTTPS required +realmNotEnabledMessage=Realm not enabled +invalidRequestMessage=Invalid Request +successLogout=You are logged out +failedLogout=Logout failed +unknownLoginRequesterMessage=Unknown login requester +loginRequesterNotEnabledMessage=Login requester not enabled +bearerOnlyMessage=Bearer-only applications are not allowed to initiate browser login +standardFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Standard flow is disabled for the client. +implicitFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Implicit flow is disabled for the client. +invalidRedirectUriMessage=Invalid redirect uri +unsupportedNameIdFormatMessage=Unsupported NameIDFormat +invalidRequesterMessage=Invalid requester +registrationNotAllowedMessage=Registration not allowed +resetCredentialNotAllowedMessage=Reset Credential not allowed + +permissionNotApprovedMessage=Permission not approved. +noRelayStateInResponseMessage=No relay state in response from identity provider. +insufficientPermissionMessage=Insufficient permissions to link identities. +couldNotProceedWithAuthenticationRequestMessage=Could not proceed with authentication request to identity provider. +couldNotObtainTokenMessage=Could not obtain token from identity provider. +unexpectedErrorRetrievingTokenMessage=Unexpected error when retrieving token from identity provider. +unexpectedErrorHandlingResponseMessage=Unexpected error when handling response from identity provider. +identityProviderAuthenticationFailedMessage=Authentication failed. Could not authenticate with identity provider. +couldNotSendAuthenticationRequestMessage=Could not send authentication request to identity provider. +unexpectedErrorHandlingRequestMessage=Unexpected error when handling authentication request to identity provider. +invalidAccessCodeMessage=Invalid access code. +sessionNotActiveMessage=Session not active. +invalidCodeMessage=An error occurred, please login again through your application. +cookieNotFoundMessage=Cookie not found. Please make sure cookies are enabled in your browser. +insufficientLevelOfAuthentication=The requested level of authentication has not been satisfied. +identityProviderUnexpectedErrorMessage=Unexpected error when authenticating with identity provider +identityProviderMissingStateMessage=Missing state parameter in response from identity provider. +identityProviderMissingCodeOrErrorMessage=Missing code or error parameter in response from identity provider. +identityProviderInvalidResponseMessage=Invalid response from identity provider. +identityProviderInvalidSignatureMessage=Invalid signature in response from identity provider. +identityProviderNotFoundMessage=Could not find an identity provider with the identifier. +identityProviderLinkSuccess=You successfully verified your email. Please go back to your original browser and continue there with the login. +staleCodeMessage=This page is no longer valid, please go back to your application and sign in again +realmSupportsNoCredentialsMessage=Realm does not support any credential type. +credentialSetupRequired=Cannot login, credential setup required. +identityProviderNotUniqueMessage=Realm supports multiple identity providers. Could not determine which identity provider should be used to authenticate with. +emailVerifiedMessage=Your email address has been verified. +emailVerifiedAlreadyMessage=Your email address has been verified already. +staleEmailVerificationLink=The link you clicked is an old stale link and is no longer valid. Maybe you have already verified your email. +identityProviderAlreadyLinkedMessage=Federated identity returned by {0} is already linked to another user. +confirmAccountLinking=Confirm linking the account {0} of identity provider {1} with your account. +confirmEmailAddressVerification=Confirm validity of e-mail address {0}. +confirmExecutionOfActions=Perform the following action(s) + +backToApplication=« Back to Application +missingParameterMessage=Missing parameters\: {0} +clientNotFoundMessage=Client not found. +clientDisabledMessage=Client disabled. +invalidParameterMessage=Invalid parameter\: {0} +alreadyLoggedIn=You are already logged in. +differentUserAuthenticated=You are already authenticated as different user ''{0}'' in this session. Please sign out first. +brokerLinkingSessionExpired=Requested broker account linking, but current session is no longer valid. +proceedWithAction=» Click here to proceed +acrNotFulfilled=Authentication requirements not fulfilled + +requiredAction.CONFIGURE_TOTP=Configure OTP +requiredAction.TERMS_AND_CONDITIONS=Terms and Conditions +requiredAction.UPDATE_PASSWORD=Update Password +requiredAction.UPDATE_PROFILE=Update Profile +requiredAction.VERIFY_EMAIL=Verify Email +requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES=Generate Recovery Codes +requiredAction.webauthn-register-passwordless=Webauthn Register Passwordless + +invalidTokenRequiredActions=Required actions included in the link are not valid + +doX509Login=You will be logged in as\: +clientCertificate=X509 client certificate\: +noCertificate=[No Certificate] + + +pageNotFound=Page not found +internalServerError=An internal server error has occurred + +console-username=Username: +console-password=Password: +console-otp=One Time Password: +console-new-password=New Password: +console-confirm-password=Confirm Password: +console-update-password=Update of your password is required. +console-verify-email=You need to verify your email address. We sent an email to {0} that contains a verification code. Please enter this code into the input below. +console-email-code=Email Code: +console-accept-terms=Accept Terms? [y/n]: +console-accept=y + +# Openshift messages +openshift.scope.user_info=User information +openshift.scope.user_check-access=User access information +openshift.scope.user_full=Full Access +openshift.scope.list-projects=List projects + +# SAML authentication +saml.post-form.title=Authentication Redirect +saml.post-form.message=Redirecting, please wait. +saml.post-form.js-disabled=JavaScript is disabled. We strongly recommend to enable it. Click the button below to continue. +saml.artifactResolutionServiceInvalidResponse=Unable to resolve artifact. + +#authenticators +otp-display-name=Authenticator Application +otp-help-text=Enter a verification code from authenticator application. +otp-reset-description=Which OTP configuration should be removed? +password-display-name=Password +password-help-text=Sign in by entering your password. +auth-username-form-display-name=Username +auth-username-form-help-text=Start sign in by entering your username +auth-username-password-form-display-name=Username and password +auth-username-password-form-help-text=Sign in by entering your username and password. +auth-x509-client-username-form-display-name=X509 Certificate +auth-x509-client-username-form-help-text=Sign in with an X509 client certificate. + +# Recovery Codes +auth-recovery-authn-code-form-display-name=Recovery Authentication Code +auth-recovery-authn-code-form-help-text=Enter a recovery authentication code from a previously generated list. +auth-recovery-code-info-message=Enter the specified recovery code. +auth-recovery-code-prompt=Recovery code #{0} +auth-recovery-code-header=Login with a recovery authentication code +recovery-codes-error-invalid=Invalid recovery authentication code +recovery-code-config-header=Recovery Authentication Codes +recovery-code-config-warning-title=These recovery codes won't appear again after leaving this page +recovery-code-config-warning-message=Make sure to print, download, or copy them to a password manager and keep them save. Canceling this setup will remove these recovery codes from your account. +recovery-codes-print=Print +recovery-codes-download=Download +recovery-codes-copy=Copy +recovery-codes-copied=Copied +recovery-codes-confirmation-message=I have saved these codes somewhere safe +recovery-codes-action-complete=Complete setup +recovery-codes-action-cancel=Cancel setup +recovery-codes-download-file-header=Keep these recovery codes somewhere safe. +recovery-codes-download-file-description=Recovery codes are single-use passcodes that allow you to sign in to your account if you do not have access to your authenticator. +recovery-codes-download-file-date=These codes were generated on +recovery-codes-label-default=Recovery codes + +# WebAuthn +webauthn-display-name=Passkey +webauthn-help-text=Use your Passkey to sign in. +webauthn-passwordless-display-name=Passkey +webauthn-passwordless-help-text=Use your Passkey for passwordless sign in. +webauthn-login-title=Passkey login +webauthn-registration-title=Passkey Registration +webauthn-available-authenticators=Available Passkeys +webauthn-unsupported-browser-text=WebAuthn is not supported by this browser. Try another one or contact your administrator. +webauthn-doAuthenticate=Sign in with Passkey +webauthn-createdAt-label=Created +webauthn-registration-init-label=Passkey (Default Label) +webauthn-registration-init-label-prompt=Please input your registered passkey''s label + + +# WebAuthn Error +webauthn-error-title=Passkey Error +webauthn-error-registration=Failed to register your Passkey.
    {0} +webauthn-error-api-get=Failed to authenticate by the Passkey.
    {0} +webauthn-error-different-user=First authenticated user is not the one authenticated by the Passkey. +webauthn-error-auth-verification=Passkey authentication result is invalid.
    {0} +webauthn-error-register-verification=Passkey registration result is invalid.
    {0} +webauthn-error-user-not-found=Unknown user authenticated by the Passkey. + +# Passkey +passkey-login-title=Passkey login +passkey-available-authenticators=Available Passkeys +passkey-unsupported-browser-text=Passkey is not supported by this browser. Try another one or contact your administrator. +passkey-doAuthenticate=Sign in with Passkey +passkey-createdAt-label=Created +passkey-autofill-select=Select your passkey + +# Identity provider +identity-provider-redirector=Connect with another Identity Provider +identity-provider-login-label=Or sign in with +idp-email-verification-display-name=Email Verification +idp-email-verification-help-text=Link your account by validating your email. +idp-username-password-form-display-name=Username and password +idp-username-password-form-help-text=Link your account by logging in. + +finalDeletionConfirmation=If you delete your account, it cannot be restored. To keep your account, click Cancel. +irreversibleAction=This action is irreversible +deleteAccountConfirm=Delete account confirmation + +deletingImplies=Deleting your account implies: +errasingData=Erasing all your data +loggingOutImmediately=Logging you out immediately +accountUnusable=Any subsequent use of the application will not be possible with this account +userDeletedSuccessfully=User deleted successfully + +access-denied=Access denied +access-denied-when-idp-auth=Access denied when authenticating with {0} + +frontchannel-logout.title=Logging out +frontchannel-logout.message=You are logging out from following apps +logoutConfirmTitle=Logging out +logoutConfirmHeader=Do you want to log out? +doLogout=Logout + +readOnlyUsernameMessage=You can''t update your username as it is read-only. +error-invalid-multivalued-size=Attribute {0} must have at least {1} and at most {2} value(s). + +organization.confirm-membership.title=You are about to join organization ${kc.org.name} +organization.confirm-membership=By clicking on the link below, you will become a member of the {0} organization: +organization.member.register.title=Create an account to join the ${kc.org.name} organization diff --git a/services/keycloak/themes/lagoon/login/password-commons.ftl b/services/keycloak/themes/lagoon/login/password-commons.ftl deleted file mode 100644 index 233c781d75..0000000000 --- a/services/keycloak/themes/lagoon/login/password-commons.ftl +++ /dev/null @@ -1,12 +0,0 @@ -<#macro logoutOtherSessions> -
    -
    -
    - -
    -
    -
    - diff --git a/services/keycloak/themes/lagoon/login/register-commons.ftl b/services/keycloak/themes/lagoon/login/register-commons.ftl deleted file mode 100644 index 7007797ee0..0000000000 --- a/services/keycloak/themes/lagoon/login/register-commons.ftl +++ /dev/null @@ -1,27 +0,0 @@ -<#macro termsAcceptance> - <#if termsAcceptanceRequired??> -
    -
    - ${msg("termsTitle")} -
    - ${kcSanitize(msg("termsText"))?no_esc} -
    -
    -
    -
    -
    - - -
    - <#if messagesPerField.existsError('termsAccepted')> -
    - - ${kcSanitize(messagesPerField.get('termsAccepted'))?no_esc} - -
    - -
    - - diff --git a/services/keycloak/themes/lagoon/login/register-user-profile.ftl b/services/keycloak/themes/lagoon/login/register-user-profile.ftl index fe9cdf607f..e0d533b89f 100755 --- a/services/keycloak/themes/lagoon/login/register-user-profile.ftl +++ b/services/keycloak/themes/lagoon/login/register-user-profile.ftl @@ -1,6 +1,5 @@ <#import "template.ftl" as layout> <#import "user-profile-commons.ftl" as userProfileCommons> -<#import "register-commons.ftl" as registerCommons> <@layout.registrationLayout displayMessage=messagesPerField.exists('global') displayRequiredFields=true; section> <#if section = "header"> ${msg("registerTitle")} @@ -50,8 +49,6 @@ - - <@registerCommons.termsAcceptance/> <#if recaptchaRequired??>
    @@ -74,4 +71,4 @@
    - + \ No newline at end of file diff --git a/services/keycloak/themes/lagoon/login/register.ftl b/services/keycloak/themes/lagoon/login/register.ftl index c06de23bab..db50984798 100755 --- a/services/keycloak/themes/lagoon/login/register.ftl +++ b/services/keycloak/themes/lagoon/login/register.ftl @@ -1,6 +1,5 @@ <#import "template.ftl" as layout> -<#import "register-commons.ftl" as registerCommons> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('firstName','lastName','email','username','password','password-confirm','termsAccepted'); section> +<@layout.registrationLayout displayMessage=!messagesPerField.existsError('firstName','lastName','email','username','password','password-confirm'); section> <#if section = "header"> ${msg("registerTitle")} <#elseif section = "form"> @@ -118,8 +117,6 @@
    - <@registerCommons.termsAcceptance/> - <#if recaptchaRequired??>
    @@ -141,4 +138,4 @@
    - + \ No newline at end of file diff --git a/services/keycloak/themes/lagoon/login/resources/css/_login.scss b/services/keycloak/themes/lagoon/login/resources/css/_login.scss new file mode 100644 index 0000000000..5edc032670 --- /dev/null +++ b/services/keycloak/themes/lagoon/login/resources/css/_login.scss @@ -0,0 +1,596 @@ +/* Patternfly CSS places a "bg-login.jpg" as the background on this ".login-pf" class. + This clashes with the "keycloak-bg.png' background defined on the body below. + Therefore the Patternfly background must be set to none. */ + .login-pf { + background: none; +} + +.login-pf body { + background: url("../img/keycloak-bg.png") no-repeat center center fixed; + background-size: cover; + height: 100%; +} + +textarea.pf-c-form-control { + height: auto; +} + +.pf-c-alert__title { + font-size: var(--pf-global--FontSize--xs); +} + +p.instruction { + margin: 5px 0; +} + +.pf-c-button.pf-m-control { + border: solid var(--pf-global--BorderWidth--sm); + border-color: rgba(230, 230, 230, 0.5); +} + +h1#kc-page-title { + margin-top: 10px; +} + +#kc-locale ul { + background-color: var(--pf-global--BackgroundColor--100); + display: none; + top: 20px; + min-width: 100px; + padding: 0; +} + +#kc-locale-dropdown{ + display: inline-block; +} + +#kc-locale-dropdown:hover ul { + display:block; +} + +#kc-locale-dropdown a { + color: var(--pf-global--Color--200); + text-align: right; + font-size: var(--pf-global--FontSize--sm); +} + +a#kc-current-locale-link::after { + content: "\2c5"; + margin-left: var(--pf-global--spacer--xs) +} + +.login-pf .container { + padding-top: 40px; +} + +.login-pf a:hover { + color: #0099d3; +} + +#kc-logo { + width: 100%; +} + +div.kc-logo-text { + background-image: url(../img/keycloak-logo-text.png); + background-repeat: no-repeat; + height: 63px; + width: 300px; + margin: 0 auto; +} + +div.kc-logo-text span { + display: none; +} + +#kc-header { + color: #ededed; + overflow: visible; + white-space: nowrap; +} + +#kc-header-wrapper { + font-size: 29px; + text-transform: uppercase; + letter-spacing: 3px; + line-height: 1.2em; + padding: 62px 10px 20px; + white-space: normal; +} + +#kc-content { + width: 100%; +} + +#kc-attempted-username { + font-size: 20px; + font-family: inherit; + font-weight: normal; + padding-right: 10px; +} + +#kc-username { + text-align: center; + margin-bottom:-10px; +} + +#kc-webauthn-settings-form { + padding-top: 8px; +} + +#kc-form-webauthn .select-auth-box-parent { + pointer-events: none; +} + +#kc-form-webauthn .select-auth-box-desc { + color: var(--pf-global--palette--black-600); +} + +#kc-form-webauthn .select-auth-box-headline { + color: var(--pf-global--Color--300); +} + +#kc-form-webauthn .select-auth-box-icon { + flex: 0 0 3em; +} + +#kc-form-webauthn .select-auth-box-icon-properties { + margin-top: 10px; + font-size: 1.8em; +} + +#kc-form-webauthn .select-auth-box-icon-properties.unknown-transport-class { + margin-top: 3px; +} + +#kc-form-webauthn .pf-l-stack__item { + margin: -1px 0; +} + +#kc-content-wrapper { + margin-top: 20px; +} + +#kc-form-wrapper { + margin-top: 10px; +} + +#kc-info { + margin: 20px -40px -30px; +} + +#kc-info-wrapper { + font-size: 13px; + padding: 15px 35px; + background-color: #F0F0F0; +} + +#kc-form-options span { + display: block; +} + +#kc-form-options .checkbox { + margin-top: 0; + color: #72767b; +} + +#kc-terms-text { + margin-bottom: 20px; +} + +#kc-registration { + margin-bottom: 0; +} + +/* TOTP */ + +.subtitle { + text-align: right; + margin-top: 30px; + color: #909090; +} + +.required { + color: var(--pf-global--danger-color--200); +} + +ol#kc-totp-settings { + margin: 0; + padding-left: 20px; +} + +ul#kc-totp-supported-apps { + margin-bottom: 10px; +} + +#kc-totp-secret-qr-code { + max-width:150px; + max-height:150px; +} + +#kc-totp-secret-key { + background-color: #fff; + color: #333333; + font-size: 16px; + padding: 10px 0; +} + +/* OAuth */ + +#kc-oauth h3 { + margin-top: 0; +} + +#kc-oauth ul { + list-style: none; + padding: 0; + margin: 0; +} + +#kc-oauth ul li { + border-top: 1px solid rgba(255, 255, 255, 0.1); + font-size: 12px; + padding: 10px 0; +} + +#kc-oauth ul li:first-of-type { + border-top: 0; +} + +#kc-oauth .kc-role { + display: inline-block; + width: 50%; +} + +/* Code */ +#kc-code textarea { + width: 100%; + height: 8em; +} + +/* Social */ +.kc-social-links { + margin-top: 20px; +} + +.kc-social-provider-logo { + font-size: 23px; + width: 30px; + height: 25px; + float: left; +} + +.kc-social-gray { + color: var(--pf-global--Color--200); +} + +.kc-social-item { + margin-bottom: var(--pf-global--spacer--sm); + font-size: 15px; + text-align: center; +} + +.kc-social-provider-name { + position: relative; + top: 3px; +} + +.kc-social-icon-text { + left: -15px; +} + +.kc-social-grid { + display:grid; + grid-column-gap: 10px; + grid-row-gap: 5px; + grid-column-end: span 6; + --pf-l-grid__item--GridColumnEnd: span 6; +} + +.kc-social-grid .kc-social-icon-text { + left: -10px; +} + +.kc-login-tooltip { + position: relative; + display: inline-block; +} + +.kc-social-section { + text-align: center; +} + +.kc-social-section hr{ + margin-bottom: 10px +} + +.kc-login-tooltip .kc-tooltip-text{ + top:-3px; + left:160%; + background-color: black; + visibility: hidden; + color: #fff; + + min-width:130px; + text-align: center; + border-radius: 2px; + box-shadow:0 1px 8px rgba(0,0,0,0.6); + padding: 5px; + + position: absolute; + opacity:0; + transition:opacity 0.5s; +} + +/* Show tooltip */ +.kc-login-tooltip:hover .kc-tooltip-text { + visibility: visible; + opacity:0.7; +} + +/* Arrow for tooltip */ +.kc-login-tooltip .kc-tooltip-text::after { + content: " "; + position: absolute; + top: 15px; + right: 100%; + margin-top: -5px; + border-width: 5px; + border-style: solid; + border-color: transparent black transparent transparent; +} + +@media (min-width: 768px) { + #kc-container-wrapper { + position: absolute; + width: 100%; + } + + .login-pf .container { + padding-right: 80px; + } + + #kc-locale { + position: relative; + text-align: right; + z-index: 9999; + } +} + +@media (max-width: 767px) { + + .login-pf body { + background: white; + } + + #kc-header { + padding-left: 15px; + padding-right: 15px; + float: none; + text-align: left; + } + + #kc-header-wrapper { + font-size: 16px; + font-weight: bold; + padding: 20px 60px 0 0; + color: #72767b; + letter-spacing: 0; + } + + div.kc-logo-text { + margin: 0; + width: 150px; + height: 32px; + background-size: 100%; + } + + #kc-form { + float: none; + } + + #kc-info-wrapper { + border-top: 1px solid rgba(255, 255, 255, 0.1); + background-color: transparent; + } + + .login-pf .container { + padding-top: 15px; + padding-bottom: 15px; + } + + #kc-locale { + position: absolute; + width: 200px; + top: 20px; + right: 20px; + text-align: right; + z-index: 9999; + } +} + +@media (min-height: 646px) { + #kc-container-wrapper { + bottom: 12%; + } +} + +@media (max-height: 645px) { + #kc-container-wrapper { + padding-top: 50px; + top: 20%; + } +} + +.card-pf form.form-actions .btn { + float: right; + margin-left: 10px; +} + +#kc-form-buttons { + margin-top: 20px; +} + +.login-pf-page .login-pf-brand { + margin-top: 20px; + max-width: 360px; + width: 40%; +} + +.select-auth-box-arrow{ + display: flex; + align-items: center; + margin-right: 2rem; +} + +.select-auth-box-icon{ + display: flex; + flex: 0 0 2em; + justify-content: center; + margin-right: 1rem; + margin-left: 3rem; +} + +.select-auth-box-parent{ + border-top: 1px solid var(--pf-global--palette--black-200); + padding-top: 1rem; + padding-bottom: 1rem; + cursor: pointer; +} + +.select-auth-box-parent:hover{ + background-color: #f7f8f8; +} + +.select-auth-container { + padding-bottom: 0px !important; +} + +.select-auth-box-headline { + font-size: var(--pf-global--FontSize--md); + color: var(--pf-global--primary-color--100); + font-weight: bold; +} + +.select-auth-box-desc { + font-size: var(--pf-global--FontSize--sm); +} + +.select-auth-box-paragraph { + text-align: center; + font-size: var(--pf-global--FontSize--md); + margin-bottom: 5px; +} + +.card-pf { + margin: 0 auto; + box-shadow: var(--pf-global--BoxShadow--lg); + padding: 0 20px; + max-width: 500px; + border-top: 4px solid; + border-color: var(--pf-global--primary-color--100); +} + +/*phone*/ +@media (max-width: 767px) { + .login-pf-page .card-pf { + max-width: none; + margin-left: 0; + margin-right: 0; + padding-top: 0; + border-top: 0; + box-shadow: 0 0; + } + + .kc-social-grid { + grid-column-end: 12; + --pf-l-grid__item--GridColumnEnd: span 12; + } + + .kc-social-grid .kc-social-icon-text { + left: -15px; + } +} + +.login-pf-page .login-pf-signup { + font-size: 15px; + color: #72767b; +} +#kc-content-wrapper .row { + margin-left: 0; + margin-right: 0; +} + +.login-pf-page.login-pf-page-accounts { + margin-left: auto; + margin-right: auto; +} + +.login-pf-page .btn-primary { + margin-top: 0; +} + +.login-pf-page .list-view-pf .list-group-item { + border-bottom: 1px solid #ededed; +} + +.login-pf-page .list-view-pf-description { + width: 100%; +} + +#kc-form-login div.form-group:last-of-type, +#kc-register-form div.form-group:last-of-type, +#kc-update-profile-form div.form-group:last-of-type, +#kc-update-email-form div.form-group:last-of-type{ + margin-bottom: 0px; +} + +.no-bottom-margin { + margin-bottom: 0; +} + +#kc-back { + margin-top: 5px; +} + +/* Recovery codes */ +.kc-recovery-codes-warning { + margin-bottom: 32px; +} +.kc-recovery-codes-warning .pf-c-alert__description p { + font-size: 0.875rem; +} +.kc-recovery-codes-list { + list-style: none; + columns: 2; + margin: 16px 0; + padding: 16px 16px 8px 16px; + border: 1px solid #D2D2D2; +} +.kc-recovery-codes-list li { + margin-bottom: 8px; + font-size: 11px; +} +.kc-recovery-codes-list li span { + color: #6A6E73; + width: 16px; + text-align: right; + display: inline-block; + margin-right: 1px; +} + +.kc-recovery-codes-actions { + margin-bottom: 24px; +} +.kc-recovery-codes-actions button { + padding-left: 0; +} +.kc-recovery-codes-actions button i { + margin-right: 8px; +} + +.kc-recovery-codes-confirmation { + align-items: baseline; + margin-bottom: 16px; +} +/* End Recovery codes */ diff --git a/services/keycloak/themes/lagoon/login/resources/css/styles.css b/services/keycloak/themes/lagoon/login/resources/css/styles.css index 8f27cbf6c9..b9cbee6d67 100644 --- a/services/keycloak/themes/lagoon/login/resources/css/styles.css +++ b/services/keycloak/themes/lagoon/login/resources/css/styles.css @@ -1,3 +1,588 @@ +@charset "UTF-8"; +/* Patternfly CSS places a "bg-login.jpg" as the background on this ".login-pf" class. + This clashes with the "keycloak-bg.png' background defined on the body below. + Therefore the Patternfly background must be set to none. */ +.login-pf { + background: none; +} + +.login-pf body { + background: url("../img/keycloak-bg.png") no-repeat center center fixed; + background-size: cover; + height: 100%; +} + +textarea.pf-c-form-control { + height: auto; +} + +.pf-c-alert__title { + font-size: var(--pf-global--FontSize--xs); +} + +p.instruction { + margin: 5px 0; +} + +.pf-c-button.pf-m-control { + border: solid var(--pf-global--BorderWidth--sm); + border-color: rgba(230, 230, 230, 0.5); +} + +h1#kc-page-title { + margin-top: 10px; +} + +#kc-locale ul { + background-color: var(--pf-global--BackgroundColor--100); + display: none; + top: 20px; + min-width: 100px; + padding: 0; +} + +#kc-locale-dropdown { + display: inline-block; +} + +#kc-locale-dropdown:hover ul { + display: block; +} + +#kc-locale-dropdown a { + color: var(--pf-global--Color--200); + text-align: right; + font-size: var(--pf-global--FontSize--sm); +} + +a#kc-current-locale-link::after { + content: "˅"; + margin-left: var(--pf-global--spacer--xs); +} + +.login-pf .container { + padding-top: 40px; +} + +.login-pf a:hover { + color: #0099d3; +} + +#kc-logo { + width: 100%; +} + +div.kc-logo-text { + background-image: url(../img/keycloak-logo-text.png); + background-repeat: no-repeat; + height: 63px; + width: 300px; + margin: 0 auto; +} + +div.kc-logo-text span { + display: none; +} + +#kc-header { + color: #ededed; + overflow: visible; + white-space: nowrap; +} + +#kc-header-wrapper { + font-size: 29px; + text-transform: uppercase; + letter-spacing: 3px; + line-height: 1.2em; + padding: 62px 10px 20px; + white-space: normal; +} + +#kc-content { + width: 100%; +} + +#kc-attempted-username { + font-size: 20px; + font-family: inherit; + font-weight: normal; + padding-right: 10px; +} + +#kc-username { + text-align: center; + margin-bottom: -10px; +} + +#kc-webauthn-settings-form { + padding-top: 8px; +} + +#kc-form-webauthn .select-auth-box-parent { + pointer-events: none; +} + +#kc-form-webauthn .select-auth-box-desc { + color: var(--pf-global--palette--black-600); +} + +#kc-form-webauthn .select-auth-box-headline { + color: var(--pf-global--Color--300); +} + +#kc-form-webauthn .select-auth-box-icon { + flex: 0 0 3em; +} + +#kc-form-webauthn .select-auth-box-icon-properties { + margin-top: 10px; + font-size: 1.8em; +} + +#kc-form-webauthn .select-auth-box-icon-properties.unknown-transport-class { + margin-top: 3px; +} + +#kc-form-webauthn .pf-l-stack__item { + margin: -1px 0; +} + +#kc-content-wrapper { + margin-top: 20px; +} + +#kc-form-wrapper { + margin-top: 10px; +} + +#kc-info { + margin: 20px -40px -30px; +} + +#kc-info-wrapper { + font-size: 13px; + padding: 15px 35px; + background-color: #F0F0F0; +} + +#kc-form-options span { + display: block; +} + +#kc-form-options .checkbox { + margin-top: 0; + color: #72767b; +} + +#kc-terms-text { + margin-bottom: 20px; +} + +#kc-registration { + margin-bottom: 0; +} + +/* TOTP */ +.subtitle { + text-align: right; + margin-top: 30px; + color: #909090; +} + +.required { + color: var(--pf-global--danger-color--200); +} + +ol#kc-totp-settings { + margin: 0; + padding-left: 20px; +} + +ul#kc-totp-supported-apps { + margin-bottom: 10px; +} + +#kc-totp-secret-qr-code { + max-width: 150px; + max-height: 150px; +} + +#kc-totp-secret-key { + background-color: #fff; + color: #333333; + font-size: 16px; + padding: 10px 0; +} + +/* OAuth */ +#kc-oauth h3 { + margin-top: 0; +} + +#kc-oauth ul { + list-style: none; + padding: 0; + margin: 0; +} + +#kc-oauth ul li { + border-top: 1px solid rgba(255, 255, 255, 0.1); + font-size: 12px; + padding: 10px 0; +} + +#kc-oauth ul li:first-of-type { + border-top: 0; +} + +#kc-oauth .kc-role { + display: inline-block; + width: 50%; +} + +/* Code */ +#kc-code textarea { + width: 100%; + height: 8em; +} + +/* Social */ +.kc-social-links { + margin-top: 20px; +} + +.kc-social-provider-logo { + font-size: 23px; + width: 30px; + height: 25px; + float: left; +} + +.kc-social-gray { + color: var(--pf-global--Color--200); +} + +.kc-social-item { + margin-bottom: var(--pf-global--spacer--sm); + font-size: 15px; + text-align: center; +} + +.kc-social-provider-name { + position: relative; + top: 3px; +} + +.kc-social-icon-text { + left: -15px; +} + +.kc-social-grid { + display: grid; + grid-column-gap: 10px; + grid-row-gap: 5px; + grid-column-end: span 6; + --pf-l-grid__item--GridColumnEnd: span 6; +} + +.kc-social-grid .kc-social-icon-text { + left: -10px; +} + +.kc-login-tooltip { + position: relative; + display: inline-block; +} + +.kc-social-section { + text-align: center; +} + +.kc-social-section hr { + margin-bottom: 10px; +} + +.kc-login-tooltip .kc-tooltip-text { + top: -3px; + left: 160%; + background-color: black; + visibility: hidden; + color: #fff; + min-width: 130px; + text-align: center; + border-radius: 2px; + box-shadow: 0 1px 8px rgba(0, 0, 0, 0.6); + padding: 5px; + position: absolute; + opacity: 0; + transition: opacity 0.5s; +} + +/* Show tooltip */ +.kc-login-tooltip:hover .kc-tooltip-text { + visibility: visible; + opacity: 0.7; +} + +/* Arrow for tooltip */ +.kc-login-tooltip .kc-tooltip-text::after { + content: " "; + position: absolute; + top: 15px; + right: 100%; + margin-top: -5px; + border-width: 5px; + border-style: solid; + border-color: transparent black transparent transparent; +} + +@media (min-width: 768px) { + #kc-container-wrapper { + position: absolute; + width: 100%; + } + .login-pf .container { + padding-right: 80px; + } + #kc-locale { + position: relative; + text-align: right; + z-index: 9999; + } +} +@media (max-width: 767px) { + .login-pf body { + background: white; + } + #kc-header { + padding-left: 15px; + padding-right: 15px; + float: none; + text-align: left; + } + #kc-header-wrapper { + font-size: 16px; + font-weight: bold; + padding: 20px 60px 0 0; + color: #72767b; + letter-spacing: 0; + } + div.kc-logo-text { + margin: 0; + width: 150px; + height: 32px; + background-size: 100%; + } + #kc-form { + float: none; + } + #kc-info-wrapper { + border-top: 1px solid rgba(255, 255, 255, 0.1); + background-color: transparent; + } + .login-pf .container { + padding-top: 15px; + padding-bottom: 15px; + } + #kc-locale { + position: absolute; + width: 200px; + top: 20px; + right: 20px; + text-align: right; + z-index: 9999; + } +} +@media (min-height: 646px) { + #kc-container-wrapper { + bottom: 12%; + } +} +@media (max-height: 645px) { + #kc-container-wrapper { + padding-top: 50px; + top: 20%; + } +} +.card-pf form.form-actions .btn { + float: right; + margin-left: 10px; +} + +#kc-form-buttons { + margin-top: 20px; +} + +.login-pf-page .login-pf-brand { + margin-top: 20px; + max-width: 360px; + width: 40%; +} + +.select-auth-box-arrow { + display: flex; + align-items: center; + margin-right: 2rem; +} + +.select-auth-box-icon { + display: flex; + flex: 0 0 2em; + justify-content: center; + margin-right: 1rem; + margin-left: 3rem; +} + +.select-auth-box-parent { + border-top: 1px solid var(--pf-global--palette--black-200); + padding-top: 1rem; + padding-bottom: 1rem; + cursor: pointer; +} + +.select-auth-box-parent:hover { + background-color: #f7f8f8; +} + +.select-auth-container { + padding-bottom: 0px !important; +} + +.select-auth-box-headline { + font-size: var(--pf-global--FontSize--md); + color: var(--pf-global--primary-color--100); + font-weight: bold; +} + +.select-auth-box-desc { + font-size: var(--pf-global--FontSize--sm); +} + +.select-auth-box-paragraph { + text-align: center; + font-size: var(--pf-global--FontSize--md); + margin-bottom: 5px; +} + +.card-pf { + margin: 0 auto; + box-shadow: var(--pf-global--BoxShadow--lg); + padding: 0 20px; + max-width: 500px; + border-top: 4px solid; + border-color: var(--pf-global--primary-color--100); +} + +/*phone*/ +@media (max-width: 767px) { + .login-pf-page .card-pf { + max-width: none; + margin-left: 0; + margin-right: 0; + padding-top: 0; + border-top: 0; + box-shadow: 0 0; + } + .kc-social-grid { + grid-column-end: 12; + --pf-l-grid__item--GridColumnEnd: span 12; + } + .kc-social-grid .kc-social-icon-text { + left: -15px; + } +} +.login-pf-page .login-pf-signup { + font-size: 15px; + color: #72767b; +} + +#kc-content-wrapper .row { + margin-left: 0; + margin-right: 0; +} + +.login-pf-page.login-pf-page-accounts { + margin-left: auto; + margin-right: auto; +} + +.login-pf-page .btn-primary { + margin-top: 0; +} + +.login-pf-page .list-view-pf .list-group-item { + border-bottom: 1px solid #ededed; +} + +.login-pf-page .list-view-pf-description { + width: 100%; +} + +#kc-form-login div.form-group:last-of-type, +#kc-register-form div.form-group:last-of-type, +#kc-update-profile-form div.form-group:last-of-type, +#kc-update-email-form div.form-group:last-of-type { + margin-bottom: 0px; +} + +.no-bottom-margin { + margin-bottom: 0; +} + +#kc-back { + margin-top: 5px; +} + +/* Recovery codes */ +.kc-recovery-codes-warning { + margin-bottom: 32px; +} + +.kc-recovery-codes-warning .pf-c-alert__description p { + font-size: 0.875rem; +} + +.kc-recovery-codes-list { + list-style: none; + -moz-columns: 2; + columns: 2; + margin: 16px 0; + padding: 16px 16px 8px 16px; + border: 1px solid #D2D2D2; +} + +.kc-recovery-codes-list li { + margin-bottom: 8px; + font-size: 11px; +} + +.kc-recovery-codes-list li span { + color: #6A6E73; + width: 16px; + text-align: right; + display: inline-block; + margin-right: 1px; +} + +.kc-recovery-codes-actions { + margin-bottom: 24px; +} + +.kc-recovery-codes-actions button { + padding-left: 0; +} + +.kc-recovery-codes-actions button i { + margin-right: 8px; +} + +.kc-recovery-codes-confirmation { + align-items: baseline; + margin-bottom: 16px; +} + +/* End Recovery codes */ body, html { display: flex; flex-direction: column; @@ -16,17 +601,17 @@ body { margin: 0; } -header.header { +nav.header { background: linear-gradient(to right, rgb(36, 174, 196) 0%, rgb(42, 109, 254) 25%); display: flex; justify-content: space-between; } -header.header a { +nav.header a { background: rgb(69, 120, 230); position: relative; padding: 10px 20px; } -header.header a:after { +nav.header a:after { background: rgb(69, 120, 230); -webkit-clip-path: polygon(0px 0px, 100% 0px, 0px 105%, 0px 100%); clip-path: polygon(0px 0px, 100% 0px, 0px 105%, 0px 100%); @@ -38,7 +623,7 @@ header.header a:after { top: 0px; width: 14px; } -header.header a img { +nav.header a img { display: block; height: 35px; width: auto; @@ -55,20 +640,11 @@ header.header a img { z-index: 0; } -.kc-content { - height: 100%; - padding: 0; - margin: 0; - display: flex; - align-items: center; - justify-content: center; -} -.kc-content .kc-content-wrapper { - background-size: cover; - background-position: center; - display: flex; - justify-content: center; - flex-direction: column; +.kc { + left: 50%; + top: 25%; + transform: translate(-50%); + height: auto; width: 440px; background-color: #ffffff; box-shadow: 4px 8px 13px 0px rgba(0, 0, 0, 0.03); @@ -76,11 +652,11 @@ header.header a img { padding: 32px; z-index: 1; } -.kc-content .kc-content-wrapper h1 { +.kc h1 { color: #4578E6; font-size: 24px; } -.kc-content .kc-content-wrapper form { +.kc .kc-wrapper form { margin: 24px 0 0; font-style: normal; font-stretch: normal; @@ -88,33 +664,34 @@ header.header a img { letter-spacing: normal; font-family: source-sans-pro, sans-serif; } -.kc-content .kc-content-wrapper form label { +.kc .kc-wrapper form label { display: block; - margin-bottom: 8px; + margin-bottom: 2px; + margin-top: 16px; } -.kc-content .kc-content-wrapper form label .required { +.kc .kc-wrapper form label .required { color: #b8082a; } -.kc-content .kc-content-wrapper form input { +.kc .kc-wrapper form input { width: 360px; - height: 24px; + height: 50px; color: #000000; border: 1px solid #ccc; outline: none; background-color: #fff; padding: 8px; } -.kc-content .kc-content-wrapper form input:focus { +.kc .kc-wrapper form input:focus { border: 1px solid #4578E6; } -.kc-content .kc-content-wrapper form input[type=checkbox] { +.kc .kc-wrapper form input[type=checkbox] { width: auto; padding: 0; height: auto; } -.kc-content .kc-content-wrapper form input.saveTOTPBtn { +.kc .kc-wrapper form input.saveTOTPBtn, .kc .kc-wrapper form input#saveTOTPBtn, .kc .kc-wrapper form input#registerWebAuthn, .kc .kc-wrapper form input#kc-try-again { width: auto; - height: 40px; + height: 50px; padding: 12px 32px; background-color: #4578E6; font-family: source-sans-pro, sans-serif; @@ -124,11 +701,11 @@ header.header a img { margin: 24px 0 0; border: 1px #4578E6 solid; } -.kc-content .kc-content-wrapper form input.saveTOTPBtn:hover { +.kc .kc-wrapper form input.saveTOTPBtn:hover, .kc .kc-wrapper form input#saveTOTPBtn:hover, .kc .kc-wrapper form input#registerWebAuthn:hover, .kc .kc-wrapper form input#kc-try-again:hover { color: #4578E6; background-color: #ffffff; } -.kc-content .kc-content-wrapper form button.cancelTOTPBtn { +.kc .kc-wrapper form button.cancelTOTPBtn, .kc .kc-wrapper form button#cancelTOTPBtn, .kc .kc-wrapper form button#cancelWebAuthnAIA { width: auto; height: 40px; padding: 12px 32px; @@ -140,43 +717,43 @@ header.header a img { margin: 24px 0 0; border: 1px #333 solid; } -.kc-content .kc-content-wrapper form button.cancelTOTPBtn:hover { +.kc .kc-wrapper form button.cancelTOTPBtn:hover, .kc .kc-wrapper form button#cancelTOTPBtn:hover, .kc .kc-wrapper form button#cancelWebAuthnAIA:hover { color: #333; background-color: #ffffff; } -.kc-content .kc-content-wrapper form .username_wapper { +.kc .kc-wrapper form .username_wapper { margin-bottom: 18px; } -.kc-content .kc-content-wrapper form .input-error, .kc-content .kc-content-wrapper form #input-error { +.kc .kc-wrapper form .input-error, .kc .kc-wrapper form #input-error { color: #b8082a; display: block; margin: 8px 0; font-size: 16px; } -.kc-content .kc-content-wrapper form .options_wrapper { +.kc .kc-wrapper form .options_wrapper { display: flex; flex-direction: row; margin-top: 18px; } -.kc-content .kc-content-wrapper form .options_wrapper #kc-form-options { +.kc .kc-wrapper form .options_wrapper #kc-form-options { margin-right: 18px; } -.kc-content .kc-content-wrapper form .options_wrapper #kc-form-options input#rememberMe { +.kc .kc-wrapper form .options_wrapper #kc-form-options input#rememberMe { width: auto; height: auto; } -.kc-content .kc-content-wrapper form .options_wrapper #kc-form-options a { +.kc .kc-wrapper form .options_wrapper #kc-form-options a { color: #4578E6; } -.kc-content .kc-content-wrapper form .options_wrapper a { +.kc .kc-wrapper form .options_wrapper a { color: #4578E6; } -.kc-content .kc-content-wrapper form a { +.kc .kc-wrapper form a { color: #4578E6; } -.kc-content .kc-content-wrapper form .submit_btn { +.kc .kc-wrapper form .submit_btn { width: auto; - height: 40px; + height: 50px; padding: 12px 32px; background-color: #4578E6; font-family: source-sans-pro, sans-serif; @@ -186,13 +763,13 @@ header.header a img { margin: 24px 0 0; border: 1px #4578E6 solid; } -.kc-content .kc-content-wrapper form .submit_btn:hover { +.kc .kc-wrapper form .submit_btn:hover { color: #4578E6; background-color: #ffffff; } -.kc-content .kc-content-wrapper form #kc-form-buttons input { +.kc .kc-wrapper form #kc-form-buttons input { width: auto; - height: 40px; + height: 50px; padding: 12px 32px; background-color: #4578E6; font-family: source-sans-pro, sans-serif; @@ -202,11 +779,11 @@ header.header a img { margin: 24px 0 0; border: 1px #4578E6 solid; } -.kc-content .kc-content-wrapper form #kc-form-buttons input:hover { +.kc .kc-wrapper form #kc-form-buttons input:hover { color: #4578E6; background-color: #ffffff; } -.kc-content .kc-content-wrapper form input[type=button] { +.kc .kc-wrapper form input[type=button] { width: auto; height: 40px; padding: 12px 32px; @@ -218,11 +795,14 @@ header.header a img { margin: 24px 0 0; border: 1px #4578E6 solid; } -.kc-content .kc-content-wrapper form input[type=button]:hover { +.kc .kc-wrapper form input[type=button]:hover { color: #4578E6; background-color: #ffffff; } -.kc-content .kc-content-wrapper input[type=button] { +.kc .kc-wrapper form .required { + color: red; +} +.kc .kc-wrapper input[type=button] { width: auto; height: 40px; padding: 12px 32px; @@ -234,24 +814,24 @@ header.header a img { margin: 24px 0 0; border: 1px #4578E6 solid; } -.kc-content .kc-content-wrapper input[type=button]:hover { +.kc .kc-wrapper input[type=button]:hover { color: #4578E6; background-color: #ffffff; } -.kc-content .kc-content-wrapper #kc-social-providers hr { +.kc .kc-wrapper #kc-social-providers hr { margin-top: 20px; } -.kc-content .kc-content-wrapper #kc-social-providers ul { +.kc .kc-wrapper #kc-social-providers ul { padding-left: 0; } -.kc-content .kc-content-wrapper #kc-social-providers li::marker { +.kc .kc-wrapper #kc-social-providers li::marker { content: ""; } -.kc-content .kc-content-wrapper #kc-social-providers h4 { +.kc .kc-wrapper #kc-social-providers h4 { color: #4578E6; font-size: 20px; } -.kc-content .kc-content-wrapper #kc-social-providers a { +.kc .kc-wrapper #kc-social-providers a { width: auto; height: 40px; padding: 12px 32px; @@ -264,10 +844,26 @@ header.header a img { border: 1px #4578E6 solid; text-decoration: none; } -.kc-content .kc-content-wrapper #kc-social-providers a span { +.kc .kc-wrapper #kc-social-providers a span { text-decoration: none; } -.kc-content .kc-content-wrapper #kc-social-providers a:hover { +.kc .kc-wrapper #kc-social-providers a:hover { + color: #4578E6; + background-color: #ffffff; +} +.kc .kc-wrapper input#registerWebAuthn, .kc .kc-wrapper input#authenticateWebAuthnButton { + width: auto; + height: 50px; + padding: 12px 32px; + background-color: #4578E6; + font-family: source-sans-pro, sans-serif; + font-size: 14px; + text-align: center; + color: #ffffff; + margin: 24px 0 0; + border: 1px #4578E6 solid; +} +.kc .kc-wrapper input#registerWebAuthn:hover, .kc .kc-wrapper input#authenticateWebAuthnButton:hover { color: #4578E6; background-color: #ffffff; }/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/services/keycloak/themes/lagoon/login/resources/css/styles.css.map b/services/keycloak/themes/lagoon/login/resources/css/styles.css.map index 90e6218006..6b47c38bcd 100644 --- a/services/keycloak/themes/lagoon/login/resources/css/styles.css.map +++ b/services/keycloak/themes/lagoon/login/resources/css/styles.css.map @@ -1 +1 @@ -{"version":3,"sources":["styles.scss","styles.css"],"names":[],"mappings":"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","file":"styles.css"} \ No newline at end of file +{"version":3,"sources":["styles.css","_login.scss","styles.scss"],"names":[],"mappings":"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","file":"styles.css"} \ No newline at end of file diff --git a/services/keycloak/themes/lagoon/login/resources/css/styles.scss b/services/keycloak/themes/lagoon/login/resources/css/styles.scss index 005f85acaa..334d47264f 100644 --- a/services/keycloak/themes/lagoon/login/resources/css/styles.scss +++ b/services/keycloak/themes/lagoon/login/resources/css/styles.scss @@ -2,6 +2,7 @@ $brand: #4578E6; $white: #ffffff; $black: #000000; +@import "_login"; body, html { display: flex; @@ -21,7 +22,7 @@ body { margin: 0; } -header.header{ +nav.header{ background: linear-gradient(to right, rgba(36, 174, 196, 1) 0%, rgba(42, 109, 254, 1) 25%); display: flex; justify-content: space-between; @@ -63,31 +64,26 @@ header.header{ z-index: 0; } -.kc-content { - height: 100%; - padding: 0; - margin: 0; - display: flex; - align-items: center; - justify-content: center; - - .kc-content-wrapper{ - background-size:cover; - background-position:center;; - display:flex; - justify-content:center; - flex-direction:column; - width: 440px; - background-color: #ffffff; - box-shadow: 4px 8px 13px 0px rgba(0, 0, 0, 0.03); - position: relative; - padding: 32px; - z-index: 1; +.kc { + left: 50%; + top: 25%; + transform: translate(-50%); + height: auto; + width: 440px; + background-color: #ffffff; + box-shadow: 4px 8px 13px 0px rgba(0, 0, 0, 0.03); + position: relative; + padding: 32px; + z-index: 1; + + h1{ + color: $brand; + font-size: 24px; + } - h1{ - color: $brand; - font-size: 24px; - } + + + .kc-wrapper{ form{ margin: 24px 0 0; @@ -99,7 +95,8 @@ header.header{ label{ display: block; - margin-bottom: 8px; + margin-bottom: 2px; + margin-top: 16px; .required{ color: #b8082a; @@ -108,7 +105,7 @@ header.header{ input{ width: 360px; - height: 24px; + height: 50px; color: #000000; border: 1px solid #ccc; outline: none; @@ -126,9 +123,9 @@ header.header{ height: auto; } - input.saveTOTPBtn{ + input.saveTOTPBtn, input#saveTOTPBtn, input#registerWebAuthn, input#kc-try-again{ width: auto; - height: 40px; + height: 50px; padding: 12px 32px; background-color: $brand; font-family: source-sans-pro, sans-serif; @@ -144,7 +141,7 @@ header.header{ } } - button.cancelTOTPBtn{ + button.cancelTOTPBtn, button#cancelTOTPBtn, button#cancelWebAuthnAIA { width: auto; height: 40px; padding: 12px 32px; @@ -163,7 +160,6 @@ header.header{ } - .username_wapper{ margin-bottom: 18px; } @@ -204,7 +200,7 @@ header.header{ // Buttons .submit_btn{ width: auto; - height: 40px; + height: 50px; padding: 12px 32px; background-color: $brand; font-family: source-sans-pro, sans-serif; @@ -223,7 +219,7 @@ header.header{ #kc-form-buttons{ input{ width: auto; - height: 40px; + height: 50px; padding: 12px 32px; background-color: $brand; font-family: source-sans-pro, sans-serif; @@ -256,6 +252,10 @@ header.header{ background-color: $white; } } + + .required{ + color: red; + } } input[type="button"]{ @@ -318,9 +318,29 @@ header.header{ } } } + + input#registerWebAuthn, input#authenticateWebAuthnButton{ + width: auto; + height: 50px; + padding: 12px 32px; + background-color: $brand; + font-family: source-sans-pro, sans-serif; + font-size: 14px; + text-align: center; + color: #ffffff; + margin: 24px 0 0; + border: 1px $brand solid; + + &:hover{ + color: $brand; + background-color: $white; + } + } } } + + diff --git a/services/keycloak/themes/lagoon/login/template.bak b/services/keycloak/themes/lagoon/login/template.bak deleted file mode 100644 index 8b9efa1cb0..0000000000 --- a/services/keycloak/themes/lagoon/login/template.bak +++ /dev/null @@ -1,161 +0,0 @@ -<#macro registrationLayout bodyClass="" displayInfo=false displayMessage=true displayRequiredFields=false> - - lang="${locale.currentLanguageTag}"> - - - - - - - <#if properties.meta?has_content> - <#list properties.meta?split(' ') as meta> - - - - ${msg("loginTitle",(realm.displayName!''))} - - <#if properties.stylesCommon?has_content> - <#list properties.stylesCommon?split(' ') as style> - - - - <#if properties.styles?has_content> - <#list properties.styles?split(' ') as style> - - - - <#if properties.scripts?has_content> - <#list properties.scripts?split(' ') as script> - - - - <#if scripts??> - <#list scripts as script> - - - - - -
    - - Home logo - -
    - - -<#--
    --> - <#--
    -
    ${kcSanitize(msg("loginTitleHtml",(realm.displayNameHtml!'')))?no_esc}
    -
    --> - <#--
    --> - <#--
    - <#if realm.internationalizationEnabled && locale.supported?size gt 1> -
    -
    -
    - ${locale.current} -
      - <#list locale.supported as l> -
    • - ${l.label} -
    • - -
    -
    -
    -
    - - <#if !(auth?has_content && auth.showUsername() && !auth.showResetCredentials())> - <#if displayRequiredFields> -
    -
    - * ${msg("requiredFields")} -
    -
    -

    <#nested "header">

    -
    -
    - <#else> -

    <#nested "header">

    - - <#else> - <#if displayRequiredFields> -
    -
    - * ${msg("requiredFields")} -
    -
    - <#nested "show-username"> -
    - - - - -
    -
    -
    - <#else> - <#nested "show-username"> -
    - - - - -
    - - -
    --> - -
    -
    - - <#-- App-initiated actions should not see warning messages about the need to complete the action --> - <#-- during login. --> - <#if displayMessage && message?has_content && (message.type != 'warning' || !isAppInitiatedAction??)> -
    -
    - <#if message.type = 'success'> - <#if message.type = 'warning'> - <#if message.type = 'error'> - <#if message.type = 'info'> -
    - ${kcSanitize(message.summary)?no_esc} -
    - - - <#nested "form"> - - <#if auth?has_content && auth.showTryAnotherWayLink()> -
    - -
    - - - <#nested "socialProviders"> - - <#if displayInfo> -
    -
    - <#nested "info"> -
    -
    - -
    -
    - <#--
    --> - <#--
    --> -
    - - - diff --git a/services/keycloak/themes/lagoon/login/template.ftl b/services/keycloak/themes/lagoon/login/template.ftl index 8b9efa1cb0..ad503ff9ed 100644 --- a/services/keycloak/themes/lagoon/login/template.ftl +++ b/services/keycloak/themes/lagoon/login/template.ftl @@ -1,13 +1,13 @@ <#macro registrationLayout bodyClass="" displayInfo=false displayMessage=true displayRequiredFields=false> - lang="${locale.currentLanguageTag}"> + lang="${locale.currentLanguageTag}" dir="${(locale.rtl)?then('rtl','ltr')}"> - <#if properties.meta?has_content> + <#if properties.meta?has_content> <#list properties.meta?split(' ') as meta> @@ -36,30 +36,33 @@ -
    + +
    + -<#--
    --> +
    <#--
    ${kcSanitize(msg("loginTitleHtml",(realm.displayNameHtml!'')))?no_esc}
    --> - <#--
    --> - <#--
    +
    +
    <#if realm.internationalizationEnabled && locale.supported?size gt 1>
    -
    - ${locale.current} -
      + @@ -111,10 +114,9 @@
    -
    --> - -
    -
    +
    +
    +
    <#-- App-initiated actions should not see warning messages about the need to complete the action --> <#-- during login. --> @@ -126,7 +128,7 @@ <#if message.type = 'error'> <#if message.type = 'info'>
    - ${kcSanitize(message.summary)?no_esc} + ${kcSanitize(message.summary)?no_esc}
    @@ -153,8 +155,9 @@
    - <#--
    --> - <#--
    --> + +
    +
    diff --git a/services/keycloak/themes/lagoon/login/theme.properties b/services/keycloak/themes/lagoon/login/theme.properties index 93bb861112..6ce902ad52 100644 --- a/services/keycloak/themes/lagoon/login/theme.properties +++ b/services/keycloak/themes/lagoon/login/theme.properties @@ -1,3 +1,62 @@ parent=base import=common/keycloak -styles=css/styles.css \ No newline at end of file +styles=css/styles.css + +stylesCommon=web_modules/@patternfly/react-core/dist/styles/base.css web_modules/@patternfly/react-core/dist/styles/app.css node_modules/patternfly/dist/css/patternfly.min.css node_modules/patternfly/dist/css/patternfly-additions.min.css lib/pficon/pficon.css + + +# WebAuthn icons +kcWebAuthnKeyIcon=pficon pficon-key +kcWebAuthnDefaultIcon=pficon pficon-key +kcWebAuthnUnknownIcon=pficon pficon-key unknown-transport-class +kcWebAuthnUSB=fa fa-usb +kcWebAuthnNFC=fa fa-wifi +kcWebAuthnBLE=fa fa-bluetooth-b +kcWebAuthnInternal=pficon pficon-key + + +##### css classes for select-authenticator form +kcSelectAuthListClass=pf-l-stack select-auth-container +kcSelectAuthListItemClass=pf-l-stack__item select-auth-box-parent pf-l-split +kcSelectAuthListItemIconClass=pf-l-split__item select-auth-box-icon +kcSelectAuthListItemIconPropertyClass=fa-2x select-auth-box-icon-properties +kcSelectAuthListItemBodyClass=pf-l-split__item pf-l-stack +kcSelectAuthListItemHeadingClass=pf-l-stack__item select-auth-box-headline pf-c-title +kcSelectAuthListItemDescriptionClass=pf-l-stack__item select-auth-box-desc +kcSelectAuthListItemFillClass=pf-l-split__item pf-m-fill +kcSelectAuthListItemArrowClass=pf-l-split__item select-auth-box-arrow +kcSelectAuthListItemArrowIconClass=fa fa-angle-right fa-lg +kcSelectAuthListItemTitle=select-auth-box-paragraph + +##### css classes for the authenticators +kcAuthenticatorDefaultClass=fa fa-list list-view-pf-icon-lg +kcAuthenticatorPasswordClass=fa fa-unlock list-view-pf-icon-lg +kcAuthenticatorOTPClass=fa fa-mobile list-view-pf-icon-lg +kcAuthenticatorWebAuthnClass=fa fa-key list-view-pf-icon-lg +kcAuthenticatorWebAuthnPasswordlessClass=fa fa-key list-view-pf-icon-lg + +##### css classes for the OTP Login Form +kcLoginOTPListClass=pf-c-tile +kcLoginOTPListInputClass=pf-c-tile__input +kcLoginOTPListItemHeaderClass=pf-c-tile__header +kcLoginOTPListItemIconBodyClass=pf-c-tile__icon +kcLoginOTPListItemIconClass=fa fa-mobile +kcLoginOTPListItemTitleClass=pf-c-tile__title + +##### css classes for identity providers logos +kcCommonLogoIdP=kc-social-provider-logo kc-social-gray + + +## Recovery codes +kcRecoveryCodesWarning=kc-recovery-codes-warning +kcRecoveryCodesList=kc-recovery-codes-list +kcRecoveryCodesActions=kc-recovery-codes-actions +kcRecoveryCodesConfirmation=kc-recovery-codes-confirmation +kcCheckClass=pf-c-check +kcCheckInputClass=pf-c-check__input +kcCheckLabelClass=pf-c-check__label + +## Password visibility +kcFormPasswordVisibilityButtonClass=pf-c-button pf-m-control +kcFormPasswordVisibilityIconShow=fa fa-eye +kcFormPasswordVisibilityIconHide=fa fa-eye-slash diff --git a/services/keycloak/themes/lagoon/login/update-email.ftl b/services/keycloak/themes/lagoon/login/update-email.ftl index 7edb4323df..4c85e5b5da 100644 --- a/services/keycloak/themes/lagoon/login/update-email.ftl +++ b/services/keycloak/themes/lagoon/login/update-email.ftl @@ -1,9 +1,8 @@ <#import "template.ftl" as layout> - <@layout.registrationLayout displayMessage=!messagesPerField.existsError('email'); section> - - <#if section = "form"> -

    ${msg("updateEmailTitle")}

    + <#if section = "header"> + ${msg("updateEmailTitle")} + <#elseif section = "form">
    @@ -29,17 +28,6 @@
    -
    -
    -
    - -
    -
    -
    -
    <#if isAppInitiatedAction??> diff --git a/services/keycloak/themes/lagoon/login/update-user-profile.ftl b/services/keycloak/themes/lagoon/login/update-user-profile.ftl index 505cb3b10b..e09f5c3884 100755 --- a/services/keycloak/themes/lagoon/login/update-user-profile.ftl +++ b/services/keycloak/themes/lagoon/login/update-user-profile.ftl @@ -1,9 +1,9 @@ <#import "template.ftl" as layout> <#import "user-profile-commons.ftl" as userProfileCommons> <@layout.registrationLayout displayMessage=messagesPerField.exists('global') displayRequiredFields=true; section> - - <#if section = "form"> -

    ${msg("loginProfileTitle")}

    + <#if section = "header"> + ${msg("loginProfileTitle")} + <#elseif section = "form"> <@userProfileCommons.userProfileFormFields/> diff --git a/services/keycloak/themes/lagoon/login/webauthn-register.ftl b/services/keycloak/themes/lagoon/login/webauthn-register.ftl index e0eff2256c..1b339a718e 100644 --- a/services/keycloak/themes/lagoon/login/webauthn-register.ftl +++ b/services/keycloak/themes/lagoon/login/webauthn-register.ftl @@ -1,6 +1,4 @@ <#import "template.ftl" as layout> - <#import "password-commons.ftl" as passwordCommons> - <@layout.registrationLayout; section> <#if section = "title"> title @@ -17,7 +15,6 @@ - <@passwordCommons.logoutOtherSessions/>
    @@ -39,7 +36,7 @@ let userid = "${userid}"; let username = "${username}"; - let signatureAlgorithms =[<#list signatureAlgorithms as sigAlg>${sigAlg},] + let signatureAlgorithms = "${signatureAlgorithms}"; let pubKeyCredParams = getPubKeyCredParams(signatureAlgorithms); let rpEntityName = "${rpEntityName}"; @@ -131,12 +128,13 @@ }); } - function getPubKeyCredParams(signatureAlgorithmsList) { + function getPubKeyCredParams(signatureAlgorithms) { let pubKeyCredParams = []; - if (signatureAlgorithmsList === []) { + if (signatureAlgorithms === "") { pubKeyCredParams.push({type: "public-key", alg: -7}); return pubKeyCredParams; } + let signatureAlgorithmsList = signatureAlgorithms.split(','); for (let i = 0; i < signatureAlgorithmsList.length; i++) { pubKeyCredParams.push({ @@ -191,4 +189,4 @@ - + \ No newline at end of file