KEYCLOAK-1070 Support for view and revoke consents in admin console
This commit is contained in:
1 parent
1d4ef83b81
commit
316053018b
18 files changed
+315
-106
No files matched your search
@@ -9,6 +9,7 @@ import org.keycloak.models.ProtocolMapperModel;
|
||||
import org.keycloak.models.RealmModel;
|
||||
import org.keycloak.models.RequiredCredentialModel;
|
||||
import org.keycloak.models.RoleModel;
|
||||
import org.keycloak.models.UserConsentModel;
|
||||
import org.keycloak.models.UserCredentialModel;
|
||||
import org.keycloak.models.UserFederationProviderModel;
|
||||
import org.keycloak.models.UserModel;
|
||||
@@ -22,6 +23,7 @@ import org.keycloak.representations.idm.ProtocolMapperRepresentation;
|
||||
import org.keycloak.representations.idm.RealmEventsConfigRepresentation;
|
||||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
import org.keycloak.representations.idm.RoleRepresentation;
|
||||
import org.keycloak.representations.idm.UserConsentRepresentation;
|
||||
import org.keycloak.representations.idm.UserFederationProviderRepresentation;
|
||||
import org.keycloak.representations.idm.UserRepresentation;
|
||||
import org.keycloak.representations.idm.UserSessionRepresentation;
|
||||
@@ -325,4 +327,45 @@ public class ModelToRepresentation {
|
||||
return rep;
|
||||
}
|
||||
|
||||
public static UserConsentRepresentation toRepresentation(UserConsentModel model) {
|
||||
String clientId = model.getClient().getClientId();
|
||||
|
||||
Map<String, List<String>> grantedProtocolMappers = new HashMap<String, List<String>>();
|
||||
for (ProtocolMapperModel protocolMapper : model.getGrantedProtocolMappers()) {
|
||||
String protocol = protocolMapper.getProtocol();
|
||||
List<String> currentProtocolMappers = grantedProtocolMappers.get(protocol);
|
||||
if (currentProtocolMappers == null) {
|
||||
currentProtocolMappers = new LinkedList<String>();
|
||||
grantedProtocolMappers.put(protocol, currentProtocolMappers);
|
||||
}
|
||||
currentProtocolMappers.add(protocolMapper.getName());
|
||||
}
|
||||
|
||||
List<String> grantedRealmRoles = new LinkedList<String>();
|
||||
Map<String, List<String>> grantedClientRoles = new HashMap<String, List<String>>();
|
||||
for (RoleModel role : model.getGrantedRoles()) {
|
||||
if (role.getContainer() instanceof RealmModel) {
|
||||
grantedRealmRoles.add(role.getName());
|
||||
} else {
|
||||
ClientModel client2 = (ClientModel) role.getContainer();
|
||||
|
||||
String clientId2 = client2.getClientId();
|
||||
List<String> currentClientRoles = grantedClientRoles.get(clientId2);
|
||||
if (currentClientRoles == null) {
|
||||
currentClientRoles = new LinkedList<String>();
|
||||
grantedClientRoles.put(clientId2, currentClientRoles);
|
||||
}
|
||||
currentClientRoles.add(role.getName());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UserConsentRepresentation consentRep = new UserConsentRepresentation();
|
||||
consentRep.setClientId(clientId);
|
||||
consentRep.setGrantedProtocolMappers(grantedProtocolMappers);
|
||||
consentRep.setGrantedRealmRoles(grantedRealmRoles);
|
||||
consentRep.setGrantedClientRoles(grantedClientRoles);
|
||||
return consentRep;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -788,33 +788,8 @@ public class RepresentationToModel {
|
||||
}
|
||||
}
|
||||
if (userRep.getClientConsents() != null) {
|
||||
for (Map.Entry<String, UserConsentRepresentation> entry : userRep.getClientConsents().entrySet()) {
|
||||
ClientModel client = clientMap.get(entry.getKey());
|
||||
if (client == null) {
|
||||
throw new RuntimeException("Unable to find client consent mappings for client: " + entry.getKey());
|
||||
}
|
||||
|
||||
UserConsentModel consentModel = new UserConsentModel(client);
|
||||
|
||||
UserConsentRepresentation consentRep = entry.getValue();
|
||||
if (consentRep.getGrantedRoles() != null) {
|
||||
for (String roleId : consentRep.getGrantedRoles()) {
|
||||
RoleModel role = newRealm.getRoleById(roleId);
|
||||
if (role == null) {
|
||||
throw new RuntimeException("Unable to find realm role referenced in consent mappings of user " + user.getUsername() + ". Role ID: " + roleId);
|
||||
}
|
||||
consentModel.addGrantedRole(role);
|
||||
}
|
||||
}
|
||||
if (consentRep.getGrantedProtocolMappers() != null) {
|
||||
for (String mapperId : consentRep.getGrantedProtocolMappers()) {
|
||||
ProtocolMapperModel protocolMapper = client.getProtocolMapperById(mapperId);
|
||||
if (protocolMapper == null) {
|
||||
throw new RuntimeException("Unable to find protocol mapper referenced in consent mappings of user " + user.getUsername() + ". Protocol mapper ID: " + mapperId);
|
||||
}
|
||||
consentModel.addGrantedProtocolMapper(protocolMapper);
|
||||
}
|
||||
}
|
||||
for (UserConsentRepresentation consentRep : userRep.getClientConsents()) {
|
||||
UserConsentModel consentModel = toModel(newRealm, consentRep);
|
||||
user.addConsent(consentModel);
|
||||
}
|
||||
}
|
||||
@@ -917,4 +892,53 @@ public class RepresentationToModel {
|
||||
return model;
|
||||
}
|
||||
|
||||
public static UserConsentModel toModel(RealmModel newRealm, UserConsentRepresentation consentRep) {
|
||||
ClientModel client = newRealm.getClientByClientId(consentRep.getClientId());
|
||||
if (client == null) {
|
||||
throw new RuntimeException("Unable to find client consent mappings for client: " + consentRep.getClientId());
|
||||
}
|
||||
|
||||
UserConsentModel consentModel = new UserConsentModel(client);
|
||||
|
||||
if (consentRep.getGrantedRealmRoles() != null) {
|
||||
for (String roleName : consentRep.getGrantedRealmRoles()) {
|
||||
RoleModel role = newRealm.getRole(roleName);
|
||||
if (role == null) {
|
||||
throw new RuntimeException("Unable to find realm role referenced in consent mappings of user. Role name: " + roleName);
|
||||
}
|
||||
consentModel.addGrantedRole(role);
|
||||
}
|
||||
}
|
||||
if (consentRep.getGrantedClientRoles() != null) {
|
||||
for (Map.Entry<String, List<String>> entry : consentRep.getGrantedClientRoles().entrySet()) {
|
||||
String clientId2 = entry.getKey();
|
||||
ClientModel client2 = newRealm.getClientByClientId(clientId2);
|
||||
if (client2 == null) {
|
||||
throw new RuntimeException("Unable to find client referenced in consent mappings. Client ID: " + clientId2);
|
||||
}
|
||||
for (String clientRoleName : entry.getValue()) {
|
||||
RoleModel clientRole = client2.getRole(clientRoleName);
|
||||
if (clientRole == null) {
|
||||
throw new RuntimeException("Unable to find client role referenced in consent mappings of user. Role name: " + clientRole + ", Client: " + clientId2);
|
||||
}
|
||||
consentModel.addGrantedRole(clientRole);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (consentRep.getGrantedProtocolMappers() != null) {
|
||||
for (Map.Entry<String, List<String>> protocolEntry : consentRep.getGrantedProtocolMappers().entrySet()) {
|
||||
String protocol = protocolEntry.getKey();
|
||||
for (String protocolMapperName : protocolEntry.getValue()) {
|
||||
ProtocolMapperModel protocolMapper = client.getProtocolMapperByName(protocol, protocolMapperName);
|
||||
if (protocolMapper == null) {
|
||||
throw new RuntimeException("Unable to find protocol mapper for protocol " + protocol + ", mapper name " + protocolMapperName);
|
||||
}
|
||||
|
||||
consentModel.addGrantedProtocolMapper(protocolMapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
return consentModel;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user