diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java index 8a92e32ac943a5d05850ff5d0d38a5358c7a0e96..28bba540623182bdf36b18f026d2c0d83eecb6b8 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java @@ -27,7 +27,6 @@ import java.util.Base64; import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.KeycloakBuilder; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; @@ -35,21 +34,30 @@ import org.springframework.context.annotation.Scope; import io.fabric8.kubernetes.api.model.Secret; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.Resource; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Configuration public class KeycloakClient { - @Autowired - private KubernetesClient kubernetesClient; + private final KubernetesClient kubernetesClient; @Bean @Scope("singleton") Keycloak createKeycloak() { + setProperties(); + return buildKeycloak(); + } + + private void setProperties() { System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true"); System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true"); System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true"); System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dump", "true"); System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dumpTreshold", "999999"); + } + + private Keycloak buildKeycloak() { return KeycloakBuilder.builder() .serverUrl("http://keycloak-keycloakx-http.keycloak") .realm("master") @@ -59,20 +67,20 @@ public class KeycloakClient { .build(); } - String getKeycloakAdminPassword() { + private String getKeycloakAdminPassword() { return decodeBase64(getKeycloakRealmAdminSecret() .get() .getData() .get("password")); } - Resource<Secret> getKeycloakRealmAdminSecret() { + private Resource<Secret> getKeycloakRealmAdminSecret() { return kubernetesClient.secrets() .inNamespace("keycloak") .withName("keycloak-admin-secret"); } - String decodeBase64(String base64String) { + private String decodeBase64(String base64String) { return new String(Base64.getDecoder().decode(base64String)); } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java index fd1e5ad4a2800edc7a50a8adad0a44976249cba5..2888571133c3612e3b00179fc20f7e6e98fe332c 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java @@ -31,17 +31,17 @@ import org.keycloak.admin.client.Keycloak; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.RoleRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @Component @Log public class KeycloakGenericRemoteService { - @Autowired - private Keycloak keycloak; + private final Keycloak keycloak; public Optional<ClientRepresentation> getByClientId(String clientId, String realm) { return keycloak.realm(realm).clients().findAll().stream() diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientPreconditionService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientPreconditionService.java index 93b4130f0c71831f12c882667e5038c1aebc34e3..758ee2232fe9dfd838e53e9b7140558e2b2a71ce 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientPreconditionService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientPreconditionService.java @@ -25,16 +25,16 @@ package de.ozgcloud.operator.keycloak.client; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakClientPreconditionService { - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; Optional<String> getReconcilePreconditionErrors(OzgCloudKeycloakClient resource) { diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java index 11f4f71bddbd9bbb8f8b9c181a861dd6bd85a75b..b881373fe98be29ae2f5a83505793bd7699c7563 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconciler.java @@ -26,7 +26,6 @@ package de.ozgcloud.operator.keycloak.client; import java.util.Optional; import java.util.logging.Level; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.Config; @@ -35,18 +34,18 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @ControllerConfiguration @Component @Log public class KeycloakClientReconciler implements Reconciler<OzgCloudKeycloakClient> { - @Autowired - private KeycloakClientService service; + private final KeycloakClientService service; - @Autowired - private KeycloakClientPreconditionService preconditionService; + private final KeycloakClientPreconditionService preconditionService; @Override public UpdateControl<OzgCloudKeycloakClient> reconcile(OzgCloudKeycloakClient resource, Context<OzgCloudKeycloakClient> context) { diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientRemoteService.java index 7c3d4c1bf7c6748c85a0df583d46c60faae9356d..7de2a8110af5f261118ca417d873686b32b265c3 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientRemoteService.java @@ -31,18 +31,18 @@ import org.keycloak.admin.client.resource.ClientResource; import org.keycloak.admin.client.resource.RealmResource; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RoleRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakResultParser; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @Component @Log class KeycloakClientRemoteService { - @Autowired - private Keycloak keycloak; + private final Keycloak keycloak; public void updateClient(ClientRepresentation client, String realm) { getClientResource(realm, client.getId()).update(client); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientService.java index 90e9671841a6e00f29ebc63ff904e8a0c9cb1956..3182648ff9b5e59ac3176bc87b27389a1e51125d 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/client/KeycloakClientService.java @@ -26,25 +26,22 @@ package de.ozgcloud.operator.keycloak.client; import java.util.List; import org.keycloak.representations.idm.ClientRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakClientService { - @Autowired - private KeycloakClientRemoteService remoteService; + private final KeycloakClientRemoteService remoteService; - @Autowired - private KeycloakGenericRemoteService genericRemoteService; + private final KeycloakGenericRemoteService genericRemoteService; - @Autowired - private ProtocolMapperRepresentationHelper mapperRepresentationBuilder; + private final ProtocolMapperRepresentationHelper mapperRepresentationBuilder; - @Autowired - private KeycloakClientMapper mapper; + private final KeycloakClientMapper mapper; void createOrUpdateClient(OzgCloudKeycloakClientSpec spec, String namespace) { genericRemoteService.getByClientId(spec.getClientId(), namespace) diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupMapper.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupMapper.java index 519f6617a41e3b3a206e37fc3331958579c69adf..7c7b782fd244c677b1a37d4bc0d1848225f74d6a 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupMapper.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupMapper.java @@ -38,10 +38,11 @@ import org.mapstruct.ReportingPolicy; interface KeycloakGroupMapper { @Mapping(target = "attributes", source = "attributes", qualifiedByName = "mapAttributes") - GroupRepresentation map(OzgCloudKeycloakGroupSpec group); + public GroupRepresentation map(OzgCloudKeycloakGroupSpec group); @Named("mapAttributes") default Map<String, List<String>> mapAttributes(List<OzgCloudKeycloakGroupSpec.Attribute> attributes) { - return attributes.stream().collect(Collectors.toMap(OzgCloudKeycloakGroupSpec.Attribute::getName, attribute -> List.of(attribute.getValue()))); + return attributes.stream() + .collect(Collectors.toMap(OzgCloudKeycloakGroupSpec.Attribute::getName, attribute -> List.of(attribute.getValue()))); } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupPreconditionService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupPreconditionService.java index 0f6571bf732fc8156724b2b52c980f4f18d5be05..56477e69bc54f2f90af087697dad20658a913db6 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupPreconditionService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupPreconditionService.java @@ -25,20 +25,19 @@ package de.ozgcloud.operator.keycloak.group; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakGroupPreconditionService { - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; - Optional<String> getReconcilePreconditionErrors(OzgCloudKeycloakGroup resource) { - - String namespace = resource.getMetadata().getNamespace(); + public Optional<String> getReconcilePreconditionErrors(OzgCloudKeycloakGroup resource) { + var namespace = resource.getMetadata().getNamespace(); if (!keycloakGenericRemoteService.realmExists(namespace)) { return Optional.of("Realm " + namespace + " does not yet exist"); @@ -46,4 +45,4 @@ class KeycloakGroupPreconditionService { return Optional.empty(); } -} +} \ No newline at end of file diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java index 7388466efab7780dab2f49aeec1d8ba70af92f47..35bb8e31b9fbd8a7c81092ef2348c22d5eb976e5 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconciler.java @@ -26,7 +26,6 @@ package de.ozgcloud.operator.keycloak.group; import java.util.Optional; import java.util.logging.Level; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.Config; @@ -35,24 +34,23 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @ControllerConfiguration @Component @Log public class KeycloakGroupReconciler implements Reconciler<OzgCloudKeycloakGroup> { - @Autowired - private KeycloakGroupService service; + private final KeycloakGroupService service; - @Autowired - private KeycloakGroupPreconditionService preconditionService; + private final KeycloakGroupPreconditionService preconditionService; @Override public UpdateControl<OzgCloudKeycloakGroup> reconcile(OzgCloudKeycloakGroup resource, Context<OzgCloudKeycloakGroup> context) { - try { - String crdName = resource.getMetadata().getName(); + var crdName = resource.getMetadata().getName(); log.info("Reconcile KeycloakGroup " + crdName); @@ -74,12 +72,12 @@ public class KeycloakGroupReconciler implements Reconciler<OzgCloudKeycloakGroup } } - UpdateControl<OzgCloudKeycloakGroup> buildStatusOk(OzgCloudKeycloakGroup resource) { + private UpdateControl<OzgCloudKeycloakGroup> buildStatusOk(OzgCloudKeycloakGroup resource) { resource.setStatus(OzgCloudKeycloakGroupStatus.builder().status(OzgCloudCustomResourceStatus.OK).message(null).build()); return UpdateControl.updateStatus(resource); } - UpdateControl<OzgCloudKeycloakGroup> buildStatusInProgress(OzgCloudKeycloakGroup resource, String errorMessage) { + private UpdateControl<OzgCloudKeycloakGroup> buildStatusInProgress(OzgCloudKeycloakGroup resource, String errorMessage) { log.log(Level.INFO, "Could not yet reconcile group " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace() + ": " + errorMessage); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupRemoteService.java index af4c33a57d55aebff5a65159c4d9fbe88d2d4b91..842187a201a03bce649819f7c57fe6da34ad77b8 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupRemoteService.java @@ -27,32 +27,30 @@ import java.util.Objects; import java.util.Optional; import java.util.logging.Level; -import javax.ws.rs.core.Response; - import org.keycloak.admin.client.Keycloak; import org.keycloak.representations.idm.GroupRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakResultParser; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @Component @Log class KeycloakGroupRemoteService { - @Autowired - private Keycloak keycloak; + private final Keycloak keycloak; - Optional<GroupRepresentation> getGroupByName(String groupName, String realm) { + public Optional<GroupRepresentation> getGroupByName(String groupName, String realm) { return keycloak.realm(realm).groups().groups() .stream().filter(group -> Objects.equals(groupName, group.getName())) .findFirst(); } - void createGroup(GroupRepresentation group, String realm) { + public void createGroup(GroupRepresentation group, String realm) { log.log(Level.FINE, "Creating group {0} in realm {1}", new Object[] { group.getName(), realm }); - Response response = keycloak.realm(realm).groups().add(group); + var response = keycloak.realm(realm).groups().add(group); KeycloakResultParser.parseCreatedResponse(response); } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupService.java index 4eaa2eddbee5b0543f7112a953e0ce6979fe86b3..e8783ffe8c0ebeebf3b215f9edabe73f22d6b86d 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupService.java @@ -25,19 +25,19 @@ package de.ozgcloud.operator.keycloak.group; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @Component class KeycloakGroupService { - @Autowired - private KeycloakGroupRemoteService remoteService; + private final KeycloakGroupRemoteService remoteService; - @Autowired - private KeycloakGroupMapper mapper; + private final KeycloakGroupMapper mapper; - void createGroup(OzgCloudKeycloakGroupSpec group, String realm) { + public void createGroup(OzgCloudKeycloakGroupSpec group, String realm) { Optional.of(group) .map(mapper::map) .filter(groupRepresentation -> remoteService.getGroupByName(group.getName(), realm).isEmpty()) diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java index 8b5e7bebf74cfe94492a642ad13b98bb22f31bdd..5af876447d55a10bf33180920c1e9d6a9a79fa2a 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java @@ -41,7 +41,7 @@ interface KeycloakRealmMapper { @Mapping(target = "defaultLocale", constant = "de") @Mapping(target = "internationalizationEnabled", constant = "true") @Mapping(target = "passwordPolicy", constant = "upperCase(1) and lowerCase(1) and length(8) and notUsername") - RealmRepresentation map(OzgCloudKeycloakRealmSpec realm); + public RealmRepresentation map(OzgCloudKeycloakRealmSpec realm); @Named("supportedLocales") default Set<String> mapPassword(OzgCloudKeycloakRealmSpec spec) { diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java index 4b62b2b7b131a179f96330657e862b6e6aecf690..2524770ebc04adbee486a454682fe7af6ecf6f51 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java @@ -25,7 +25,6 @@ package de.ozgcloud.operator.keycloak.realm; import java.util.logging.Level; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.Config; @@ -36,15 +35,16 @@ import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @ControllerConfiguration @Component @Log public class KeycloakRealmReconciler implements Reconciler<OzgCloudKeycloakRealm>, Cleaner<OzgCloudKeycloakRealm> { - @Autowired - private KeycloakRealmService service; + private final KeycloakRealmService service; @Override public UpdateControl<OzgCloudKeycloakRealm> reconcile(OzgCloudKeycloakRealm resource, Context<OzgCloudKeycloakRealm> context) { diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java index 97801f718bc4915bb5a61dee50eb55533f85f1e8..124f1d5dc65bcf9a39d05c279e8d8f4ac5b48150 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java @@ -25,20 +25,21 @@ package de.ozgcloud.operator.keycloak.realm; import org.keycloak.admin.client.Keycloak; import org.keycloak.representations.idm.RealmRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @Component class KeycloakRealmRemoteService { - @Autowired - Keycloak keycloak; + private final Keycloak keycloak; - void createRealm(RealmRepresentation realm) { + public void createRealm(RealmRepresentation realm) { keycloak.realms().create(realm); } - void deleteRealm(String realmName) { + public void deleteRealm(String realmName) { keycloak.realm(realmName).remove(); } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java index 6911ce510d6ff3187f86de6bf94794abb7c3e05e..279a05573ba927a7b84b4f76166785b1fb2641e1 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java @@ -26,24 +26,22 @@ package de.ozgcloud.operator.keycloak.realm; import java.util.Optional; import org.keycloak.representations.idm.RealmRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakRealmService { - @Autowired - private KeycloakRealmRemoteService remoteService; + private final KeycloakRealmRemoteService remoteService; - @Autowired - private KeycloakRealmMapper mapper; + private final KeycloakRealmMapper mapper; - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; - void createRealm(OzgCloudKeycloakRealmSpec realm, String realmName) { + public void createRealm(OzgCloudKeycloakRealmSpec realm, String realmName) { Optional.of(realm) .map(mapper::map) .map(realmRepresentation -> addRealmName(realmRepresentation, realmName)) @@ -56,7 +54,7 @@ class KeycloakRealmService { return realm; } - void deleteRealm(String realmName) { + public void deleteRealm(String realmName) { remoteService.deleteRealm(realmName); } } diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java index 6366465994d50b5f7f97acf82baa6c65e6135ba8..a2a19c68883187f986ebc18e7e1b912a5bd563c4 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java @@ -25,18 +25,18 @@ package de.ozgcloud.operator.keycloak.user; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; import de.ozgcloud.operator.keycloak.user.OzgCloudKeycloakUserSpec.KeycloakUserSpecClientRole; import de.ozgcloud.operator.keycloak.user.OzgCloudKeycloakUserSpec.KeycloakUserSpecUserGroup; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakUserPreconditionService { - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; public Optional<String> getPreconditionErrors(OzgCloudKeycloakUser user) { var namespace = user.getMetadata().getNamespace(); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java index 4e1d2f02fbfb611f550e9682ef5b0dedd7224d66..b38218f6504b5dc1c0d26f17109151f56695f0c5 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserRemoteService.java @@ -32,21 +32,20 @@ import org.keycloak.admin.client.resource.RealmResource; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RoleRepresentation; import org.keycloak.representations.idm.UserRepresentation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakException; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; import de.ozgcloud.operator.keycloak.KeycloakResultParser; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KeycloakUserRemoteService { - @Autowired - private Keycloak keycloak; + private final Keycloak keycloak; - @Autowired - private KeycloakGenericRemoteService keycloakGenericRemoteService; + private final KeycloakGenericRemoteService keycloakGenericRemoteService; public void createUser(UserRepresentation user, String namespace) { var realmResource = getRealm(namespace); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserService.java index 13e2cb942453183040d56a1cc07b7d2127d9eae3..c8343f80700a4d031455c212a3e7ce5a6896378f 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserService.java @@ -26,20 +26,19 @@ package de.ozgcloud.operator.keycloak.user; import java.util.Optional; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @Component class KeycloakUserService { - @Autowired - private KeycloakUserRemoteService remoteService; + private final KeycloakUserRemoteService remoteService; - @Autowired - private UserSecretService userSecretService; + private final UserSecretService userSecretService; - @Autowired - private KeycloakUserMapper userMapper; + private final KeycloakUserMapper userMapper; public void createOrUpdateUser(OzgCloudKeycloakUserSpec userSpec, String namespace) { diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KubernetesRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KubernetesRemoteService.java index c865115328e08f8c576fe0337b20a8594fdd4a6f..e7988e4725fa5e71eb10e97fd75fa77e3464c82f 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KubernetesRemoteService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KubernetesRemoteService.java @@ -1,19 +1,19 @@ package de.ozgcloud.operator.keycloak.user; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import io.fabric8.kubernetes.api.model.Secret; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.Resource; +import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; +@RequiredArgsConstructor @Log @Component class KubernetesRemoteService { - @Autowired - private KubernetesClient kubernetesClient; + private final KubernetesClient kubernetesClient; public Resource<Secret> getSecret(String namespace, String name) { log.info(String.format("KubernetesClient: Get %s secret from %s namespace.", name, namespace)); diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/KeycloakClientTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/KeycloakClientTest.java index 9ac65f4fc0d630c18cf5c33d2040da38b78e3984..64d1be69f681da74c8fc3ac60114478421832042 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/KeycloakClientTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/KeycloakClientTest.java @@ -23,12 +23,29 @@ */ package de.ozgcloud.operator.keycloak; +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.mockito.Mock; + +import io.fabric8.kubernetes.client.KubernetesClient; class KeycloakClientTest { - @Test - void shouldInitKeycloakClient() { - new KeycloakClient(); + @DisplayName("Create keycloak") + @Nested + class TestCreateKeycloak { + + @Mock + private KubernetesClient kubernetsClient; + + @Test + void shouldInitKeycloakClient() { + var keycloak = new KeycloakClient(kubernetsClient); + + assertThat(keycloak).isNotNull(); + } } } diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconcilerTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconcilerTest.java index c8f41130a340729d0bc529d78fed419219798e88..01b9a7c05e509a97e5c9ce7f9736f2788a137fb5 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconcilerTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientReconcilerTest.java @@ -39,8 +39,6 @@ import de.ozgcloud.operator.keycloak.OzgCloudCustomResourceStatus; class KeycloakClientReconcilerTest { - public static final String ERROR_MESSAGE = "ErrorMessage"; - @Spy @InjectMocks private KeycloakClientReconciler reconciler; @@ -54,6 +52,8 @@ class KeycloakClientReconcilerTest { @Nested class TestReconcile { + private static final String ERROR_MESSAGE = "ErrorMessage"; + @Test void shouldCallServiceAddClient() { OzgCloudKeycloakClient client = OzgCloudKeycloakClientTestFactory.create(); diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconcilerTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconcilerTest.java index c4eca85fbecda61936da1891720e9ebf3fdb9863..5e02bd50768c8afa95d5bb2a66acd798d0d8d308 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconcilerTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupReconcilerTest.java @@ -39,8 +39,6 @@ import de.ozgcloud.operator.keycloak.OzgCloudCustomResourceStatus; class KeycloakGroupReconcilerTest { - public static final String ERROR_MESSAGE = "ErrorMessage"; - @Spy @InjectMocks private KeycloakGroupReconciler reconciler; @@ -54,25 +52,26 @@ class KeycloakGroupReconcilerTest { @Nested class TestReconcile { + private static final String ERROR_MESSAGE = "ErrorMessage"; + private static final OzgCloudKeycloakGroup KEYCLOAK_GROUP = OzgCloudKeycloakGroupTestFactory.create(); + @Test void shouldCallServiceAddGroup() { - OzgCloudKeycloakGroup group = OzgCloudKeycloakGroupTestFactory.create(); - - reconciler.reconcile(group, null); + reconciler.reconcile(KEYCLOAK_GROUP, null); - verify(service).createGroup(group.getSpec(), OzgCloudKeycloakGroupTestFactory.METADATA_NAMESPACE); + verify(service).createGroup(KEYCLOAK_GROUP.getSpec(), OzgCloudKeycloakGroupTestFactory.METADATA_NAMESPACE); } @Test void shouldReturnUpdateStatus() { - var response = reconciler.reconcile(OzgCloudKeycloakGroupTestFactory.create(), null); + var response = reconciler.reconcile(KEYCLOAK_GROUP, null); assertThat(response.getResource()).isNotNull(); } @Test void shouldSetStatusOk() { - var response = reconciler.reconcile(OzgCloudKeycloakGroupTestFactory.create(), null); + var response = reconciler.reconcile(KEYCLOAK_GROUP, null); assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCloudCustomResourceStatus.OK); } @@ -81,7 +80,7 @@ class KeycloakGroupReconcilerTest { void shouldReturnInProgressStatusIfPreconditionsNotMet() { when(preconditionService.getReconcilePreconditionErrors(any())).thenReturn(Optional.of(ERROR_MESSAGE)); - var response = reconciler.reconcile(OzgCloudKeycloakGroupTestFactory.create(), null); + var response = reconciler.reconcile(KEYCLOAK_GROUP, null); assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCloudCustomResourceStatus.IN_PROGRESS); } diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupServiceTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupServiceTest.java index 1bc024a25ae520702044b8efa4a72640845a541a..b78cb0f74366340a21151c211e792a9ad8cc38fe 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupServiceTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/group/KeycloakGroupServiceTest.java @@ -52,43 +52,43 @@ class KeycloakGroupServiceTest { @Nested class TestCreateGroup { + private final static OzgCloudKeycloakGroupSpec KEYCLOAK_GROUP = OzgCloudKeycloakGroupSpecTestFactory.create(); + @Test void shouldCallGetGroupRemoteService() { var groupRepresentation = GroupRepresentationTestFactory.create(); when(mapper.map(any())).thenReturn(groupRepresentation); - service.createGroup(OzgCloudKeycloakGroupSpecTestFactory.create(), REALM); + service.createGroup(KEYCLOAK_GROUP, REALM); verify(remoteService).getGroupByName(OzgCloudKeycloakGroupSpecTestFactory.NAME, REALM); } @Test void shouldCallMapper() { - var group = OzgCloudKeycloakGroupSpecTestFactory.create(); - service.createGroup(group, REALM); - verify(mapper).map(group); + service.createGroup(KEYCLOAK_GROUP, REALM); + + verify(mapper).map(KEYCLOAK_GROUP); } @Test void shouldCreateGroupIfNotExists() { - var ozgGroup = OzgCloudKeycloakGroupSpecTestFactory.create(); var groupRepresentation = GroupRepresentationTestFactory.create(); when(remoteService.getGroupByName(OzgCloudKeycloakGroupSpecTestFactory.NAME, REALM)).thenReturn(Optional.empty()); - when(mapper.map(ozgGroup)).thenReturn(groupRepresentation); + when(mapper.map(KEYCLOAK_GROUP)).thenReturn(groupRepresentation); - service.createGroup(ozgGroup, REALM); + service.createGroup(KEYCLOAK_GROUP, REALM); verify(remoteService).createGroup(groupRepresentation, REALM); } @Test void shouldNotCreateGroupIfAlreadyExists() { - var ozgGroup = OzgCloudKeycloakGroupSpecTestFactory.create(); when(remoteService.getGroupByName(OzgCloudKeycloakGroupSpecTestFactory.NAME, REALM)).thenReturn(Optional.of(mock(GroupRepresentation.class))); - when(mapper.map(ozgGroup)).thenReturn(GroupRepresentationTestFactory.create()); + when(mapper.map(KEYCLOAK_GROUP)).thenReturn(GroupRepresentationTestFactory.create()); - service.createGroup(ozgGroup, REALM); + service.createGroup(KEYCLOAK_GROUP, REALM); verify(remoteService, never()).createGroup(any(), anyString()); }