diff --git a/app/pom.xml b/app/pom.xml index 6656779..d444397 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -119,6 +119,11 @@ quarkus-oidc + + io.quarkus + quarkus-smallrye-jwt + + io.quarkus quarkus-resteasy-jackson @@ -290,7 +295,6 @@ ${project.build.outputDirectory}/application.properties ${project.build.outputDirectory}/application-prod.properties - ${project.build.outputDirectory}/application-dev.properties ${project.build.outputDirectory}/application-test.properties false @@ -307,7 +311,6 @@ ${project.build.outputDirectory}/application.properties ${project.build.outputDirectory}/application-prod.properties - ${project.build.outputDirectory}/application-dev.properties ${project.build.outputDirectory}/application-test.properties true diff --git a/app/src/main/java/io/apicurio/designer/auth/AuthorizedInterceptor.java b/app/src/main/java/io/apicurio/designer/auth/AuthorizedInterceptor.java index 87d779a..0ad8aef 100644 --- a/app/src/main/java/io/apicurio/designer/auth/AuthorizedInterceptor.java +++ b/app/src/main/java/io/apicurio/designer/auth/AuthorizedInterceptor.java @@ -43,7 +43,7 @@ public class AuthorizedInterceptor { @Inject SecurityIdentity securityIdentity; - @ConfigProperty(name = "app.authn.enabled") + @ConfigProperty(name = "quarkus.oidc.tenant-enabled") boolean authenticationEnabled; @AroundInvoke diff --git a/app/src/main/java/io/apicurio/designer/config/ApiDesignerConfig.java b/app/src/main/java/io/apicurio/designer/config/ApiDesignerConfig.java index 20d3481..60923d6 100644 --- a/app/src/main/java/io/apicurio/designer/config/ApiDesignerConfig.java +++ b/app/src/main/java/io/apicurio/designer/config/ApiDesignerConfig.java @@ -83,7 +83,7 @@ public class ApiDesignerConfig { * Constructor. * @param kcProperties */ - public ApiDesignerConfig(@DesignerProperties(value = {"designer.ui.config.auth.keycloak"}) Properties kcProperties) { + public ApiDesignerConfig(@DesignerProperties(value = {"designer.ui.config.auth"}) Properties kcProperties) { this.keycloakConfig = new HashMap<>(); kcProperties.stringPropertyNames().forEach(key -> keycloakConfig.put(key, kcProperties.get(key))); } diff --git a/app/src/main/resources/application-dev.properties b/app/src/main/resources/application-dev.properties deleted file mode 100644 index 6f3252b..0000000 --- a/app/src/main/resources/application-dev.properties +++ /dev/null @@ -1,6 +0,0 @@ -#LOGGING -%dev.quarkus.log.level=${LOG_LEVEL:INFO} -%dev.quarkus.log.category."io.apicurio".level=${REGISTRY_LOG_LEVEL:DEBUG} -%dev.quarkus.log.console.enable=true - -%dev.quarkus.http.port=${HTTP_PORT:8080} \ No newline at end of file diff --git a/app/src/main/resources/application-prod.properties b/app/src/main/resources/application-prod.properties index f15129d..f03334c 100644 --- a/app/src/main/resources/application-prod.properties +++ b/app/src/main/resources/application-prod.properties @@ -1,8 +1,10 @@ # === Prod profile - see README # HTTP Port -%prod.quarkus.http.port=${HTTP_PORT:8080} +quarkus.http.port=8080 #LOGGING -%prod.quarkus.log.level=${LOG_LEVEL:INFO} -%prod.quarkus.log.console.enable=true -%prod.quarkus.log.category."io.apicurio".level=${REGISTRY_LOG_LEVEL:INFO} +apicurio.log.level=INFO +quarkus.log.level=INFO +quarkus.log.console.enable=true +quarkus.log.category."io.apicurio".level=${apicurio.log.level} + diff --git a/app/src/main/resources/application-test.properties b/app/src/main/resources/application-test.properties index 3c33bad..8b0e177 100644 --- a/app/src/main/resources/application-test.properties +++ b/app/src/main/resources/application-test.properties @@ -1,6 +1,7 @@ #LOGGING -%test.quarkus.log.level=${LOG_LEVEL:WARN} -%test.quarkus.log.category."io.apicurio".level=${REGISTRY_LOG_LEVEL:INFO} -%test.quarkus.log.console.enable=true -%test.quarkus.http.test-port=0 \ No newline at end of file +apicurio.log.level=INFO +quarkus.log.level=WARN +quarkus.log.category."io.apicurio".level=${apicurio.log.level} +quarkus.log.console.enable=true +quarkus.http.test-port=0 \ No newline at end of file diff --git a/app/src/main/resources/application.properties b/app/src/main/resources/application.properties index aa225d7..235e60d 100644 --- a/app/src/main/resources/application.properties +++ b/app/src/main/resources/application.properties @@ -3,11 +3,11 @@ # System Info -app.name=Apicurio API Designer -app.description=The spiritual successor to Apicurio Studio - used as the basis for Red Hat OpenShift API Designer. -app.version=${project.version} -app.date=${timestamp} -app.git.commit-id=${git.commit.id.full} +apicurio.app.name=Apicurio API Designer +apicurio.app.description=The spiritual successor to Apicurio Studio - used as the basis for Red Hat OpenShift API Designer. +apicurio.app.version=${project.version} +apicurio.app.date=${timestamp} +apicurio.app.git.commit-id=${git.commit.id.full} # Build @@ -15,30 +15,31 @@ quarkus.package.type=fast-jar # Logging +apicurio.log.level=DEBUG quarkus.log.console.format=%d{YYYY-MM-dd HH:mm:ss} %p [%C] (%t) %m%n quarkus.log.min-level=TRACE -quarkus.log.level=${DESIGNER_LOG_LEVEL:INFO} -quarkus.log.category."io.apicurio".level=${DESIGNER_LOG_LEVEL_APICURIO:${quarkus.log.level}} +quarkus.log.level=INFO +quarkus.log.category."io.apicurio".level=${apicurio.log.level} quarkus.log.console.enable=true # HTTP -quarkus.http.port=${DESIGNER_HTTP_PORT:8080} +quarkus.http.port=8080 %test.quarkus.http.test-port=0 # Database apicurio.storage.init=true -apicurio.storage.db-kind=${DESIGNER_STORAGE_DB_KIND:h2} -apicurio.datasource.url=${DESIGNER_STORAGE_DATASOURCE_URL:jdbc:h2:mem:designer} -apicurio.datasource.username=${DESIGNER_STORAGE_DATASOURCE_USERNAME:sa} -apicurio.datasource.password=${DESIGNER_STORAGE_DATASOURCE_PASSWORD:sa} +apicurio.storage.db-kind=h2 +apicurio.datasource.url=jdbc:h2:mem:designer +apicurio.datasource.username=sa +apicurio.datasource.password=sa apicurio.datasource.jdbc.initial-size=20 apicurio.datasource.jdbc.min-size=20 apicurio.datasource.jdbc.max-size=100 # Access logs -quarkus.http.access-log.enabled=${DESIGNER_ACCESS_LOG_ENABLE:false} +quarkus.http.access-log.enabled=false quarkus.http.access-log.pattern="apicurio-registry.access method="%{METHOD}" path="%{REQUEST_URL}" response_code="%{RESPONSE_CODE}" response_time="%{RESPONSE_TIME}" remote_ip="%{REMOTE_IP}" remote_user="%{REMOTE_USER}" user_agent="%{i,User-Agent}"" quarkus.http.access-log.exclude-pattern=/health/.* @@ -50,27 +51,22 @@ designer.redirects.root=/,/apis/designer/v0/system/info ## Always enable CORS quarkus.http.cors=true -quarkus.http.cors.origins=${DESIGNER_CORS_ALLOWED_ORIGINS:http://localhost:8888} -quarkus.http.cors.methods=${DESIGNER_CORS_ALLOWED_METHODS:GET,PUT,POST,PATCH,DELETE,OPTIONS} -quarkus.http.cors.headers=${DESIGNER_CORS_ALLOWED_HEADERS:x-designer-description,x-designer-name,x-designer-type,x-designer-origin,access-control-request-method,access-control-allow-credentials,access-control-allow-origin,access-control-allow-headers,authorization,content-type} +quarkus.http.cors.origins=http://localhost:8888 +quarkus.http.cors.methods=GET,PUT,POST,PATCH,DELETE,OPTIONS +quarkus.http.cors.headers=x-designer-description,x-designer-name,x-designer-type,x-designer-origin,access-control-request-method,access-control-allow-credentials,access-control-allow-origin,access-control-allow-headers,authorization,content-type ## Authentication -app.authn.enabled=${AUTH_ENABLED:false} -app.authn.token.endpoint=${OIDC_TOKENT_ENDPOINT:https://auth.apicur.io/auth/realms/apicurio-local} +apicurio.authn.basic-client-credentials.enabled=false +apicurio.authn.basic-client-credentials.cache-expiration=5 +apicurio.authn.basic-client-credentials.enabled.dynamic.allow=true -designer.config.auth.oidc.url=${OIDC_URL:https://auth.apicur.io/auth/realms/apicurio-local} - -app.authn.basic-auth-client-credentials.enabled=${CLIENT_CREDENTIALS_BASIC_AUTH_ENABLED:false} -app.authn.basic-auth-client-credentials.cache-expiration=${CLIENT_CREDENTIALS_BASIC_CACHE_EXPIRATION:10} -app.authn.basic-auth-client-credentials.enabled.dynamic.allow=true - -app.authn.audit.log.prefix=api-designer.audit -app.authn.client-id=${OIDC_API_CLIENT_ID:designer-api} -app.authn.client-secret=${OIDC_API_CLIENT_SECRET:designer-api-secret} +apicurio.authn.audit.log.prefix=api-designer.audit quarkus.oidc.enabled=true -quarkus.oidc.auth-server-url=${designer.config.auth.oidc.url} -quarkus.oidc.tenant-enabled=${app.authn.enabled} -quarkus.oidc.client-id=${app.authn.client-id} +quarkus.oidc.auth-server-url=https://auth.apicur.io/auth/realms/apicurio-local +quarkus.oidc.token-path=https://auth.apicur.io/auth/realms/apicurio-local/protocol/openid-connect/token +quarkus.oidc.tenant-enabled=false +quarkus.oidc.client-id=designer-api +quarkus.oidc.client-secret=designer-api-secret quarkus.oidc.application-type=service diff --git a/app/src/test/java/io/apicurio/designer/test/profile/MultitenancyAuthTestProfile.java b/app/src/test/java/io/apicurio/designer/test/profile/MultitenancyAuthTestProfile.java deleted file mode 100644 index 6f8fdcb..0000000 --- a/app/src/test/java/io/apicurio/designer/test/profile/MultitenancyAuthTestProfile.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2022 Red Hat - * - * 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. - */ - -package io.apicurio.designer.test.profile; - -import io.apicurio.designer.test.resource.JWSMockResource; -import io.quarkus.test.junit.QuarkusTestProfile; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class MultitenancyAuthTestProfile implements QuarkusTestProfile { - - @Override - public Map getConfigOverrides() { - Map props = new HashMap<>(); - props.put("app.enable.multitenancy", "true"); - props.put("smallrye.jwt.sign.key.location", "privateKey.jwk"); - - return props; - } - - @Override - public List testResources() { - return List.of( - new TestResourceEntry(JWSMockResource.class)); - } -} diff --git a/app/src/test/java/io/apicurio/designer/test/resource/JWSMockResource.java b/app/src/test/java/io/apicurio/designer/test/resource/JWSMockResource.java index e5cb846..48daac6 100644 --- a/app/src/test/java/io/apicurio/designer/test/resource/JWSMockResource.java +++ b/app/src/test/java/io/apicurio/designer/test/resource/JWSMockResource.java @@ -95,9 +95,10 @@ public Map start() { Map props = new HashMap<>(); //Set registry properties - props.put("app.authn.enabled", "true"); - props.put("designer.config.auth.oidc.url", authServerUrl); - props.put("app.authn.token.endpoint", tokenEndpoint); + props.put("quarkus.oidc.tenant-enabled", "true"); + props.put("quarkus.oidc.auth-server-url", authServerUrl); + props.put("quarkus.oidc.token-path", tokenEndpoint); + return props; } diff --git a/app/src/test/java/io/apicurio/designer/test/run/rest/v0/h2/DesignsResourceAuthTest.java b/app/src/test/java/io/apicurio/designer/test/run/rest/v0/h2/DesignsResourceAuthTest.java index 6a0f5b2..374ed46 100644 --- a/app/src/test/java/io/apicurio/designer/test/run/rest/v0/h2/DesignsResourceAuthTest.java +++ b/app/src/test/java/io/apicurio/designer/test/run/rest/v0/h2/DesignsResourceAuthTest.java @@ -35,7 +35,7 @@ class DesignsResourceAuthTest { @Inject DesignsResourceTestShared drts; - @ConfigProperty(name = "app.authn.token.endpoint") + @ConfigProperty(name = "quarkus.oidc.token-path") String tokenEndpoint; private List original; diff --git a/pom.xml b/pom.xml index 385ea35..50518f4 100644 --- a/pom.xml +++ b/pom.xml @@ -103,13 +103,13 @@ - 3.6.6 + 3.8.2 dev 1.18.30 - 0.2.6.Final + 1.1.0.CR2 0.1.18.Final 1.3.5 10.12.7