keycloak-aplcache
Changes
forms/common-themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties 2(+2 -0)
forms/common-themes/src/main/resources/theme/base/admin/resources/partials/realm-detail.html 14(+14 -0)
model/invalidation-cache/infinispan/src/main/java/org/keycloak/models/cache/infinispan/RealmAdapter.java 24(+24 -0)
model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java 12(+12 -0)
pom.xml 1(+1 -0)
Details
diff --git a/common/src/main/java/org/keycloak/common/Version.java b/common/src/main/java/org/keycloak/common/Version.java
index 73c4959..895eda5 100755
--- a/common/src/main/java/org/keycloak/common/Version.java
+++ b/common/src/main/java/org/keycloak/common/Version.java
@@ -12,6 +12,8 @@ import java.util.Properties;
*/
public class Version {
public static final String UNKNOWN = "UNKNOWN";
+ public static String NAME;
+ public static String NAME_HTML;
public static String VERSION;
public static String RESOURCES_VERSION;
public static String BUILD_TIME;
@@ -21,6 +23,8 @@ public class Version {
InputStream is = Version.class.getResourceAsStream("/keycloak-version.properties");
try {
props.load(is);
+ Version.NAME = props.getProperty("name");
+ Version.NAME_HTML = props.getProperty("name-html");
Version.VERSION = props.getProperty("version");
Version.BUILD_TIME = props.getProperty("build-time");
Version.RESOURCES_VERSION = Version.VERSION.toLowerCase();
diff --git a/common/src/main/resources/keycloak-version.properties b/common/src/main/resources/keycloak-version.properties
index fa367b8..7ef5089 100755
--- a/common/src/main/resources/keycloak-version.properties
+++ b/common/src/main/resources/keycloak-version.properties
@@ -1,2 +1,4 @@
+name=${product.name}
+name-html=${product.name-html}
version=${product.version}
build-time=${product.build-time}
\ No newline at end of file
diff --git a/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java
index cc57124..3359f21 100755
--- a/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java
+++ b/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java
@@ -9,6 +9,8 @@ import java.util.*;
public class RealmRepresentation {
protected String id;
protected String realm;
+ protected String displayName;
+ protected String displayNameHtml;
protected Integer notBefore;
protected Boolean revokeRefreshToken;
protected Integer accessTokenLifespan;
@@ -129,6 +131,22 @@ public class RealmRepresentation {
this.realm = realm;
}
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public String getDisplayNameHtml() {
+ return displayNameHtml;
+ }
+
+ public void setDisplayNameHtml(String displayNameHtml) {
+ this.displayNameHtml = displayNameHtml;
+ }
+
public List<UserRepresentation> getUsers() {
return users;
}
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties b/forms/common-themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties
index f33d6b8..ca128cc 100755
--- a/forms/common-themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties
+++ b/forms/common-themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties
@@ -1,6 +1,8 @@
# Common messages
enabled=Enabled
name=Name
+displayName=Display name
+displayNameHtml=HTML Display name
save=Save
cancel=Cancel
onText=ON
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/realm-detail.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/realm-detail.html
index d39ba14..19561ea 100755
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/realm-detail.html
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/realm-detail.html
@@ -10,6 +10,20 @@
</div>
<div class="form-group">
+ <label class="col-md-2 control-label" for="name">{{:: 'displayName' | translate}}</label>
+ <div class="col-md-6">
+ <input class="form-control" type="text" id="displayName" name="displayName" data-ng-model="realm.displayName">
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="col-md-2 control-label" for="name">{{:: 'displayNameHtml' | translate}}</label>
+ <div class="col-md-6">
+ <input class="form-control" type="text" id="displayNameHtml" name="displayNameHtml" data-ng-model="realm.displayNameHtml">
+ </div>
+ </div>
+
+ <div class="form-group">
<label class="col-md-2 control-label" for="enabled">{{:: 'enabled' | translate}}</label>
<div class="col-md-6">
<input ng-model="realm.enabled" name="enabled" id="enabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
diff --git a/forms/common-themes/src/main/resources/theme/base/login/login.ftl b/forms/common-themes/src/main/resources/theme/base/login/login.ftl
index 5786807..840bf4e 100755
--- a/forms/common-themes/src/main/resources/theme/base/login/login.ftl
+++ b/forms/common-themes/src/main/resources/theme/base/login/login.ftl
@@ -1,9 +1,9 @@
<#import "template.ftl" as layout>
<@layout.registrationLayout displayInfo=social.displayInfo; section>
<#if section = "title">
- ${msg("loginTitle",(realm.name!''))}
+ ${msg("loginTitle",(realm.displayName!''))}
<#elseif section = "header">
- ${msg("loginTitleHtml",(realm.name!''))}
+ ${msg("loginTitleHtml",(realm.displayNameHtml!''))}
<#elseif section = "form">
<#if realm.password>
<form id="kc-form-login" class="${properties.kcFormClass!}" action="${url.loginAction}" method="post">
diff --git a/forms/common-themes/src/main/resources/theme/base/login/login-idp-link-email.ftl b/forms/common-themes/src/main/resources/theme/base/login/login-idp-link-email.ftl
index 0ba0686..5dc29f1 100644
--- a/forms/common-themes/src/main/resources/theme/base/login/login-idp-link-email.ftl
+++ b/forms/common-themes/src/main/resources/theme/base/login/login-idp-link-email.ftl
@@ -6,7 +6,7 @@
${msg("emailLinkIdpTitle", idpAlias)}
<#elseif section = "form">
<p id="instruction1" class="instruction">
- ${msg("emailLinkIdp1", idpAlias, brokerContext.username, realm.name)}
+ ${msg("emailLinkIdp1", idpAlias, brokerContext.username, realm.displayName)}
</p>
<p id="instruction2" class="instruction">
${msg("emailLinkIdp2")} <a href="${url.firstBrokerLoginUrl}">${msg("doClickHere")}</a> ${msg("emailLinkIdp3")}
diff --git a/forms/common-themes/src/main/resources/theme/base/login/login-oauth-grant.ftl b/forms/common-themes/src/main/resources/theme/base/login/login-oauth-grant.ftl
index 2d596d0..edafc66 100755
--- a/forms/common-themes/src/main/resources/theme/base/login/login-oauth-grant.ftl
+++ b/forms/common-themes/src/main/resources/theme/base/login/login-oauth-grant.ftl
@@ -3,7 +3,7 @@
<#if section = "title">
${msg("oauthGrantTitle")}
<#elseif section = "header">
- ${msg("oauthGrantTitleHtml",(realm.name!''))} <strong><#if client.name??>${advancedMsg(client.name)}<#else>${client.clientId}</#if></strong>.
+ ${msg("oauthGrantTitleHtml",(realm.displayNameHtml!''))} <strong><#if client.name??>${advancedMsg(client.name)}<#else>${client.clientId}</#if></strong>.
<#elseif section = "form">
<div id="kc-oauth" class="content-area">
<h3>${msg("oauthGrantRequest")}</h3>
diff --git a/forms/common-themes/src/main/resources/theme/base/login/login-totp.ftl b/forms/common-themes/src/main/resources/theme/base/login/login-totp.ftl
index 3f46b76..12cda21 100755
--- a/forms/common-themes/src/main/resources/theme/base/login/login-totp.ftl
+++ b/forms/common-themes/src/main/resources/theme/base/login/login-totp.ftl
@@ -1,9 +1,9 @@
<#import "template.ftl" as layout>
<@layout.registrationLayout; section>
<#if section = "title">
- ${msg("loginTitle",realm.name)}
+ ${msg("loginTitle",realm.displayName)}
<#elseif section = "header">
- ${msg("loginTitleHtml",realm.name)}
+ ${msg("loginTitleHtml",realm.displayNameHtml)}
<#elseif section = "form">
<form id="kc-totp-login-form" class="${properties.kcFormClass!}" action="${url.loginAction}" method="post">
<div class="${properties.kcFormGroupClass!}">
diff --git a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_ca.properties b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_ca.properties
index 55ccb7b..720e73e 100644
--- a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_ca.properties
+++ b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_ca.properties
@@ -15,9 +15,9 @@ kerberosNotConfiguredTitle=Kerberos no configurat
bypassKerberosDetail=O b\u00E9 no est\u00E0s identificat mitjan\u00E7ant Kerberos o el teu navegador no est\u00E0 configurat per identificar-se mitjan\u00E7ant Kerberos. Si us plau fes clic per identificar-te per un altre mitj\u00E0.
kerberosNotSetUp=Kerberos no est\u00E0 configurat. No pots identificar-te.
registerWithTitle=Registra''t amb {0}
-registerWithTitleHtml=Registra''t amb <strong>{0}</strong>
+registerWithTitleHtml={0}
loginTitle=Inicia sessi\u00F3 a {0}
-loginTitleHtml=Inicia sessi\u00F3 a <strong>{0}</strong>
+loginTitleHtml={0}
impersonateTitle={0}\u00A0Personifica Usuari
impersonateTitleHtml=<strong>{0}</strong> Personifica Usuari</strong>
realmChoice=Domini
@@ -26,7 +26,7 @@ loginTotpTitle=Configura la teva aplicaci\u00F3 d''identificaci\u00F3 m\u00F2bil
loginProfileTitle=Actualitza la informaci\u00F3 del teu compte
loginTimeout=Has trigat massa a identificar-te. Inicia de nou la identificaci\u00F3.
oauthGrantTitle=Concessi\u00F3 OAuth
-oauthGrantTitleHtml=Acc\u00E9s temporal per <strong>{0}</strong> sol\u00B7licitat per
+oauthGrantTitleHtml={0}
errorTitle=Ho sentim...
errorTitleHtml=Ho <strong>sentim</strong>...
emailVerifyTitle=Verificaci\u00F3 de l''email
diff --git a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_de.properties b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_de.properties
index d968379..2d96a2c 100644
--- a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_de.properties
+++ b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_de.properties
@@ -19,9 +19,9 @@ recaptchaNotConfigured=Recaptcha is required, but not configured
consentDenied=Consent denied.
registerWithTitle=Registrierung bei {0}
-registerWithTitleHtml=Registrierung bei <strong>{0}</strong>
+registerWithTitleHtml={0}
loginTitle=Anmeldung bei {0}
-loginTitleHtml=Anmeldung bei <strong>{0}</strong>
+loginTitleHtml={0}
loginOauthTitle=
loginOauthTitleHtml=Tempor\u00E4rer zugriff auf <strong>{0}</strong> angefordert von <strong>{1}</strong>.
loginTotpTitle=Mobile Authentifizierung Einrichten
@@ -32,7 +32,7 @@ impersonateTitleHtml=<strong>{0}</strong> Impersonate User</strong>
unknownUser=Unknown user
realmChoice=Realm
oauthGrantTitle=OAuth gew\u00E4hren
-oauthGrantTitleHtml=Tempor\u00E4rer zugriff auf <strong>{0}</strong> angefordert von
+oauthGrantTitleHtml={0}
errorTitle=Es tut uns leid...
errorTitleHtml=Es tut uns leid...
emailVerifyTitle=E-Mail verifizieren
diff --git a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_en.properties b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_en.properties
index b1b5890..4b5df27 100644
--- a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_en.properties
+++ b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_en.properties
@@ -15,9 +15,9 @@ kerberosNotConfiguredTitle=Kerberos Not Configured
bypassKerberosDetail=Either you are not logged in via 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.
registerWithTitle=Register with {0}
-registerWithTitleHtml=Register with <strong>{0}</strong>
+registerWithTitleHtml={0}
loginTitle=Log in to {0}
-loginTitleHtml=Log in to <strong>{0}</strong>
+loginTitleHtml={0}
impersonateTitle={0} Impersonate User
impersonateTitleHtml=<strong>{0}</strong> Impersonate User</strong>
realmChoice=Realm
@@ -25,8 +25,8 @@ unknownUser=Unknown user
loginTotpTitle=Mobile Authenticator Setup
loginProfileTitle=Update Account Information
loginTimeout=You took too long to login. Login process starting from beginning.
-oauthGrantTitle=OAuth Grant
-oauthGrantTitleHtml=Temporary access for <strong>{0}</strong> requested by
+oauthGrantTitle=Grant Access
+oauthGrantTitleHtml={0}
errorTitle=We''re sorry...
errorTitleHtml=We''re <strong>sorry</strong> ...
emailVerifyTitle=Email verification
diff --git a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_es.properties b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_es.properties
index f497d07..a42f7d2 100644
--- a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_es.properties
+++ b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_es.properties
@@ -15,9 +15,9 @@ kerberosNotConfiguredTitle=Kerberos no configurado
bypassKerberosDetail=O bien no est\u00E1s identificado mediante Kerberos o tu navegador no est\u00E1 configurado para identificarse mediante Kerberos. Por favor haz clic para identificarte por otro medio.
kerberosNotSetUp=Kerberos no est\u00E1 configurado. No puedes identificarte.
registerWithTitle=Reg\u00EDstrate con {0}
-registerWithTitleHtml=Reg\u00EDstrate con <strong>{0}</strong>
+registerWithTitleHtml={0}
loginTitle=Inicia sesi\u00F3n en {0}
-loginTitleHtml=Inicia sesi\u00F3n en {0}
+loginTitleHtml={0}
impersonateTitle={0}\u00A0Personificar Usuario
impersonateTitleHtml=<strong>{0}</strong> Personificar Usuario</strong>
realmChoice=Dominio
@@ -26,7 +26,7 @@ loginTotpTitle=Configura tu aplicaci\u00F3n de identificaci\u00F3n m\u00F3vil
loginProfileTitle=Actualiza la informaci\u00F3n de tu cuenta
loginTimeout=Has tardado demasiado en identificarte. Inicia de nuevo la identificaci\u00F3n.
oauthGrantTitle=Concesi\u00F3n OAuth
-oauthGrantTitleHtml=Acceso temporal para <strong>{0}</strong> solicitado por
+oauthGrantTitleHtml={0}
errorTitle=Lo sentimos...
errorTitleHtml=Lo <strong>sentimos</strong>...
emailVerifyTitle=Verificaci\u00F3n del email
diff --git a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_fr.properties b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_fr.properties
index 495dde6..662e9d9 100644
--- a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_fr.properties
+++ b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_fr.properties
@@ -15,9 +15,9 @@ kerberosNotConfiguredTitle=Kerberos non configur\u00e9
bypassKerberosDetail=Si vous n''\u00eates pas connect\u00e9 via Kerberos ou bien que votre navigateur n''est pas configur\u00e9 pour la connexion via Kerberos. Veuillez cliquer pour vous connecter via un autre moyen.
kerberosNotSetUp=Kerberos n''est pas configur\u00e9. Connexion impossible.
registerWithTitle=Enregistrement avec {0}
-registerWithTitleHtml=Enregistrement avec <strong>{0}</strong>
+registerWithTitleHtml={0}
loginTitle=Se connecter \u00e0 {0}
-loginTitleHtml=Se connecter \u00e0 <strong>{0}</strong>
+loginTitleHtml={0}
impersonateTitle={0} utilisateur impersonate
impersonateTitleHtml=<strong>{0}</strong> utilisateur impersonate</strong>
realmChoice=Domaine
@@ -26,7 +26,7 @@ loginTotpTitle=Configuration de l''authentification par mobile
loginProfileTitle=Mise \u00e0 jour du compte
loginTimeout=Le temps imparti pour la connexion est \u00e9coul\u00e9. Le processus de connexion red\u00e9marre depuis le d\u00e9but.
oauthGrantTitle=OAuth Grant
-oauthGrantTitleHtml=Acc\u00e8s temporaire pour <strong>{0}</strong> demand\u00e9 par
+oauthGrantTitleHtml={0}
errorTitle=Nous sommes d\u00e9sol\u00e9 ...
errorTitleHtml=Nous sommes <strong>d\u00e9sol\u00e9</strong> ...
emailVerifyTitle=V\u00e9rification du courriel
diff --git a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_it.properties b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_it.properties
index 026c7a4..0fd7d99 100644
--- a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_it.properties
+++ b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_it.properties
@@ -19,9 +19,9 @@ recaptchaNotConfigured=Recaptcha is required, but not configured
consentDenied=Consent denied.
registerWithTitle=Registrati come {0}
-registerWithTitleHtml=Registrati come <strong>{0}</strong>
+registerWithTitleHtml={0}
loginTitle=Accedi a {0}
-loginTitleHtml=Accedi a <strong>{0}</strong>
+loginTitleHtml={0}
loginTotpTitle=Configura Autenticazione Mobile
loginProfileTitle=Aggiorna Profilo
loginTimeout=You took too long to login. Login process starting from beginning.
@@ -30,7 +30,7 @@ impersonateTitleHtml=<strong>{0}</strong> Impersonate User</strong>
unknownUser=Unknown user
realmChoice=Realm
oauthGrantTitle=OAuth Grant
-oauthGrantTitleHtml=Accesso temporaneo per <strong>{0}</strong> richiesto da
+oauthGrantTitleHtml={0}
errorTitle=Siamo spiacenti...
errorTitleHtml=Siamo <strong>spiacenti</strong> ...
emailVerifyTitle=Verifica Email
diff --git a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_pt_BR.properties b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_pt_BR.properties
index 7c44eeb..a144120 100644
--- a/forms/common-themes/src/main/resources/theme/base/login/messages/messages_pt_BR.properties
+++ b/forms/common-themes/src/main/resources/theme/base/login/messages/messages_pt_BR.properties
@@ -15,9 +15,9 @@ kerberosNotConfiguredTitle=Kerberos N\u00E3o Configurado
bypassKerberosDetail=Ou voc\u00EA n\u00E3o est\u00E1 logado via Kerberos ou o seu navegador n\u00E3o est\u00E1 configurado para login Kerberos. Por favor, clique em continuar para fazer o login no atrav\u00E9s de outros meios
kerberosNotSetUp=Kerberos n\u00E3o est\u00E1 configurado. Voc\u00EA n\u00E3o pode acessar.
registerWithTitle=Registre-se com {0}
-registerWithTitleHtml=Registre-se com <strong>{0}</strong>
+registerWithTitleHtml={0}
loginTitle=Entrar em {0}
-loginTitleHtml=Entrar em <strong>{0}</strong>
+loginTitleHtml={0}
impersonateTitle={0} Impersonate User
impersonateTitleHtml=<strong>{0}</strong> Impersonate User</strong>
realmChoice=Realm
@@ -26,7 +26,7 @@ loginTotpTitle=Configura\u00E7\u00E3o do autenticador mobile
loginProfileTitle=Atualiza\u00E7\u00E3o das Informa\u00E7\u00F5es da Conta
loginTimeout=Voc\u00EA demorou muito para entrar. Por favor, refa\u00E7a o processo de login a partir do in\u00EDcio.
oauthGrantTitle=Concess\u00E3o OAuth
-oauthGrantTitleHtml=Acesso tempor\u00E1rio para <strong>{0}</strong> solicitado pela
+oauthGrantTitleHtml={0}
errorTitle=N\u00F3s lamentamos...
errorTitleHtml=N\u00F3s <strong>lamentamos</strong> ...
emailVerifyTitle=Verifica\u00E7\u00E3o de e-mail
diff --git a/forms/common-themes/src/main/resources/theme/base/login/register.ftl b/forms/common-themes/src/main/resources/theme/base/login/register.ftl
index d1593da..18a01cf 100755
--- a/forms/common-themes/src/main/resources/theme/base/login/register.ftl
+++ b/forms/common-themes/src/main/resources/theme/base/login/register.ftl
@@ -1,9 +1,9 @@
<#import "template.ftl" as layout>
<@layout.registrationLayout; section>
<#if section = "title">
- ${msg("registerWithTitle",(realm.name!''))}
+ ${msg("registerWithTitle",(realm.displayName!''))}
<#elseif section = "header">
- ${msg("registerWithTitleHtml",(realm.name!''))}
+ ${msg("registerWithTitleHtml",(realm.displayNameHtml!''))}
<#elseif section = "form">
<form id="kc-register-form" class="${properties.kcFormClass!}" action="${url.registrationAction}" method="post">
<#if !realm.registrationEmailAsUsername>
diff --git a/forms/login-freemarker/src/main/java/org/keycloak/login/freemarker/model/RealmBean.java b/forms/login-freemarker/src/main/java/org/keycloak/login/freemarker/model/RealmBean.java
index e6ae21d..027a2c2 100755
--- a/forms/login-freemarker/src/main/java/org/keycloak/login/freemarker/model/RealmBean.java
+++ b/forms/login-freemarker/src/main/java/org/keycloak/login/freemarker/model/RealmBean.java
@@ -42,6 +42,24 @@ public class RealmBean {
return realm.getName();
}
+ public String getDisplayName() {
+ String displayName = realm.getDisplayName();
+ if (displayName != null && displayName.length() > 0) {
+ return displayName;
+ } else {
+ return getName();
+ }
+ }
+
+ public String getDisplayNameHtml() {
+ String displayNameHtml = realm.getDisplayNameHtml();
+ if (displayNameHtml != null && displayNameHtml.length() > 0) {
+ return displayNameHtml;
+ } else {
+ return getDisplayName();
+ }
+ }
+
public boolean isIdentityFederationEnabled() {
return realm.isIdentityFederationEnabled();
}
diff --git a/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java b/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java
index 7a08bca..69fdeae 100755
--- a/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java
+++ b/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java
@@ -11,6 +11,8 @@ import java.util.Map;
public class RealmEntity extends AbstractIdentifiableEntity {
private String name;
+ private String displayName;
+ private String displayNameHtml;
private boolean enabled;
private String sslRequired;
private boolean registrationAllowed;
@@ -105,6 +107,22 @@ public class RealmEntity extends AbstractIdentifiableEntity {
this.name = name;
}
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public String getDisplayNameHtml() {
+ return displayNameHtml;
+ }
+
+ public void setDisplayNameHtml(String displayNameHtml) {
+ this.displayNameHtml = displayNameHtml;
+ }
+
public boolean isEnabled() {
return enabled;
}
diff --git a/model/api/src/main/java/org/keycloak/models/RealmModel.java b/model/api/src/main/java/org/keycloak/models/RealmModel.java
index 3e50b73..c0aa05f 100755
--- a/model/api/src/main/java/org/keycloak/models/RealmModel.java
+++ b/model/api/src/main/java/org/keycloak/models/RealmModel.java
@@ -35,6 +35,14 @@ public interface RealmModel extends RoleContainerModel {
void setName(String name);
+ String getDisplayName();
+
+ void setDisplayName(String displayName);
+
+ String getDisplayNameHtml();
+
+ void setDisplayNameHtml(String displayNameHtml);
+
boolean isEnabled();
void setEnabled(boolean enabled);
diff --git a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
index e891582..a18d0f8 100755
--- a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
+++ b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
@@ -164,6 +164,8 @@ public class ModelToRepresentation {
RealmRepresentation rep = new RealmRepresentation();
rep.setId(realm.getId());
rep.setRealm(realm.getName());
+ rep.setDisplayName(realm.getDisplayName());
+ rep.setDisplayNameHtml(realm.getDisplayNameHtml());
rep.setEnabled(realm.isEnabled());
rep.setNotBefore(realm.getNotBefore());
rep.setSslRequired(realm.getSslRequired().name().toLowerCase());
diff --git a/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java b/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java
index 2d99c3b..2432fc1 100755
--- a/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java
+++ b/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java
@@ -85,6 +85,8 @@ public class RepresentationToModel {
convertDeprecatedApplications(session, rep);
newRealm.setName(rep.getRealm());
+ if (rep.getDisplayName() != null) newRealm.setDisplayName(rep.getDisplayName());
+ if (rep.getDisplayNameHtml() != null) newRealm.setDisplayNameHtml(rep.getDisplayNameHtml());
if (rep.isEnabled() != null) newRealm.setEnabled(rep.isEnabled());
if (rep.isBruteForceProtected() != null) newRealm.setBruteForceProtected(rep.isBruteForceProtected());
if (rep.getMaxFailureWaitSeconds() != null) newRealm.setMaxFailureWaitSeconds(rep.getMaxFailureWaitSeconds());
@@ -595,6 +597,8 @@ public class RepresentationToModel {
if (rep.getRealm() != null) {
realm.setName(rep.getRealm());
}
+ if (rep.getDisplayName() != null) realm.setDisplayName(rep.getDisplayName());
+ if (rep.getDisplayNameHtml() != null) realm.setDisplayNameHtml(rep.getDisplayNameHtml());
if (rep.isEnabled() != null) realm.setEnabled(rep.isEnabled());
if (rep.isBruteForceProtected() != null) realm.setBruteForceProtected(rep.isBruteForceProtected());
if (rep.getMaxFailureWaitSeconds() != null) realm.setMaxFailureWaitSeconds(rep.getMaxFailureWaitSeconds());
diff --git a/model/invalidation-cache/infinispan/src/main/java/org/keycloak/models/cache/infinispan/RealmAdapter.java b/model/invalidation-cache/infinispan/src/main/java/org/keycloak/models/cache/infinispan/RealmAdapter.java
index e7d15eb..77ac430 100755
--- a/model/invalidation-cache/infinispan/src/main/java/org/keycloak/models/cache/infinispan/RealmAdapter.java
+++ b/model/invalidation-cache/infinispan/src/main/java/org/keycloak/models/cache/infinispan/RealmAdapter.java
@@ -60,6 +60,30 @@ public class RealmAdapter implements RealmModel {
}
@Override
+ public String getDisplayName() {
+ if (updated != null) return updated.getDisplayName();
+ return cached.getDisplayName();
+ }
+
+ @Override
+ public void setDisplayName(String displayName) {
+ getDelegateForUpdate();
+ updated.setDisplayName(displayName);
+ }
+
+ @Override
+ public String getDisplayNameHtml() {
+ if (updated != null) return updated.getDisplayNameHtml();
+ return cached.getDisplayNameHtml();
+ }
+
+ @Override
+ public void setDisplayNameHtml(String displayNameHtml) {
+ getDelegateForUpdate();
+ updated.setDisplayNameHtml(displayNameHtml);
+ }
+
+ @Override
public boolean isEnabled() {
if (updated != null) return updated.isEnabled();
return cached.isEnabled();
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
index 40e4851..5b0be48 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
@@ -38,6 +38,8 @@ public class CachedRealm implements Serializable {
private String id;
private String name;
+ private String displayName;
+ private String displayNameHtml;
private boolean enabled;
private SslRequired sslRequired;
private boolean registrationAllowed;
@@ -125,6 +127,8 @@ public class CachedRealm implements Serializable {
public CachedRealm(RealmCache cache, RealmProvider delegate, RealmModel model) {
id = model.getId();
name = model.getName();
+ displayName = model.getDisplayName();
+ displayNameHtml = model.getDisplayNameHtml();
enabled = model.isEnabled();
sslRequired = model.getSslRequired();
registrationAllowed = model.isRegistrationAllowed();
@@ -265,6 +269,14 @@ public class CachedRealm implements Serializable {
return name;
}
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public String getDisplayNameHtml() {
+ return displayNameHtml;
+ }
+
public List<String> getDefaultRoles() {
return defaultRoles;
}
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmAttributes.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmAttributes.java
new file mode 100644
index 0000000..ecc8768
--- /dev/null
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmAttributes.java
@@ -0,0 +1,12 @@
+package org.keycloak.models.jpa.entities;
+
+/**
+ * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
+ */
+public interface RealmAttributes {
+
+ String DISPLAY_NAME = "displayName";
+
+ String DISPLAY_NAME_HTML = "displayNameHtml";
+
+}
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
index 1530b12..ce72bba 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
@@ -21,21 +21,7 @@ import org.keycloak.models.RoleModel;
import org.keycloak.models.UserFederationMapperModel;
import org.keycloak.models.UserFederationProviderCreationEventImpl;
import org.keycloak.models.UserFederationProviderModel;
-import org.keycloak.models.jpa.entities.AuthenticationExecutionEntity;
-import org.keycloak.models.jpa.entities.AuthenticationFlowEntity;
-import org.keycloak.models.jpa.entities.AuthenticatorConfigEntity;
-import org.keycloak.models.jpa.entities.ClientEntity;
-import org.keycloak.models.jpa.entities.ClientTemplateEntity;
-import org.keycloak.models.jpa.entities.GroupEntity;
-import org.keycloak.models.jpa.entities.IdentityProviderEntity;
-import org.keycloak.models.jpa.entities.IdentityProviderMapperEntity;
-import org.keycloak.models.jpa.entities.RealmAttributeEntity;
-import org.keycloak.models.jpa.entities.RealmEntity;
-import org.keycloak.models.jpa.entities.RequiredActionProviderEntity;
-import org.keycloak.models.jpa.entities.RequiredCredentialEntity;
-import org.keycloak.models.jpa.entities.RoleEntity;
-import org.keycloak.models.jpa.entities.UserFederationMapperEntity;
-import org.keycloak.models.jpa.entities.UserFederationProviderEntity;
+import org.keycloak.models.jpa.entities.*;
import org.keycloak.models.utils.KeycloakModelUtils;
import javax.persistence.EntityManager;
@@ -99,6 +85,26 @@ public class RealmAdapter implements RealmModel {
}
@Override
+ public String getDisplayName() {
+ return getAttribute(RealmAttributes.DISPLAY_NAME);
+ }
+
+ @Override
+ public void setDisplayName(String displayName) {
+ setAttribute(RealmAttributes.DISPLAY_NAME, displayName);
+ }
+
+ @Override
+ public String getDisplayNameHtml() {
+ return getAttribute(RealmAttributes.DISPLAY_NAME_HTML);
+ }
+
+ @Override
+ public void setDisplayNameHtml(String displayNameHtml) {
+ setAttribute(RealmAttributes.DISPLAY_NAME_HTML, displayNameHtml);
+ }
+
+ @Override
public boolean isEnabled() {
return realm.isEnabled();
}
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
index 6a1a84d..707c953 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
@@ -98,6 +98,28 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
}
@Override
+ public String getDisplayName() {
+ return realm.getDisplayName();
+ }
+
+ @Override
+ public void setDisplayName(String displayName) {
+ realm.setDisplayName(displayName);
+ updateRealm();
+ }
+
+ @Override
+ public String getDisplayNameHtml() {
+ return realm.getDisplayNameHtml();
+ }
+
+ @Override
+ public void setDisplayNameHtml(String displayNameHtml) {
+ realm.setDisplayNameHtml(displayNameHtml);
+ updateRealm();
+ }
+
+ @Override
public boolean isEnabled() {
return realm.isEnabled();
}
pom.xml 1(+1 -0)
diff --git a/pom.xml b/pom.xml
index b2038aa..b2aa2f4 100755
--- a/pom.xml
+++ b/pom.xml
@@ -19,6 +19,7 @@
<properties>
<product.name>Keycloak</product.name>
+ <product.name-html>\u003Cstrong\u003EKeycloak\u003C\u002Fstrong\u003E</product.name-html>
<product.version>${project.version}</product.version>
<product.build-time>${timestamp}</product.build-time>
diff --git a/services/src/main/java/org/keycloak/services/managers/ApplianceBootstrap.java b/services/src/main/java/org/keycloak/services/managers/ApplianceBootstrap.java
index a868aa8..8402016 100755
--- a/services/src/main/java/org/keycloak/services/managers/ApplianceBootstrap.java
+++ b/services/src/main/java/org/keycloak/services/managers/ApplianceBootstrap.java
@@ -2,6 +2,7 @@ package org.keycloak.services.managers;
import org.jboss.logging.Logger;
import org.keycloak.Config;
+import org.keycloak.common.Version;
import org.keycloak.common.enums.SslRequired;
import org.keycloak.models.AdminRoles;
import org.keycloak.models.ClientModel;
@@ -39,6 +40,8 @@ public class ApplianceBootstrap {
manager.setContextPath(contextPath);
RealmModel realm = manager.createRealm(adminRealmName, adminRealmName);
realm.setName(adminRealmName);
+ realm.setDisplayName(Version.NAME);
+ realm.setDisplayNameHtml(Version.NAME_HTML);
realm.setEnabled(true);
realm.addRequiredCredential(CredentialRepresentation.PASSWORD);
realm.setSsoSessionIdleTimeout(1800);
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/OAuthGrantPage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/OAuthGrantPage.java
index baa1ae9..660beb0 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/OAuthGrantPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/OAuthGrantPage.java
@@ -45,7 +45,7 @@ public class OAuthGrantPage extends AbstractPage {
@Override
public boolean isCurrent() {
- return driver.getTitle().equals("OAuth Grant");
+ return driver.getTitle().equals("Grant Access");
}
@Override