Skip to content
Snippets Groups Projects
Commit 471c0ffb authored by Martin Lowe's avatar Martin Lowe :flag_ca:
Browse files

Merge branch 'malowe/main/10' into 'main'

Iss #10 - Add relations fetch for foundationDB wg code

See merge request eclipsefdn/it/api/eclipsefdn-working-groups-api!6
parents df7a0dd9 8451196e
No related branches found
No related tags found
1 merge request!6Iss #10 - Add relations fetch for foundationDB wg code
Pipeline #6975 passed
...@@ -41,4 +41,6 @@ nb-configuration.xml ...@@ -41,4 +41,6 @@ nb-configuration.xml
/config/**/*secret.properties /config/**/*secret.properties
/node_modules /node_modules
/src/test/resources/schemas /src/test/resources/schemas
\ No newline at end of file /.apt_generated/
/.apt_generated_tests/
SHELL = /bin/bash
pre-setup:;
@echo "Creating environment file from template"
@rm -f .env && envsubst < config/.env.sample > .env
setup:; setup:;
rm .env && envsubst < config/.env.sample > .env @echo "Generating secret files from templates using environment file + variables"
rm ./config/secret.properties && envsubst < config/secret.properties.sample > config/secret.properties @source .env && rm -f ./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 @source .env && rm -f ./config/foundationdb/secret.properties && envsubst < config/foundationdb/secret.properties.sample > config/foundationdb/secret.properties
clean:; clean:;
mvn clean mvn clean
install-yarn:; install-yarn:;
......
WGAPI_MYSQL_PASSWORD=$MYSQL_PASSWORD export WGAPI_MYSQL_PASSWORD=$MARIADB_PASSWORD
WGAPI_MYSQL_PORT=3306 export WGAPI_MYSQL_PORT=$MARIADB_PORT
CONFIG_SECRET_PATH=$PWD/config/secret.properties export CONFIG_SECRET_PATH=$PWD/config/secret.properties
\ No newline at end of file
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
quarkus.datasource.jdbc.url=jdbc:mariadb://localhost:$FOUNDATIONDB_DB_PORT/$FOUNDATIONDB_DB_NAME quarkus.datasource.jdbc.url=jdbc:mariadb://localhost:$FOUNDATIONDB_DB_PORT/$FOUNDATIONDB_DB_NAME
quarkus.datasource.username=$MYSQL_USER quarkus.datasource.username=$MARIADB_USER
quarkus.datasource.password=$MYSQL_PASSWORD quarkus.datasource.password=$MARIADB_PASSWORD
quarkus.oauth2.introspection-url=http://localhost:8080/auth/realms/foundation quarkus.oidc.auth-server-url=$KEYCLOAK_FOUNDATIONDB_REALM_URL
quarkus.oauth2.client-id=foundation quarkus.oidc.client-id=$FOUNDATION_OIDC_CLIENT_ID
quarkus.oauth2.client-secret=sample quarkus.oidc.credentials.secret=$FOUNDATION_OIDC_CLIENT_CREDENTIALS
quarkus.http.port=8095 quarkus.http.port=8095
\ No newline at end of file
quarkus.oidc.auth-server-url=http://keycloak/auth/realms/foundation quarkus.oidc-client.auth-server-url=$KEYCLOAK_FOUNDATIONDB_REALM_URL
quarkus.oidc.client-id=working_groups_api quarkus.oidc-client.client-id=$WGAPI_OIDCCLIENT_CLIENT_ID
quarkus.oidc.credentials.secret=sample quarkus.oidc-client.credentials.secret=$WGAPI_OIDCCLIENT_CLIENT_CREDENTIALS
#
#
#
\ No newline at end of file
...@@ -14,9 +14,10 @@ ...@@ -14,9 +14,10 @@
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id> <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>2.6.3.Final</quarkus.platform.version> <quarkus.platform.version>2.6.3.Final</quarkus.platform.version>
<surefire-plugin.version>3.0.0-M5</surefire-plugin.version> <surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
<auto-value.version>1.8.2</auto-value.version> <auto-value.version>1.8.2</auto-value.version>
<hibernate.version>5.5.6.Final</hibernate.version> <hibernate.version>5.5.6.Final</hibernate.version>
<eclipse-api-version>0.6.3-SNAPSHOT</eclipse-api-version> <eclipse-api-version>0.6.3-SNAPSHOT</eclipse-api-version>
<fdndb-api-version>1.0-SNAPSHOT</fdndb-api-version>
</properties> </properties>
<repositories> <repositories>
<repository> <repository>
...@@ -54,11 +55,6 @@ ...@@ -54,11 +55,6 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.eclipsefoundation</groupId>
<artifactId>quarkus-persistence</artifactId>
<version>${eclipse-api-version}</version>
</dependency>
<dependency> <dependency>
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId> <artifactId>quarkus-resteasy</artifactId>
...@@ -69,7 +65,7 @@ ...@@ -69,7 +65,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-oidc</artifactId> <artifactId>quarkus-oidc-client</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
......
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);
}
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();
}
}
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<SysRelationData> 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<SysRelationData> get() {
Optional<List<SysRelationData>> 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();
}
}
}
quarkus.oauth.enabled=false fdndb-api/mp-rest/url=http://localhost:8095
fdndb-api/mp-rest/scope=javax.inject.Singleton
quarkus.oidc.enabled=false quarkus.oidc.enabled=false
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment