From 0f9571a910399ee3d9f64169a3da5b2be36d758d Mon Sep 17 00:00:00 2001 From: Martin Lowe Date: Wed, 20 Jul 2022 12:11:01 -0400 Subject: [PATCH 1/3] Update dev setup to be more clean and simple to setup --- .gitignore | 4 +++- Makefile | 10 +++++++--- config/.env.sample | 18 +++++++++++++++--- config/foundationdb/secret.properties.sample | 10 +++++----- config/secret.properties.sample | 10 +++------- 5 files changed, 33 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 8861b7c..a922e24 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,6 @@ nb-configuration.xml /config/**/*secret.properties /node_modules -/src/test/resources/schemas \ No newline at end of file +/src/test/resources/schemas +/.apt_generated/ +/.apt_generated_tests/ diff --git a/Makefile b/Makefile index 4b4c69a..f51c765 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,11 @@ +SHELL = /bin/bash +pre-setup:; + @echo "Creating environment file from template" + @rm -f .env && envsubst < config/.env.sample > .env setup:; - rm .env && envsubst < config/.env.sample > .env - rm ./config/secret.properties && envsubst < config/secret.properties.sample > config/secret.properties - rm ./config/foundationdb/secret.properties && envsubst < config/foundationdb/secret.properties.sample > config/foundationdb/secret.properties + @echo "Generating secret files from templates using environment file + variables" + @source .env && rm -f ./config/secret.properties && envsubst < config/secret.properties.sample > config/secret.properties + @source .env && rm -f ./config/foundationdb/secret.properties && envsubst < config/foundationdb/secret.properties.sample > config/foundationdb/secret.properties clean:; mvn clean install-yarn:; diff --git a/config/.env.sample b/config/.env.sample index b22b1d4..9734bb7 100644 --- a/config/.env.sample +++ b/config/.env.sample @@ -1,3 +1,15 @@ -WGAPI_MYSQL_PASSWORD=$MYSQL_PASSWORD -WGAPI_MYSQL_PORT=3306 -CONFIG_SECRET_PATH=$PWD/config/secret.properties \ No newline at end of file +export WGAPI_MYSQL_PASSWORD=$MARIADB_PASSWORD +export WGAPI_MYSQL_PORT=$MARIADB_PORT +export CONFIG_SECRET_PATH=$PWD/config/secret.properties + +export FOUNDATIONDB_DB_NAME=eclipsefoundation + +export KEYCLOAK_FOUNDATIONDB_REALM_URL=https://auth.eclipse.org/auth/realms/foundation + +# WG API -> FDB API connection settings. +export WGAPI_OIDCCLIENT_CLIENT_ID=sample +export WGAPI_OIDCCLIENT_CLIENT_CREDENTIALS=sample + +# FoundationDB API OIDC connection settings +export FOUNDATION_OIDC_CLIENT_ID=sample +export FOUNDATION_OIDC_CLIENT_CREDENTIALS=sample \ No newline at end of file diff --git a/config/foundationdb/secret.properties.sample b/config/foundationdb/secret.properties.sample index 9b86eb8..c363d69 100644 --- a/config/foundationdb/secret.properties.sample +++ b/config/foundationdb/secret.properties.sample @@ -1,9 +1,9 @@ quarkus.datasource.jdbc.url=jdbc:mariadb://localhost:$FOUNDATIONDB_DB_PORT/$FOUNDATIONDB_DB_NAME -quarkus.datasource.username=$MYSQL_USER -quarkus.datasource.password=$MYSQL_PASSWORD +quarkus.datasource.username=$MARIADB_USER +quarkus.datasource.password=$MARIADB_PASSWORD -quarkus.oauth2.introspection-url=http://localhost:8080/auth/realms/foundation -quarkus.oauth2.client-id=foundation -quarkus.oauth2.client-secret=sample +quarkus.oidc.auth-server-url=$KEYCLOAK_FOUNDATIONDB_REALM_URL +quarkus.oidc.client-id=$FOUNDATION_OIDC_CLIENT_ID +quarkus.oidc.credentials.secret=$FOUNDATION_OIDC_CLIENT_CREDENTIALS quarkus.http.port=8095 \ No newline at end of file diff --git a/config/secret.properties.sample b/config/secret.properties.sample index fbf2905..a0d4b16 100644 --- a/config/secret.properties.sample +++ b/config/secret.properties.sample @@ -1,7 +1,3 @@ -quarkus.oidc.auth-server-url=http://keycloak/auth/realms/foundation -quarkus.oidc.client-id=working_groups_api -quarkus.oidc.credentials.secret=sample - -# -# -# \ No newline at end of file +quarkus.oidc.auth-server-url=$KEYCLOAK_FOUNDATIONDB_REALM_URL +quarkus.oidc.client-id=$WGAPI_OIDCCLIENT_CLIENT_ID +quarkus.oidc.credentials.secret=$WGAPI_OIDCCLIENT_CLIENT_CREDENTIALS -- GitLab From e2e666a140ed0318ecef97aa6e6d2824a96f61f8 Mon Sep 17 00:00:00 2001 From: Martin Lowe Date: Thu, 21 Jul 2022 09:18:43 -0400 Subject: [PATCH 2/3] Iss #10 - Add system relations fetch code --- pom.xml | 14 ++--- .../org/eclipsefoundation/wg/api/SysAPI.java | 33 ++++++++++ .../wg/api/SysRelationData.java | 42 +++++++++++++ .../wg/services/SystemDataService.java | 63 +++++++++++++++++++ src/main/resources/application.properties | 4 +- 5 files changed, 146 insertions(+), 10 deletions(-) create mode 100644 src/main/java/org/eclipsefoundation/wg/api/SysAPI.java create mode 100644 src/main/java/org/eclipsefoundation/wg/api/SysRelationData.java create mode 100644 src/main/java/org/eclipsefoundation/wg/services/SystemDataService.java diff --git a/pom.xml b/pom.xml index cca2712..839d361 100644 --- a/pom.xml +++ b/pom.xml @@ -14,9 +14,10 @@ io.quarkus.platform 2.6.3.Final 3.0.0-M5 - 1.8.2 - 5.5.6.Final - 0.6.3-SNAPSHOT + 1.8.2 + 5.5.6.Final + 0.6.3-SNAPSHOT + 1.0-SNAPSHOT @@ -54,11 +55,6 @@ - - org.eclipsefoundation - quarkus-persistence - ${eclipse-api-version} - io.quarkus quarkus-resteasy @@ -69,7 +65,7 @@ io.quarkus - quarkus-oidc + quarkus-oidc-client io.quarkus diff --git a/src/main/java/org/eclipsefoundation/wg/api/SysAPI.java b/src/main/java/org/eclipsefoundation/wg/api/SysAPI.java new file mode 100644 index 0000000..d9f2e71 --- /dev/null +++ b/src/main/java/org/eclipsefoundation/wg/api/SysAPI.java @@ -0,0 +1,33 @@ +package org.eclipsefoundation.wg.api; + +import javax.annotation.security.RolesAllowed; +import javax.ws.rs.BeanParam; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import org.eclipsefoundation.core.service.APIMiddleware.BaseAPIParameters; + +import io.quarkus.oidc.client.filter.OidcClientFilter; + +/** + * FoundationDB API system API binding. + * + * @author Martin Lowe + * + */ +@Path("sys") +@OidcClientFilter +@Produces(MediaType.APPLICATION_JSON) +@RegisterRestClient(configKey = "fdndb-api") +public interface SysAPI { + + @GET + @Path("relations") + @RolesAllowed("fdb_read_sys") + Response get(@BeanParam BaseAPIParameters baseParams, @QueryParam("type") String type); +} diff --git a/src/main/java/org/eclipsefoundation/wg/api/SysRelationData.java b/src/main/java/org/eclipsefoundation/wg/api/SysRelationData.java new file mode 100644 index 0000000..b649e40 --- /dev/null +++ b/src/main/java/org/eclipsefoundation/wg/api/SysRelationData.java @@ -0,0 +1,42 @@ +package org.eclipsefoundation.wg.api; + +import javax.annotation.Nullable; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.google.auto.value.AutoValue; + +@AutoValue +@JsonDeserialize(builder = AutoValue_SysRelationData.Builder.class) +public abstract class SysRelationData { + public abstract String getRelation(); + + public abstract String getDescription(); + + public abstract boolean isActive(); + + public abstract String getType(); + + @Nullable + public abstract String getSortOrder(); + + public static Builder builder() { + return new AutoValue_SysRelationData.Builder(); + } + + @AutoValue.Builder + @JsonPOJOBuilder(withPrefix = "set") + public abstract static class Builder { + public abstract Builder setRelation(String relation); + + public abstract Builder setDescription(String description); + + public abstract Builder setActive(boolean isActive); + + public abstract Builder setType(String type); + + public abstract Builder setSortOrder(@Nullable String sortOrder); + + public abstract SysRelationData build(); + } +} diff --git a/src/main/java/org/eclipsefoundation/wg/services/SystemDataService.java b/src/main/java/org/eclipsefoundation/wg/services/SystemDataService.java new file mode 100644 index 0000000..974116a --- /dev/null +++ b/src/main/java/org/eclipsefoundation/wg/services/SystemDataService.java @@ -0,0 +1,63 @@ +package org.eclipsefoundation.wg.services; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.eclipsefoundation.core.service.APIMiddleware; +import org.eclipsefoundation.core.service.CachingService; +import org.eclipsefoundation.wg.api.SysAPI; +import org.eclipsefoundation.wg.api.SysRelationData; +import org.jboss.resteasy.specimpl.MultivaluedMapImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Service interface to retrieve system data from the foundation DB service. + * + * @author Martin Lowe + * + */ +public interface SystemDataService { + + /** + * Get the relation data from the system data endpoint for foundationdb. Retrieves only data related to the WG + * relations needed by this service. + * + * @return list of sys relation data for working group type relations. + */ + List get(); + + @ApplicationScoped + public static class DefaultSystemDataService implements SystemDataService { + public static final Logger LOGGER = LoggerFactory.getLogger(DefaultSystemDataService.class); + + public static final String WORKING_GROUPS_RELATION_TYPE = "WG"; + + @Inject + CachingService cache; + @Inject + APIMiddleware middle; + + @RestClient + @Inject + SysAPI sysAPI; + + @Override + public List get() { + Optional> relations = cache.get(WORKING_GROUPS_RELATION_TYPE, + new MultivaluedMapImpl<>(), SysRelationData.class, + () -> middle.getAll(i -> sysAPI.get(i, WORKING_GROUPS_RELATION_TYPE), SysRelationData.class)); + if (relations.isEmpty()) { + LOGGER.warn("Could not find any relations for type '{}', there may be a connection error", + WORKING_GROUPS_RELATION_TYPE); + return Collections.emptyList(); + } + return relations.get(); + } + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 7f6dfba..f5c5d93 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,4 @@ -quarkus.oauth.enabled=false +fdndb-api/mp-rest/url=http://localhost:8095 +fdndb-api/mp-rest/scope=javax.inject.Singleton + quarkus.oidc.enabled=false \ No newline at end of file -- GitLab From 8451196eb962b66bcb18ff6ec64e874339fc634a Mon Sep 17 00:00:00 2001 From: Martin Lowe Date: Thu, 21 Jul 2022 13:00:15 -0400 Subject: [PATCH 3/3] Fix secret samples to use oidc-client instead of oidc properties --- config/secret.properties.sample | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/secret.properties.sample b/config/secret.properties.sample index a0d4b16..9234736 100644 --- a/config/secret.properties.sample +++ b/config/secret.properties.sample @@ -1,3 +1,3 @@ -quarkus.oidc.auth-server-url=$KEYCLOAK_FOUNDATIONDB_REALM_URL -quarkus.oidc.client-id=$WGAPI_OIDCCLIENT_CLIENT_ID -quarkus.oidc.credentials.secret=$WGAPI_OIDCCLIENT_CLIENT_CREDENTIALS +quarkus.oidc-client.auth-server-url=$KEYCLOAK_FOUNDATIONDB_REALM_URL +quarkus.oidc-client.client-id=$WGAPI_OIDCCLIENT_CLIENT_ID +quarkus.oidc-client.credentials.secret=$WGAPI_OIDCCLIENT_CLIENT_CREDENTIALS -- GitLab