Skip to content
Snippets Groups Projects
Commit 67094aa8 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-5422 add realm roles

parent 7cfbd8b7
No related branches found
No related tags found
No related merge requests found
...@@ -23,14 +23,25 @@ ...@@ -23,14 +23,25 @@
*/ */
package de.ozgcloud.operator.keycloak.realm; package de.ozgcloud.operator.keycloak.realm;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.RealmRepresentation;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.Named; import org.mapstruct.Named;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
import de.ozgcloud.operator.keycloak.realm.OzgCloudKeycloakRealmSpec.RealmRole;
import org.keycloak.representations.idm.RoleRepresentation;
import org.keycloak.representations.idm.RolesRepresentation;
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, unmappedSourcePolicy = ReportingPolicy.IGNORE) @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, unmappedSourcePolicy = ReportingPolicy.IGNORE)
interface KeycloakRealmMapper { interface KeycloakRealmMapper {
...@@ -42,10 +53,33 @@ interface KeycloakRealmMapper { ...@@ -42,10 +53,33 @@ interface KeycloakRealmMapper {
@Mapping(target = "internationalizationEnabled", constant = "true") @Mapping(target = "internationalizationEnabled", constant = "true")
@Mapping(target = "passwordPolicy", constant = "upperCase(1) and lowerCase(1) and length(8) and notUsername") @Mapping(target = "passwordPolicy", constant = "upperCase(1) and lowerCase(1) and length(8) and notUsername")
@Mapping(target = "actionTokenGeneratedByUserLifespan", constant = "900") @Mapping(target = "actionTokenGeneratedByUserLifespan", constant = "900")
@Mapping(target = "roles", source = "realmRoles",qualifiedByName ="roles")
public RealmRepresentation map(OzgCloudKeycloakRealmSpec realm); public RealmRepresentation map(OzgCloudKeycloakRealmSpec realm);
@Named("supportedLocales") @Named("supportedLocales")
default Set<String> mapPassword(OzgCloudKeycloakRealmSpec spec) { default Set<String> mapPassword(OzgCloudKeycloakRealmSpec spec) {
return Set.of("de"); return Set.of("de");
} }
@Named("roles")
default RolesRepresentation maprealmRoles(List<OzgCloudKeycloakRealmSpec.RealmRole> realRoles) {
RolesRepresentation roles = new RolesRepresentation();
List<String> roleNames = realRoles.stream()
.map(RealmRole::getName)
.collect(Collectors.toList());
List<RoleRepresentation> rolerepresentationList = new ArrayList<>(roleNames.size());
roleNames.forEach(roleName -> {
RoleRepresentation newRepresentation = new RoleRepresentation();
newRepresentation.setName(roleName);
rolerepresentationList.add(newRepresentation); } );
roles.setRealm(rolerepresentationList);
return roles;
}
} }
...@@ -57,6 +57,8 @@ public class KeycloakRealmReconciler implements Reconciler<OzgCloudKeycloakRealm ...@@ -57,6 +57,8 @@ public class KeycloakRealmReconciler implements Reconciler<OzgCloudKeycloakRealm
} catch (Exception e) { } catch (Exception e) {
LOG.warn(resource.getMetadata().getName() + " could not reconcile in namespace " + resource.getMetadata().getNamespace(), e); LOG.warn(resource.getMetadata().getName() + " could not reconcile in namespace " + resource.getMetadata().getNamespace(), e);
LOG.warn("STACKTRACE", e.getStackTrace());
resource.setStatus(OzgCloudKeycloakRealmStatus.builder().status(OzgCloudCustomResourceStatus.ERROR).message(e.getMessage()).build()); resource.setStatus(OzgCloudKeycloakRealmStatus.builder().status(OzgCloudCustomResourceStatus.ERROR).message(e.getMessage()).build());
return UpdateControl.updateStatus(resource).rescheduleAfter(Config.RECONCILER_RETRY_SECONDS); return UpdateControl.updateStatus(resource).rescheduleAfter(Config.RECONCILER_RETRY_SECONDS);
} }
......
...@@ -23,10 +23,15 @@ ...@@ -23,10 +23,15 @@
*/ */
package de.ozgcloud.operator.keycloak.realm; package de.ozgcloud.operator.keycloak.realm;
import java.util.Objects;
import java.util.Optional;
import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.Keycloak;
import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.RoleRepresentation;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import de.ozgcloud.operator.keycloak.KeycloakException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
......
...@@ -23,6 +23,11 @@ ...@@ -23,6 +23,11 @@
*/ */
package de.ozgcloud.operator.keycloak.realm; package de.ozgcloud.operator.keycloak.realm;
import java.util.List;
import java.util.ArrayList;
import org.keycloak.representations.idm.RoleRepresentation;
import org.keycloak.representations.idm.RolesRepresentation;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
...@@ -44,4 +49,21 @@ class OzgCloudKeycloakRealmSpec { ...@@ -44,4 +49,21 @@ class OzgCloudKeycloakRealmSpec {
private boolean keepAfterDelete; private boolean keepAfterDelete;
private String displayName; private String displayName;
@Builder.Default
private List<RealmRole> realmRoles= new ArrayList<>();
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
static class RealmRole {
@JsonProperty("name")
private String name;
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment