Skip to content

Commit

Permalink
Properly ignore some more configuration parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
sonOfRa committed Dec 5, 2022
1 parent 36a9735 commit a46e51d
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,13 @@

package de.adorsys.keycloak.config;

import de.adorsys.keycloak.config.properties.KeycloakConfigProperties;
import de.adorsys.keycloak.config.properties.RunConfigProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

@SpringBootApplication(proxyBeanMethods = false)
@EnableConfigurationProperties({KeycloakConfigProperties.class, RunConfigProperties.class})
@EnableConfigurationProperties(RunConfigProperties.class)
public class KeycloakConfigApplication {
public static void main(String[] args) {
// https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-application-exit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@
package de.adorsys.keycloak.config;

import de.adorsys.keycloak.config.properties.NormalizationConfigProperties;
import de.adorsys.keycloak.config.properties.NormalizationKeycloakConfigProperties;
import de.adorsys.keycloak.config.provider.KeycloakExportProvider;
import de.adorsys.keycloak.config.service.export.RealmNormalizationService;
import de.adorsys.keycloak.config.service.normalize.RealmNormalizationService;
import org.keycloak.representations.idm.RealmRepresentation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -40,7 +41,7 @@

@Component
@ConditionalOnProperty(prefix = "run", name = "operation", havingValue = "NORMALIZE")
@EnableConfigurationProperties(NormalizationConfigProperties.class)
@EnableConfigurationProperties({NormalizationConfigProperties.class, NormalizationKeycloakConfigProperties.class})
public class KeycloakConfigNormalizationRunner implements CommandLineRunner, ExitCodeGenerator {

private static final Logger logger = LoggerFactory.getLogger(KeycloakConfigNormalizationRunner.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import de.adorsys.keycloak.config.model.KeycloakImport;
import de.adorsys.keycloak.config.model.RealmImport;
import de.adorsys.keycloak.config.properties.ImportConfigProperties;
import de.adorsys.keycloak.config.properties.KeycloakConfigProperties;
import de.adorsys.keycloak.config.provider.KeycloakImportProvider;
import de.adorsys.keycloak.config.service.RealmImportService;
import org.slf4j.Logger;
Expand All @@ -47,7 +48,7 @@
* for backwards compatibility
*/
@ConditionalOnProperty(prefix = "run", name = "operation", havingValue = "IMPORT", matchIfMissing = true)
@EnableConfigurationProperties(ImportConfigProperties.class)
@EnableConfigurationProperties({ImportConfigProperties.class, KeycloakConfigProperties.class})
public class KeycloakConfigRunner implements CommandLineRunner, ExitCodeGenerator {
private static final Logger logger = LoggerFactory.getLogger(KeycloakConfigRunner.class);
private static final long START_TIME = System.currentTimeMillis();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;
import org.springframework.boot.context.properties.bind.DefaultValue;
import org.springframework.validation.annotation.Validated;

import java.net.URL;
Expand Down Expand Up @@ -70,18 +71,19 @@ public class KeycloakConfigProperties {
private final KeycloakAvailabilityCheck availabilityCheck;

public KeycloakConfigProperties(
String loginRealm,
String clientId,
String version, URL url,
String user,
@DefaultValue("master") String loginRealm,
@DefaultValue("admin-cli") String clientId,
String version,
URL url,
@DefaultValue("admin") String user,
String password,
String clientSecret,
String grantType,
boolean sslVerify,
@DefaultValue("") String clientSecret,
@DefaultValue("password") String grantType,
@DefaultValue("true") boolean sslVerify,
URL httpProxy,
KeycloakAvailabilityCheck availabilityCheck,
Duration connectTimeout,
Duration readTimeout
@DefaultValue KeycloakAvailabilityCheck availabilityCheck,
@DefaultValue("10s") Duration connectTimeout,
@DefaultValue("10s") Duration readTimeout
) {
this.loginRealm = loginRealm;
this.clientId = clientId;
Expand Down Expand Up @@ -161,7 +163,9 @@ public static class KeycloakAvailabilityCheck {
private final Duration retryDelay;

@SuppressWarnings("unused")
public KeycloakAvailabilityCheck(boolean enabled, Duration timeout, Duration retryDelay) {
public KeycloakAvailabilityCheck(@DefaultValue("false") boolean enabled,
@DefaultValue("120s") Duration timeout,
@DefaultValue("2s") Duration retryDelay) {
this.enabled = enabled;
this.timeout = timeout;
this.retryDelay = retryDelay;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*-
* ---license-start
* keycloak-config-cli
* ---
* Copyright (C) 2017 - 2021 adorsys GmbH & Co. KG @ https://adorsys.com
* ---
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ---license-end
*/

package de.adorsys.keycloak.config.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotNull;

/*
* Duplicated prefix keycloak. Since only one of the two classes is loaded (depending on configuration) this is fine.
* This saves us from having to define a keycloak address for the normalization usage, since we don't actually need to
* talk to a keycloak instance, and we only need to know the version.
*/
@ConfigurationProperties(prefix = "keycloak", ignoreUnknownFields = false)
@ConstructorBinding
@Validated
public class NormalizationKeycloakConfigProperties {

@NotNull
private final String version;

public NormalizationKeycloakConfigProperties(String version) {
this.version = version;
}

public String getVersion() {
return version;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
Expand All @@ -51,6 +52,7 @@
* This class heavily copy pastes code from KeycloakImportProvider. This can probably be reduced quite a bit by moving some code out to a shared class
*/
@Component
@ConditionalOnProperty(prefix = "run", name = "operation", havingValue = "NORMALIZE")
public class KeycloakExportProvider {

private static final Logger logger = LoggerFactory.getLogger(KeycloakExportProvider.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@
* ---license-end
*/

package de.adorsys.keycloak.config.service.export;
package de.adorsys.keycloak.config.service.normalize;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import de.adorsys.keycloak.config.KeycloakConfigRunner;
import de.adorsys.keycloak.config.properties.KeycloakConfigProperties;
import de.adorsys.keycloak.config.properties.NormalizationConfigProperties;
import de.adorsys.keycloak.config.properties.NormalizationKeycloakConfigProperties;
import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
import org.javers.core.diff.ListCompareAlgorithm;
Expand All @@ -39,6 +39,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;

import java.io.FileOutputStream;
Expand All @@ -49,6 +50,7 @@
import java.util.*;

@Service
@ConditionalOnProperty(prefix = "run", name = "operation", havingValue = "NORMALIZE")
public class RealmNormalizationService {

private static final Logger logger = LoggerFactory.getLogger(KeycloakConfigRunner.class);
Expand Down Expand Up @@ -98,11 +100,11 @@ public class RealmNormalizationService {
}

private final NormalizationConfigProperties normalizationConfigProperties;
private final KeycloakConfigProperties keycloakConfigProperties;
private final NormalizationKeycloakConfigProperties keycloakConfigProperties;

@Autowired
public RealmNormalizationService(NormalizationConfigProperties normalizationConfigProperties,
KeycloakConfigProperties keycloakConfigProperties) {
NormalizationKeycloakConfigProperties keycloakConfigProperties) {
this.normalizationConfigProperties = normalizationConfigProperties;
this.keycloakConfigProperties = keycloakConfigProperties;

Expand Down
11 changes: 0 additions & 11 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,6 @@ spring.main.lazy-initialization=true
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration

keycloak.version=@keycloak.version@
keycloak.login-realm=master
keycloak.user=admin
keycloak.client-secret=
keycloak.grant-type=password
keycloak.client-id=admin-cli
keycloak.ssl-verify=true
keycloak.connect-timeout=10s
keycloak.read-timeout=10s
keycloak.availability-check.enabled=false
keycloak.availability-check.timeout=120s
keycloak.availability-check.retry-delay=2s

logging.group.http=org.apache.http.wire
logging.group.realm-config=de.adorsys.keycloak.config.provider.KeycloakImportProvider
Expand Down

0 comments on commit a46e51d

Please sign in to comment.