KEYCLOAK-1070 ClientModel.setName/getName
This commit is contained in:
parent
535023d800
commit
c942a8ac4f
36 changed files with 330 additions and 50 deletions
|
@ -83,17 +83,19 @@
|
|||
<addForeignKeyConstraint baseColumnNames="USER_CONSENT_ID" baseTableName="USER_CONSENT_PROT_MAPPER" constraintName="FK_GRNTCSNT_PRM_GR" referencedColumnNames="ID" referencedTableName="USER_CONSENT"/>
|
||||
<addForeignKeyConstraint baseColumnNames="CLIENT_SESSION" baseTableName="CLIENT_SESSION_PROT_MAPPER" constraintName="FK_33A8SGQW18I532811V7O2DK89" referencedColumnNames="ID" referencedTableName="CLIENT_SESSION"/>
|
||||
|
||||
<renameColumn tableName="CLIENT" newColumnName="CLIENT_ID" oldColumnName="NAME"/>
|
||||
<addColumn tableName="CLIENT">
|
||||
<column name="CONSENT_REQUIRED" type="BOOLEAN" defaultValueBoolean="false">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
<column name="NAME" type="VARCHAR(255)" />
|
||||
</addColumn>
|
||||
<update tableName="CLIENT">
|
||||
<column name="CONSENT_REQUIRED" valueBoolean="true"/>
|
||||
<where>DTYPE = 'OAuthClientEntity'</where>
|
||||
</update>
|
||||
<dropColumn tableName="CLIENT" columnName="DTYPE"/>
|
||||
<renameColumn tableName="CLIENT" newColumnName="CLIENT_ID" oldColumnName="NAME"/>
|
||||
|
||||
<renameColumn tableName="REALM" newColumnName="MASTER_ADMIN_CLIENT" oldColumnName="MASTER_ADMIN_APP"/>
|
||||
|
||||
<renameTable oldTableName="REALM_APPLICATION" newTableName="REALM_CLIENT"/>
|
||||
|
|
|
@ -10,6 +10,7 @@ import java.util.Map;
|
|||
public class ClientRepresentation {
|
||||
protected String id;
|
||||
protected String clientId;
|
||||
protected String name;
|
||||
protected String adminUrl;
|
||||
protected String baseUrl;
|
||||
protected Boolean surrogateAuthRequired;
|
||||
|
@ -40,6 +41,14 @@ public class ClientRepresentation {
|
|||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getClientId() {
|
||||
return clientId;
|
||||
}
|
||||
|
|
|
@ -120,6 +120,8 @@ public class ImportUtils {
|
|||
adminRole.setDescription("${role_"+AdminRoles.ADMIN+"}");
|
||||
|
||||
ClientModel realmAdminApp = KeycloakModelUtils.createClient(adminRealm, KeycloakModelUtils.getMasterRealmAdminApplicationClientId(realm));
|
||||
// No localized name for now
|
||||
realmAdminApp.setName(realm.getName() + " Realm");
|
||||
realmAdminApp.setBearerOnly(true);
|
||||
realm.setMasterAdminClient(realmAdminApp);
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ import javax.ws.rs.core.UriInfo;
|
|||
import org.jboss.logging.Logger;
|
||||
import org.keycloak.account.AccountPages;
|
||||
import org.keycloak.account.AccountProvider;
|
||||
import org.keycloak.account.freemarker.model.AccessBean;
|
||||
import org.keycloak.account.freemarker.model.ConsentBean;
|
||||
import org.keycloak.account.freemarker.model.AccountBean;
|
||||
import org.keycloak.account.freemarker.model.AccountFederatedIdentityBean;
|
||||
import org.keycloak.account.freemarker.model.FeaturesBean;
|
||||
|
@ -186,7 +186,7 @@ public class FreeMarkerAccountProvider implements AccountProvider {
|
|||
attributes.put("sessions", new SessionsBean(realm, sessions));
|
||||
break;
|
||||
case ACCESS:
|
||||
attributes.put("access", new AccessBean(realm, user, uriInfo.getBaseUri(), stateChecker));
|
||||
attributes.put("consent", new ConsentBean(user));
|
||||
attributes.put("advancedMsg", new AdvancedMessageFormatterMethod(locale, messagesBundle));
|
||||
break;
|
||||
case PASSWORD:
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package org.keycloak.account.freemarker.model;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -15,22 +14,25 @@ import org.keycloak.util.MultivaluedHashMap;
|
|||
/**
|
||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||
*/
|
||||
public class AccessBean {
|
||||
public class ConsentBean {
|
||||
|
||||
private List<ClientGrantBean> clientGrants = new LinkedList<ClientGrantBean>();
|
||||
|
||||
public AccessBean(RealmModel realm, UserModel user, URI baseUri, String stateChecker) {
|
||||
public ConsentBean(UserModel user) {
|
||||
List<UserConsentModel> grantedConsents = user.getConsents();
|
||||
for (UserConsentModel consent : grantedConsents) {
|
||||
ClientModel client = consent.getClient();
|
||||
|
||||
List<RoleModel> realmRolesGranted = new LinkedList<RoleModel>();
|
||||
MultivaluedHashMap<String, RoleModel> resourceRolesGranted = new MultivaluedHashMap<String, RoleModel>();
|
||||
MultivaluedHashMap<String, ClientRoleEntry> resourceRolesGranted = new MultivaluedHashMap<String, ClientRoleEntry>();
|
||||
for (RoleModel role : consent.getGrantedRoles()) {
|
||||
if (role.getContainer() instanceof RealmModel) {
|
||||
realmRolesGranted.add(role);
|
||||
} else {
|
||||
resourceRolesGranted.add(((ClientModel) role.getContainer()).getClientId(), role);
|
||||
ClientModel currentClient = (ClientModel) role.getContainer();
|
||||
ClientRoleEntry clientRole = new ClientRoleEntry(currentClient.getClientId(), currentClient.getName(),
|
||||
role.getName(), role.getDescription());
|
||||
resourceRolesGranted.add(currentClient.getClientId(), clientRole);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,11 +53,11 @@ public class AccessBean {
|
|||
public static class ClientGrantBean {
|
||||
|
||||
private final List<RoleModel> realmRolesGranted;
|
||||
private final MultivaluedHashMap<String, RoleModel> resourceRolesGranted;
|
||||
private final MultivaluedHashMap<String, ClientRoleEntry> resourceRolesGranted;
|
||||
private final ClientModel client;
|
||||
private final List<String> claimsGranted;
|
||||
|
||||
public ClientGrantBean(List<RoleModel> realmRolesGranted, MultivaluedHashMap<String, RoleModel> resourceRolesGranted,
|
||||
public ClientGrantBean(List<RoleModel> realmRolesGranted, MultivaluedHashMap<String, ClientRoleEntry> resourceRolesGranted,
|
||||
ClientModel client, List<String> claimsGranted) {
|
||||
this.realmRolesGranted = realmRolesGranted;
|
||||
this.resourceRolesGranted = resourceRolesGranted;
|
||||
|
@ -67,7 +69,7 @@ public class AccessBean {
|
|||
return realmRolesGranted;
|
||||
}
|
||||
|
||||
public MultivaluedHashMap<String, RoleModel> getResourceRolesGranted() {
|
||||
public MultivaluedHashMap<String, ClientRoleEntry> getResourceRolesGranted() {
|
||||
return resourceRolesGranted;
|
||||
}
|
||||
|
||||
|
@ -80,4 +82,36 @@ public class AccessBean {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
// Same class used in OAuthGrantBean as well. Maybe should be merged into common-freemarker...
|
||||
public static class ClientRoleEntry {
|
||||
|
||||
private final String clientId;
|
||||
private final String clientName;
|
||||
private final String roleName;
|
||||
private final String roleDescription;
|
||||
|
||||
public ClientRoleEntry(String clientId, String clientName, String roleName, String roleDescription) {
|
||||
this.clientId = clientId;
|
||||
this.clientName = clientName;
|
||||
this.roleName = roleName;
|
||||
this.roleDescription = roleDescription;
|
||||
}
|
||||
|
||||
public String getClientId() {
|
||||
return clientId;
|
||||
}
|
||||
|
||||
public String getClientName() {
|
||||
return clientName;
|
||||
}
|
||||
|
||||
public String getRoleName() {
|
||||
return roleName;
|
||||
}
|
||||
|
||||
public String getRoleDescription() {
|
||||
return roleDescription;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -21,9 +21,13 @@
|
|||
</thead>
|
||||
|
||||
<tbody>
|
||||
<#list access.clientGrants as clientGrant>
|
||||
<#list consent.clientGrants as clientGrant>
|
||||
<tr>
|
||||
<td><#if clientGrant.client.baseUrl??><a href="${clientGrant.client.baseUrl}">${clientGrant.client.clientId}</a><#else>${clientGrant.client.clientId}</#if></td>
|
||||
<td>
|
||||
<#if clientGrant.client.baseUrl??><a href="${clientGrant.client.baseUrl}"></#if>
|
||||
<#if clientGrant.client.name??>${advancedMsg(clientGrant.client.name)}<#else>${clientGrant.client.clientId}</#if>
|
||||
<#if clientGrant.client.baseUrl??></a></#if>
|
||||
</td>
|
||||
<td>
|
||||
<#list clientGrant.claimsGranted as claim>
|
||||
${advancedMsg(claim)}<#if claim_has_next>, </#if>
|
||||
|
@ -36,10 +40,10 @@
|
|||
</#list>
|
||||
<#list clientGrant.resourceRolesGranted?keys as resource>
|
||||
<#if clientGrant.realmRolesGranted?has_content>, </#if>
|
||||
<#list clientGrant.resourceRolesGranted[resource] as role>
|
||||
<#if role.description??>${advancedMsg(role.description)}<#else>${advancedMsg(role.name)}</#if>
|
||||
${msg("inResource", resource)}
|
||||
<#if role_has_next>, </#if>
|
||||
<#list clientGrant.resourceRolesGranted[resource] as clientRole>
|
||||
<#if clientRole.roleDescription??>${advancedMsg(clientRole.roleDescription)}<#else>${advancedMsg(clientRole.roleName)}</#if>
|
||||
${msg("inResource")} <strong><#if clientRole.clientName??>${advancedMsg(clientRole.clientName)}<#else>${clientRole.clientId}</#if></strong>
|
||||
<#if clientRole_has_next>, </#if>
|
||||
</#list>
|
||||
</#list>
|
||||
</td>
|
|
@ -16,16 +16,40 @@ authenticatorTitle=Authenticator
|
|||
authenticatorCode=One-time code
|
||||
email=E-Mail
|
||||
firstName=Vorname
|
||||
givenName=Vorname
|
||||
fullName=voller Name
|
||||
lastName=Nachname
|
||||
familyName=Nachname
|
||||
password=Passwort
|
||||
passwordConfirm=Passwortbest\u00E4tigung
|
||||
passwordNew=Neues Passwort
|
||||
username=Benutzernamen
|
||||
address=Adresse
|
||||
street=Strasse
|
||||
region=Staat, Provinz, Region
|
||||
postal_code=PLZ
|
||||
locality=Stadt oder Ortschaft
|
||||
country=Land
|
||||
emailVerified=E-Mail verifiziert
|
||||
gssDelegationCredential=GSS delegierte Berechtigung
|
||||
|
||||
role_admin=Admin
|
||||
role_realm-admin=Realm Admin
|
||||
role_create-realm=Realm erstellen
|
||||
role_view-realm=Realm ansehen
|
||||
role_view-users=Benutzer ansehen
|
||||
role_view-applications=Applicationen ansehen
|
||||
role_view-clients=Clients ansehen
|
||||
role_view-events=Events ansehen
|
||||
role_view-identity-providers=Identity Providers ansehen
|
||||
role_manage-realm=Realm verwalten
|
||||
role_manage-users=Benutzer verwalten
|
||||
role_manage-applications=Applikationen verwalten
|
||||
role_manage-identity-providers=Identity Provider verwalten
|
||||
role_manage-clients=Clients verwalten
|
||||
role_manage-events=Events verwalten
|
||||
role_view-profile=Profile ansehen
|
||||
role_manage-account=Profile verwalten
|
||||
|
||||
requiredFields=Erforderliche Felder
|
||||
allFieldsRequired=Alle Felder sind Erforderlich
|
||||
|
|
|
@ -50,6 +50,9 @@ role_manage-identity-providers=Manage identity providers
|
|||
role_manage-clients=Manage clients
|
||||
role_manage-events=Manage events
|
||||
role_view-profile=View profile
|
||||
client_account=Account
|
||||
client_security-admin-console=Security Admin Console
|
||||
client_realm-management=Realm Management
|
||||
|
||||
|
||||
requiredFields=Required fields
|
||||
|
@ -79,7 +82,7 @@ access=Access
|
|||
grantedPersonalInfo=Granted Personal Info
|
||||
grantedPermissions=Granted Permissions
|
||||
action=Action
|
||||
inResource=in <strong>{0}</strong>
|
||||
inResource=in
|
||||
revoke=Revoke Access
|
||||
|
||||
configureAuthenticators=Configured Authenticators
|
||||
|
|
|
@ -16,16 +16,40 @@ authenticatorTitle=Authenticator
|
|||
authenticatorCode=Codice One-time
|
||||
email=Email
|
||||
firstName=Nome
|
||||
givenName=Nome
|
||||
fullName=Nome Completo
|
||||
lastName=Cognome
|
||||
familyName=Cognome
|
||||
password=Password
|
||||
passwordConfirm=Conferma Password
|
||||
passwordNew=Nuova Password
|
||||
username=Username
|
||||
address=Indirizzo
|
||||
street=Via
|
||||
locality=Citta'' o Localita''
|
||||
region=Stato, Provincia, o Regione
|
||||
postal_code=Cap
|
||||
country=Paese
|
||||
emailVerified=Email verificata
|
||||
gssDelegationCredential=credenziali gss delegation
|
||||
|
||||
role_admin=Admin
|
||||
role_realm-admin=Realm Admin
|
||||
role_create-realm=Crea realm
|
||||
role_view-realm=Visualizza realm
|
||||
role_view-users=Visualizza utenti
|
||||
role_view-applications=Visualizza applicazioni
|
||||
role_view-clients=Visualizza client
|
||||
role_view-events=Visualizza eventi
|
||||
role_view-identity-providers=Visualizza identity provider
|
||||
role_manage-realm=Gestisci realm
|
||||
role_manage-users=Gestisci utenti
|
||||
role_manage-applications=Gestisci applicazioni
|
||||
role_manage-identity-providers=Gestisci identity provider
|
||||
role_manage-clients=Gestisci client
|
||||
role_manage-events=Gestisci eventi
|
||||
role_view-profile=Visualizza profilo
|
||||
role_manage-account=Gestisci account
|
||||
|
||||
requiredFields=Campi obbligatori
|
||||
allFieldsRequired=Tutti campi obbligatori
|
||||
|
|
|
@ -16,16 +16,40 @@ authenticatorTitle=Autenticator
|
|||
authenticatorCode=C\u00F3digo autenticador
|
||||
email=Email
|
||||
firstName=Primeiro nome
|
||||
givenName=Primeiro nome
|
||||
fullName=Nome completo
|
||||
lastName=Sobrenome
|
||||
familyName=Sobrenome
|
||||
password=Senha
|
||||
passwordConfirm=Confirma\u00E7\u00E3o
|
||||
passwordNew=Nova senha
|
||||
username=Nome de us\u00FAario
|
||||
address=Endere\u00E7o
|
||||
street=Logradouro
|
||||
locality=Cidade ou Localidade
|
||||
region=Estado
|
||||
postal_code=CEP
|
||||
country=Pa\u00EDs
|
||||
emailVerified=Email verificado
|
||||
gssDelegationCredential=gss delega\u00E7\u00E3o credencial
|
||||
|
||||
role_admin=Admin
|
||||
role_realm-admin=Realm Admin
|
||||
role_create-realm=Cria realm
|
||||
role_view-realm=Visualiza realm
|
||||
role_view-users=Visualiza usu\u00E1rios
|
||||
role_view-applications=Visualiza aplica\u00E7\u00F5es
|
||||
role_view-clients=Visualiza clientes
|
||||
role_view-events=Visualiza eventos
|
||||
role_view-identity-providers=Visualiza provedores de identidade
|
||||
role_manage-realm=Gerencia realm
|
||||
role_manage-users=Gerencia usu\u00E1rios
|
||||
role_manage-applications=Gerencia aplica\u00E7\u00F5es
|
||||
role_manage-identity-providers=Gerencia provedores de identidade
|
||||
role_manage-clients=Gerencia clientes
|
||||
role_manage-events=Gerencia eventos
|
||||
role_view-profile=Visualiza perfil
|
||||
role_manage-account=Gerencia contas
|
||||
|
||||
requiredFields=Campos obrigat\u00F3rios
|
||||
allFieldsRequired=Todos os campos s\u00E3o obrigat\u00F3rios
|
||||
|
|
|
@ -19,9 +19,17 @@
|
|||
<fieldset class="border-top">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="clientId">Client ID <span class="required" data-ng-show="create">*</span></label>
|
||||
<div class="col-sm-4">
|
||||
<div class="col-sm-6">
|
||||
<input class="form-control" type="text" id="clientId" name="clientId" data-ng-model="client.clientId" autofocus required>
|
||||
</div>
|
||||
<span tooltip-placement="right" tooltip="Specifies ID referenced in URI and tokens. For example 'my-client'" class="fa fa-info-circle"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="name">Name </label>
|
||||
<div class="col-sm-6">
|
||||
<input class="form-control" type="text" id="name" name="name" data-ng-model="client.name" autofocus>
|
||||
</div>
|
||||
<span tooltip-placement="right" tooltip="Specifies display name of the client. For example 'My Client'. Supports keys for localized values as well. For example: ${my_client}" class="fa fa-info-circle"></span>
|
||||
</div>
|
||||
<div class="form-group clearfix block">
|
||||
<label class="col-sm-2 control-label" for="enabled">Enabled</label>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<#if section = "title">
|
||||
${msg("oauthGrantTitle")}
|
||||
<#elseif section = "header">
|
||||
${msg("oauthGrantTitleHtml",(realm.name!''), (client.clientId!''))}
|
||||
${msg("oauthGrantTitleHtml",(realm.name!''))} <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>
|
||||
|
@ -34,10 +34,10 @@
|
|||
</#if>
|
||||
<#if oauth.resourceRolesRequested??>
|
||||
<#list oauth.resourceRolesRequested?keys as resource>
|
||||
<#list oauth.resourceRolesRequested[resource] as role>
|
||||
<#list oauth.resourceRolesRequested[resource] as clientRole>
|
||||
<li>
|
||||
<span class="kc-role"><#if role.description??>${advancedMsg(role.description)}<#else>${advancedMsg(role.name)}</#if></span>
|
||||
<span class="kc-resource">${msg("inResource", resource)}</span>
|
||||
<span class="kc-role"><#if clientRole.roleDescription??>${advancedMsg(clientRole.roleDescription)}<#else>${advancedMsg(clientRole.roleName)}</#if></span>
|
||||
<span class="kc-resource">${msg("inResource")} <strong><#if clientRole.clientName??>${advancedMsg(clientRole.clientName)}<#else>${clientRole.clientId}</#if></strong> </span>
|
||||
</li>
|
||||
</#list>
|
||||
</#list>
|
||||
|
|
|
@ -16,7 +16,7 @@ loginOauthTitleHtml=Tempor\u00E4rer zugriff auf <strong>{0}</strong> angefordert
|
|||
loginTotpTitle=Mobile Authentifizierung Einrichten
|
||||
loginProfileTitle=Benutzerkonto Informationen aktualisieren
|
||||
oauthGrantTitle=OAuth gew\u00E4hren
|
||||
oauthGrantTitleHtml=Tempor\u00E4rer zugriff auf <strong>{0}</strong> angefordert von <strong>{1}</strong>.
|
||||
oauthGrantTitleHtml=Tempor\u00E4rer zugriff auf <strong>{0}</strong> angefordert von
|
||||
errorTitle=Es tut uns leid...
|
||||
errorTitleHtml=Es tut uns leid...
|
||||
emailVerifyTitle=E-Mail verifizieren
|
||||
|
@ -55,7 +55,7 @@ loginTotpStep3=Geben Sie den One-time Code welcher die Applikation generiert hat
|
|||
loginTotpOneTime=One-time Code
|
||||
|
||||
oauthGrantRequest=Wollen Sie diese Zugriffsreche gew\u00E4hren?
|
||||
inResource=in <strong>{0}</strong>
|
||||
inResource=in
|
||||
|
||||
emailVerifyInstruction1=Ein E-Mail mit weitern Anweisungen wurde an Sie versendet.
|
||||
emailVerifyInstruction2=Falls Sie kein E-Mail erhalten haben, dann k\u00F6nnen Sie
|
||||
|
|
|
@ -14,7 +14,7 @@ loginTitleHtml=Log in to <strong>{0}</strong>
|
|||
loginTotpTitle=Mobile Authenticator Setup
|
||||
loginProfileTitle=Update Account Information
|
||||
oauthGrantTitle=OAuth Grant
|
||||
oauthGrantTitleHtml=Temporary access for <strong>{0}</strong> requested by <strong>{1}</strong>.
|
||||
oauthGrantTitleHtml=Temporary access for <strong>{0}</strong> requested by
|
||||
errorTitle=We''re sorry...
|
||||
errorTitleHtml=We''re <strong>sorry</strong> ...
|
||||
emailVerifyTitle=Email verification
|
||||
|
@ -45,7 +45,7 @@ region=State, Province, or Region
|
|||
postal_code=Zip or Postal code
|
||||
country=Country
|
||||
emailVerified=Email verified
|
||||
gssDelegationCredential=gss delegation credential
|
||||
gssDelegationCredential=GSS Delegation Credential
|
||||
|
||||
loginTotpStep1=Install <a href="https://fedorahosted.org/freeotp/" target="_blank">FreeOTP</a> or Google Authenticator on your mobile. Both applications are available in <a href="https://play.google.com">Google Play</a> and Apple App Store.
|
||||
loginTotpStep2=Open the application and scan the barcode or enter the key
|
||||
|
@ -53,7 +53,7 @@ loginTotpStep3=Enter the one-time code provided by the application and click Sub
|
|||
loginTotpOneTime=One-time code
|
||||
|
||||
oauthGrantRequest=Do you grant these access privileges?
|
||||
inResource=in <strong>{0}</strong>
|
||||
inResource=in
|
||||
|
||||
emailVerifyInstruction1=An email with instructions to verify your email address has been sent to you.
|
||||
emailVerifyInstruction2=Haven''t received a verification code in your email?
|
||||
|
@ -84,6 +84,9 @@ role_manage-clients=Manage clients
|
|||
role_manage-events=Manage events
|
||||
role_view-profile=View profile
|
||||
role_manage-account=Manage account
|
||||
client_account=Account
|
||||
client_security-admin-console=Security Admin Console
|
||||
client_realm-management=Realm Management
|
||||
|
||||
invalidUserMessage=Invalid username or password.
|
||||
invalidEmailMessage=Invalid email address.
|
||||
|
|
|
@ -14,7 +14,7 @@ loginTitleHtml=Accedi a <strong>{0}</strong>
|
|||
loginTotpTitle=Configura Autenticazione Mobile
|
||||
loginProfileTitle=Aggiorna Profilo
|
||||
oauthGrantTitle=OAuth Grant
|
||||
oauthGrantTitleHtml=Accesso temporaneo per <strong>{0}</strong> richiesto da <strong>{1}</strong>.
|
||||
oauthGrantTitleHtml=Accesso temporaneo per <strong>{0}</strong> richiesto da
|
||||
errorTitle=Siamo spiacenti...
|
||||
errorTitleHtml=Siamo <strong>spiacenti</strong> ...
|
||||
emailVerifyTitle=Verifica Email
|
||||
|
@ -53,7 +53,7 @@ loginTotpStep3=Scrivi il codice one-time fornito dall''applicazione e premi Invi
|
|||
loginTotpOneTime=Codice one-time
|
||||
|
||||
oauthGrantRequest=Vuoi assegnare questi privilegi di accesso?
|
||||
inResource=per <strong>{0}</strong>
|
||||
inResource=per
|
||||
|
||||
emailVerifyInstruction1=Ti e'' stata inviata una email con le istruzioni per la verifica della tua email.
|
||||
emailVerifyInstruction2=Non hai ricevuto un codice di verifica nella tua email?
|
||||
|
|
|
@ -14,7 +14,7 @@ loginTitleHtml=Entrar em <strong>{0}</strong>
|
|||
loginTotpTitle=Configura\u00E7\u00E3o do autenticador mobile
|
||||
loginProfileTitle=Atualiza\u00E7\u00E3o de Informa\u00E7\u00F5es da Conta
|
||||
oauthGrantTitle=Concess\u00E3o OAuth
|
||||
oauthGrantTitleHtml=Acesso tempor\u00E1rio para <strong>{0}</strong> solicitado pela <strong>{1}</strong>.
|
||||
oauthGrantTitleHtml=Acesso tempor\u00E1rio para <strong>{0}</strong> solicitado pela
|
||||
errorTitle=N\u00F3s lamentamos...
|
||||
errorTitleHtml=N\u00F3s <strong>lamentamos</strong> ...
|
||||
emailVerifyTitle=Verifica\u00E7\u00E3o de e-mail
|
||||
|
@ -53,7 +53,7 @@ loginTotpStep3=Digite o c\u00F3digo fornecido pelo aplicativo e clique em Enviar
|
|||
loginTotpOneTime=C\u00F3digo autenticador
|
||||
|
||||
oauthGrantRequest=Voc\u00EA concede esses privil\u00E9gios de acesso?
|
||||
inResource=em <strong>{0}</strong>
|
||||
inResource=em
|
||||
|
||||
emailVerifyInstruction1=Um e-mail com instru\u00E7\u00F5es para verificar o seu endere\u00E7o de e-mail foi enviado para voc\u00EA.
|
||||
emailVerifyInstruction2=Voc\u00EA n\u00E3o recebeu um c\u00F3digo de verifica\u00E7\u00E3o em seu e-mail?
|
||||
|
|
|
@ -18,6 +18,10 @@ public class ClientBean {
|
|||
return client.getClientId();
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return client.getName();
|
||||
}
|
||||
|
||||
public String getBaseUrl() {
|
||||
return client.getBaseUrl();
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
package org.keycloak.login.freemarker.model;
|
||||
|
||||
import org.jboss.resteasy.specimpl.MultivaluedMapImpl;
|
||||
import org.keycloak.models.ClientModel;
|
||||
import org.keycloak.models.ClientSessionModel;
|
||||
import org.keycloak.models.ProtocolMapperModel;
|
||||
|
@ -29,6 +30,7 @@ import org.keycloak.models.RoleModel;
|
|||
import javax.ws.rs.core.MultivaluedMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:vrockai@redhat.com">Viliam Rockai</a>
|
||||
|
@ -37,7 +39,7 @@ public class OAuthGrantBean {
|
|||
|
||||
private final String accessRequestMessage;
|
||||
private List<RoleModel> realmRolesRequested;
|
||||
private MultivaluedMap<String, RoleModel> resourceRolesRequested;
|
||||
private MultivaluedMap<String, ClientRoleEntry> resourceRolesRequested;
|
||||
private String code;
|
||||
private ClientModel client;
|
||||
private List<String> claimsRequested;
|
||||
|
@ -47,7 +49,17 @@ public class OAuthGrantBean {
|
|||
this.code = code;
|
||||
this.client = client;
|
||||
this.realmRolesRequested = realmRolesRequested;
|
||||
this.resourceRolesRequested = resourceRolesRequested;
|
||||
if (resourceRolesRequested != null) {
|
||||
this.resourceRolesRequested = new MultivaluedMapImpl<String, ClientRoleEntry>();
|
||||
for (List<RoleModel> clientRoles : resourceRolesRequested.values()) {
|
||||
for (RoleModel role : clientRoles) {
|
||||
ClientModel currentClient = (ClientModel) role.getContainer();
|
||||
ClientRoleEntry roleEntry = new ClientRoleEntry(currentClient.getClientId(), currentClient.getName(), role.getName(), role.getDescription());
|
||||
this.resourceRolesRequested.add(currentClient.getClientId(), roleEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.accessRequestMessage = accessRequestMessage;
|
||||
|
||||
List<String> claims = new LinkedList<String>();
|
||||
|
@ -63,7 +75,7 @@ public class OAuthGrantBean {
|
|||
return code;
|
||||
}
|
||||
|
||||
public MultivaluedMap<String, RoleModel> getResourceRolesRequested() {
|
||||
public MultivaluedMap<String, ClientRoleEntry> getResourceRolesRequested() {
|
||||
return resourceRolesRequested;
|
||||
}
|
||||
|
||||
|
@ -82,4 +94,36 @@ public class OAuthGrantBean {
|
|||
public String getAccessRequestMessage() {
|
||||
return this.accessRequestMessage;
|
||||
}
|
||||
|
||||
// Same class used in ConsentBean in account as well. Maybe should be merged into common-freemarker...
|
||||
public static class ClientRoleEntry {
|
||||
|
||||
private final String clientId;
|
||||
private final String clientName;
|
||||
private final String roleName;
|
||||
private final String roleDescription;
|
||||
|
||||
public ClientRoleEntry(String clientId, String clientName, String roleName, String roleDescription) {
|
||||
this.clientId = clientId;
|
||||
this.clientName = clientName;
|
||||
this.roleName = roleName;
|
||||
this.roleDescription = roleDescription;
|
||||
}
|
||||
|
||||
public String getClientId() {
|
||||
return clientId;
|
||||
}
|
||||
|
||||
public String getClientName() {
|
||||
return clientName;
|
||||
}
|
||||
|
||||
public String getRoleName() {
|
||||
return roleName;
|
||||
}
|
||||
|
||||
public String getRoleDescription() {
|
||||
return roleDescription;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,10 @@ public interface ClientModel extends RoleContainerModel {
|
|||
|
||||
void setClientId(String clientId);
|
||||
|
||||
String getName();
|
||||
|
||||
void setName(String name);
|
||||
|
||||
boolean isEnabled();
|
||||
|
||||
void setEnabled(boolean enabled);
|
||||
|
|
|
@ -145,6 +145,7 @@ public interface RealmModel extends RoleContainerModel {
|
|||
|
||||
void updateDefaultRoles(String[] defaultRoles);
|
||||
|
||||
// Key is clientId
|
||||
Map<String, ClientModel> getClientNameMap();
|
||||
|
||||
List<ClientModel> getClients();
|
||||
|
|
|
@ -11,6 +11,7 @@ import java.util.Map;
|
|||
public class ClientEntity extends AbstractIdentifiableEntity {
|
||||
|
||||
private String clientId;
|
||||
private String name;
|
||||
private String realmId;
|
||||
private boolean enabled;
|
||||
private String secret;
|
||||
|
@ -49,6 +50,14 @@ public class ClientEntity extends AbstractIdentifiableEntity {
|
|||
this.clientId = clientId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
|
|
@ -226,6 +226,7 @@ public class ModelToRepresentation {
|
|||
ClientRepresentation rep = new ClientRepresentation();
|
||||
rep.setId(clientModel.getId());
|
||||
rep.setClientId(clientModel.getClientId());
|
||||
rep.setName(clientModel.getName());
|
||||
rep.setEnabled(clientModel.isEnabled());
|
||||
rep.setAdminUrl(clientModel.getManagementUrl());
|
||||
rep.setPublicClient(clientModel.isPublicClient());
|
||||
|
|
|
@ -523,6 +523,7 @@ public class RepresentationToModel {
|
|||
logger.debug("Create client: {0}" + resourceRep.getClientId());
|
||||
|
||||
ClientModel client = resourceRep.getId()!=null ? realm.addClient(resourceRep.getId(), resourceRep.getClientId()) : realm.addClient(resourceRep.getClientId());
|
||||
if (resourceRep.getName() != null) client.setName(resourceRep.getName());
|
||||
if (resourceRep.isEnabled() != null) client.setEnabled(resourceRep.isEnabled());
|
||||
client.setManagementUrl(resourceRep.getAdminUrl());
|
||||
if (resourceRep.isSurrogateAuthRequired() != null)
|
||||
|
@ -614,6 +615,7 @@ public class RepresentationToModel {
|
|||
|
||||
public static void updateClient(ClientRepresentation rep, ClientModel resource) {
|
||||
if (rep.getClientId() != null) resource.setClientId(rep.getClientId());
|
||||
if (rep.getName() != null) resource.setName(rep.getName());
|
||||
if (rep.isEnabled() != null) resource.setEnabled(rep.isEnabled());
|
||||
if (rep.isBearerOnly() != null) resource.setBearerOnly(rep.isBearerOnly());
|
||||
if (rep.isConsentRequired() != null) resource.setConsentRequired(rep.isConsentRequired());
|
||||
|
|
|
@ -68,6 +68,16 @@ public class ClientAdapter implements ClientModel {
|
|||
return entity.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return entity.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
entity.setName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getWebOrigins() {
|
||||
Set<String> result = new HashSet<String>();
|
||||
|
|
|
@ -293,7 +293,7 @@ public class ClientAdapter implements ClientModel {
|
|||
@Override
|
||||
public String getClientId() {
|
||||
if (updated != null) return updated.getClientId();
|
||||
return cached.getName();
|
||||
return cached.getClientId();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -303,6 +303,18 @@ public class ClientAdapter implements ClientModel {
|
|||
cacheSession.registerRealmInvalidation(cachedRealm.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
if (updated != null) return updated.getName();
|
||||
return cached.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
getDelegateForUpdate();
|
||||
updated.setName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSurrogateAuthRequired() {
|
||||
if (updated != null) return updated.isSurrogateAuthRequired();
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.util.TreeMap;
|
|||
*/
|
||||
public class CachedClient {
|
||||
private String id;
|
||||
private String clientId;
|
||||
private String name;
|
||||
private String realm;
|
||||
private Set<String> redirectUris = new HashSet<String>();
|
||||
|
@ -49,7 +50,8 @@ public class CachedClient {
|
|||
public CachedClient(RealmCache cache, RealmProvider delegate, RealmModel realm, ClientModel model) {
|
||||
id = model.getId();
|
||||
secret = model.getSecret();
|
||||
name = model.getClientId();
|
||||
clientId = model.getClientId();
|
||||
name = model.getName();
|
||||
this.realm = realm.getId();
|
||||
enabled = model.isEnabled();
|
||||
protocol = model.getProtocol();
|
||||
|
@ -85,6 +87,10 @@ public class CachedClient {
|
|||
return id;
|
||||
}
|
||||
|
||||
public String getClientId() {
|
||||
return clientId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
|
|
@ -54,6 +54,16 @@ public class ClientAdapter implements ClientModel {
|
|||
return realm;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return entity.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
entity.setName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return entity.isEnabled();
|
||||
|
|
|
@ -32,6 +32,8 @@ public class ClientEntity {
|
|||
@Id
|
||||
@Column(name="ID", length = 36)
|
||||
private String id;
|
||||
@Column(name = "NAME")
|
||||
private String name;
|
||||
@Column(name = "CLIENT_ID")
|
||||
private String clientId;
|
||||
@Column(name="ENABLED")
|
||||
|
@ -125,6 +127,14 @@ public class ClientEntity {
|
|||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
|
|
@ -27,20 +27,20 @@ import java.util.Set;
|
|||
*/
|
||||
public class ClientAdapter extends AbstractMongoAdapter<MongoClientEntity> implements ClientModel {
|
||||
|
||||
protected final MongoClientEntity applicationEntity;
|
||||
protected final MongoClientEntity clientEntity;
|
||||
private final RealmModel realm;
|
||||
protected KeycloakSession session;
|
||||
|
||||
public ClientAdapter(KeycloakSession session, RealmModel realm, MongoClientEntity applicationEntity, MongoStoreInvocationContext invContext) {
|
||||
public ClientAdapter(KeycloakSession session, RealmModel realm, MongoClientEntity clientEntity, MongoStoreInvocationContext invContext) {
|
||||
super(invContext);
|
||||
this.session = session;
|
||||
this.realm = realm;
|
||||
this.applicationEntity = applicationEntity;
|
||||
this.clientEntity = clientEntity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongoClientEntity getMongoEntity() {
|
||||
return applicationEntity;
|
||||
return clientEntity;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -59,6 +59,17 @@ public class ClientAdapter extends AbstractMongoAdapter<MongoClientEntity> imple
|
|||
return getMongoEntity().getClientId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return getMongoEntity().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
getMongoEntity().setName(name);
|
||||
updateMongoEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClientId(String clientId) {
|
||||
getMongoEntity().setClientId(clientId);
|
||||
|
@ -84,12 +95,12 @@ public class ClientAdapter extends AbstractMongoAdapter<MongoClientEntity> imple
|
|||
|
||||
@Override
|
||||
public void addWebOrigin(String webOrigin) {
|
||||
getMongoStore().pushItemToList(applicationEntity, "webOrigins", webOrigin, true, invocationContext);
|
||||
getMongoStore().pushItemToList(clientEntity, "webOrigins", webOrigin, true, invocationContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeWebOrigin(String webOrigin) {
|
||||
getMongoStore().pullItemFromList(applicationEntity, "webOrigins", webOrigin, invocationContext);
|
||||
getMongoStore().pullItemFromList(clientEntity, "webOrigins", webOrigin, invocationContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -111,12 +122,12 @@ public class ClientAdapter extends AbstractMongoAdapter<MongoClientEntity> imple
|
|||
|
||||
@Override
|
||||
public void addRedirectUri(String redirectUri) {
|
||||
getMongoStore().pushItemToList(applicationEntity, "redirectUris", redirectUri, true, invocationContext);
|
||||
getMongoStore().pushItemToList(clientEntity, "redirectUris", redirectUri, true, invocationContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeRedirectUri(String redirectUri) {
|
||||
getMongoStore().pullItemFromList(applicationEntity, "redirectUris", redirectUri, invocationContext);
|
||||
getMongoStore().pullItemFromList(clientEntity, "redirectUris", redirectUri, invocationContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -94,6 +94,7 @@ public class RealmManager {
|
|||
protected void setupAdminConsole(RealmModel realm) {
|
||||
ClientModel adminConsole = realm.getClientByClientId(Constants.ADMIN_CONSOLE_CLIENT_ID);
|
||||
if (adminConsole == null) adminConsole = new ClientManager(this).createClient(realm, Constants.ADMIN_CONSOLE_CLIENT_ID);
|
||||
adminConsole.setName("${client_" + Constants.ADMIN_CONSOLE_CLIENT_ID + "}");
|
||||
String baseUrl = contextPath + "/admin/" + realm.getName() + "/console";
|
||||
adminConsole.setBaseUrl(baseUrl + "/index.html");
|
||||
adminConsole.setEnabled(true);
|
||||
|
@ -184,6 +185,7 @@ public class RealmManager {
|
|||
ClientModel realmAdminClient = realm.getClientByClientId(realmAdminClientId);
|
||||
if (realmAdminClient == null) {
|
||||
realmAdminClient = clientManager.createClient(realm, realmAdminClientId);
|
||||
realmAdminClient.setName("${client_" + realmAdminClientId + "}");
|
||||
}
|
||||
RoleModel adminRole = realmAdminClient.addRole(AdminRoles.REALM_ADMIN);
|
||||
adminRole.setDescription("${role_" + AdminRoles.REALM_ADMIN + "}");
|
||||
|
@ -202,6 +204,7 @@ public class RealmManager {
|
|||
ClientModel client = realm.getClientNameMap().get(Constants.ACCOUNT_MANAGEMENT_CLIENT_ID);
|
||||
if (client == null) {
|
||||
client = new ClientManager(this).createClient(realm, Constants.ACCOUNT_MANAGEMENT_CLIENT_ID);
|
||||
client.setName("${client_" + Constants.ACCOUNT_MANAGEMENT_CLIENT_ID + "}");
|
||||
client.setEnabled(true);
|
||||
client.setFullScopeAllowed(false);
|
||||
String base = contextPath + "/realms/" + realm.getName() + "/account";
|
||||
|
|
|
@ -167,6 +167,7 @@ public class AdminAPITest {
|
|||
|
||||
protected void checkAppUpdate(ClientRepresentation appRep, ClientRepresentation storedApp) {
|
||||
if (appRep.getClientId() != null) Assert.assertEquals(appRep.getClientId(), storedApp.getClientId());
|
||||
if (appRep.getName() != null) Assert.assertEquals(appRep.getName(), storedApp.getName());
|
||||
if (appRep.isEnabled() != null) Assert.assertEquals(appRep.isEnabled(), storedApp.isEnabled());
|
||||
if (appRep.isBearerOnly() != null) Assert.assertEquals(appRep.isBearerOnly(), storedApp.isBearerOnly());
|
||||
if (appRep.isPublicClient() != null) Assert.assertEquals(appRep.isPublicClient(), storedApp.isPublicClient());
|
||||
|
|
|
@ -31,6 +31,7 @@ public class ClientModelTest extends AbstractModelTest {
|
|||
|
||||
realm = realmManager.createRealm("original");
|
||||
client = realm.addClient("application");
|
||||
client.setName("Application");
|
||||
client.setBaseUrl("http://base");
|
||||
client.setManagementUrl("http://management");
|
||||
client.setClientId("app-name");
|
||||
|
@ -85,6 +86,7 @@ public class ClientModelTest extends AbstractModelTest {
|
|||
|
||||
public static void assertEquals(ClientModel expected, ClientModel actual) {
|
||||
Assert.assertEquals(expected.getClientId(), actual.getClientId());
|
||||
Assert.assertEquals(expected.getName(), actual.getName());
|
||||
Assert.assertEquals(expected.getBaseUrl(), actual.getBaseUrl());
|
||||
Assert.assertEquals(expected.getManagementUrl(), actual.getManagementUrl());
|
||||
Assert.assertEquals(expected.getDefaultRoles(), actual.getDefaultRoles());
|
||||
|
|
|
@ -99,6 +99,7 @@ public class ImportTest extends AbstractModelTest {
|
|||
Assert.assertTrue(clients.values().contains(accountApp));
|
||||
realm.getClients().containsAll(clients.values());
|
||||
|
||||
Assert.assertEquals("Applicationn", application.getName());
|
||||
Assert.assertEquals(50, application.getNodeReRegistrationTimeout());
|
||||
Map<String, Integer> appRegisteredNodes = application.getRegisteredNodes();
|
||||
Assert.assertEquals(2, appRegisteredNodes.size());
|
||||
|
|
|
@ -72,6 +72,16 @@ public class OAuthGrantTest {
|
|||
private static String ROLE_USER = "Have User privileges";
|
||||
private static String ROLE_CUSTOMER = "Have Customer User privileges";
|
||||
|
||||
@Test
|
||||
public void sleepTest() throws IOException {
|
||||
try {
|
||||
Thread.sleep(10000000);
|
||||
} catch (InterruptedException ie) {
|
||||
throw new RuntimeException(ie);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void oauthGrantAcceptTest() throws IOException {
|
||||
oauth.clientId("third-party");
|
||||
|
|
|
@ -15,9 +15,9 @@ import org.openqa.selenium.WebElement;
|
|||
/**
|
||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||
*/
|
||||
public class AccountAccessPage extends AbstractAccountPage {
|
||||
public class AccountApplicationsPage extends AbstractAccountPage {
|
||||
|
||||
private String path = Urls.accountAccessPage(UriBuilder.fromUri(Constants.AUTH_SERVER_ROOT).build(), "test").toString();
|
||||
private String path = Urls.accountApplicationsPage(UriBuilder.fromUri(Constants.AUTH_SERVER_ROOT).build(), "test").toString();
|
||||
|
||||
@Override
|
||||
public boolean isCurrent() {
|
|
@ -107,9 +107,10 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"applications": [
|
||||
"clients": [
|
||||
{
|
||||
"name": "Application",
|
||||
"clientId": "Application",
|
||||
"name": "Applicationn",
|
||||
"enabled": true,
|
||||
"nodeReRegistrationTimeout": 50,
|
||||
"registeredNodes": {
|
||||
|
@ -118,7 +119,8 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"name": "OtherApp",
|
||||
"clientId": "OtherApp",
|
||||
"name": "Other Application",
|
||||
"enabled": true,
|
||||
"protocolMappers" : [
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue