diff --git a/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/adapter/README.txt b/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/adapter/README.txt deleted file mode 100644 index f9f3a064a8060a6fac7ac2caba057ac521732a1d..0000000000000000000000000000000000000000 --- a/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/adapter/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -Put here classes from adapter layer : -Data transformers, adapters, presenters or DAO. Abstraction of external libraries for -application or business use. -Web-services point, sockets, database connection and pool, GUI, file system, framework, -external libraries. \ No newline at end of file diff --git a/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/application/DummyAuthzServerSoapui.java b/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/application/DummyAuthzServerSoapui.java index 862e5f24be89d87e10aaf353fe20cff37796de94..dc4d502499269f4b51d20e637b0d4bd40a358db9 100644 --- a/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/application/DummyAuthzServerSoapui.java +++ b/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/application/DummyAuthzServerSoapui.java @@ -3,26 +3,45 @@ package net.ihe.gazelle.app.accesstokenproviderapi.application; import net.ihe.gazelle.app.accesstokenproviderapi.business.AccessTokenRequest; import net.ihe.gazelle.app.accesstokenproviderapi.business.SymmetricSignature; import net.ihe.gazelle.app.audienceretriever.adapter.AudienceSecretRetrieverForSoapui; -import net.ihe.gazelle.app.audienceretriever.adapter.AudienceSecretRetrieverImpl; +import net.ihe.gazelle.app.audienceretriever.application.AudienceSecretRetriever; import net.ihe.gazelle.modelapi.sb.business.EncodingException; import net.ihe.gazelle.sb.iua.business.TokenType; import java.time.Duration; -public class DummyAuthzServerSoapui implements DummyAuthzServer { +public class DummyAuthzServerSoapui implements DummyAuthzServer { private static final String ALGORITHM = "HS256"; private static final String ISSUER = "https://ehealthsuisse.ihe-europe.net/access-token-provider"; private static final TokenType TOKEN_TYPE = TokenType.JWT; private static final Duration DURATION = Duration.ofHours(1); + private AudienceSecretRetriever audienceSecretRetriever; + /** + * Default constructor for the class. + */ + public DummyAuthzServerSoapui() { + audienceSecretRetriever = new AudienceSecretRetrieverForSoapui(); + } + + /** + * Setter for the audienceSecretRetriever property. + * + * @param audienceSecretRetriever value to set to the property. + */ + public void setAudienceSecretRetriever(AudienceSecretRetriever audienceSecretRetriever) { + this.audienceSecretRetriever = audienceSecretRetriever; + } + /** + * {@inheritDoc} + */ @Override public byte[] getAccessToken(String userId, String audienceId, String purposeOfUse, String resourceId) { //todo purposeOfUse and resourceId are not yet implemented TokenGenerator tokenGenerator = new TokenGenerator(); - tokenGenerator.setAudienceSecretRetriever(new AudienceSecretRetrieverForSoapui()); + tokenGenerator.setAudienceSecretRetriever(audienceSecretRetriever); return getTokenGenerator(userId, audienceId, tokenGenerator); } diff --git a/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/application/README.txt b/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/application/README.txt deleted file mode 100644 index 13b8d86e92813836491d776f448dfd3f0a81628f..0000000000000000000000000000000000000000 --- a/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/application/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -Put here classes from application layer : -Use cases. Business elements applied in an application context or scenario. \ No newline at end of file diff --git a/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/business/README.txt b/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/business/README.txt deleted file mode 100644 index 277b09a0363f09d1d11ebcc56460392a69e4b60b..0000000000000000000000000000000000000000 --- a/access-token-provider-api/src/main/java/net/ihe/gazelle/app/accesstokenproviderapi/business/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -Put here classes from business layer : -Business model, rules and constraints. Always true. Independent from the application. \ No newline at end of file diff --git a/access-token-provider-api/src/test/java/net/ihe/gazelle/app/accesstokenproviderapi/application/DummyAuthzServerSoapuiTest.java b/access-token-provider-api/src/test/java/net/ihe/gazelle/app/accesstokenproviderapi/application/DummyAuthzServerSoapuiTest.java index acbfc3702e60189edac7735182c33ca91c848ddb..b59565da0e2c4d4426e22f5da44dda6de11fb78c 100644 --- a/access-token-provider-api/src/test/java/net/ihe/gazelle/app/accesstokenproviderapi/application/DummyAuthzServerSoapuiTest.java +++ b/access-token-provider-api/src/test/java/net/ihe/gazelle/app/accesstokenproviderapi/application/DummyAuthzServerSoapuiTest.java @@ -1,5 +1,6 @@ package net.ihe.gazelle.app.accesstokenproviderapi.application; +import net.ihe.gazelle.app.audienceretriever.application.AudienceSecretRetriever; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -11,7 +12,8 @@ class DummyAuthzServerSoapuiTest { @Test public void test() { DummyAuthzServerSoapui dummyAuthzServer = new DummyAuthzServerSoapui(); + dummyAuthzServer.setAudienceSecretRetriever((String audience) -> "secret"); + assertNotNull(dummyAuthzServer.getAccessToken(SUBJECT, AUDIENCE, null, null)); } - } diff --git a/audience-retriever/pom.xml b/audience-retriever/pom.xml index a191e10242df4e5fed6f549f4c7e83a64709bd36..df3b5e911c0a3c63d91769345822d9f8bcfb9d28 100644 --- a/audience-retriever/pom.xml +++ b/audience-retriever/pom.xml @@ -32,6 +32,14 @@ <artifactId>framework.preferences-model-api</artifactId> <version>1.0.0</version> </dependency> + + <!-- Implementation of Operational Preferences --> + <dependency> + <groupId>net.ihe.gazelle</groupId> + <artifactId>framework.operational-preferences-service</artifactId> + <version>1.0.0</version> + </dependency> + </dependencies> </project> diff --git a/dummy-authorization-server-service/pom.xml b/dummy-authorization-server-service/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..b494a152864051db6b8c3bd11ccbbf2a36f97bc5 --- /dev/null +++ b/dummy-authorization-server-service/pom.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>app.access-token-provider</artifactId> + <groupId>net.ihe.gazelle</groupId> + <version>1.0.0-SNAPSHOT</version> + </parent> + + <groupId>net.ihe.gazelle</groupId> + <artifactId>app.dummy-authorization-server-service</artifactId> + <name>Dummy Authorization Server Service</name> + <version>1.0.0-SNAPSHOT</version> + <packaging>war</packaging> + + + <dependencies> + <dependency> + <groupId>javax</groupId> + <artifactId>javaee-api</artifactId> + <version>8.0.1</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>net.ihe.gazelle</groupId> + <artifactId>app.access-token-provider-api</artifactId> + <version>1.0.0-SNAPSHOT</version> + <scope>compile</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file diff --git a/dummy-authorization-server-service/src/main/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/AuthorizationServerService.java b/dummy-authorization-server-service/src/main/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/AuthorizationServerService.java new file mode 100644 index 0000000000000000000000000000000000000000..b0604fc90b89739515e7b17b044708a9dc73aff1 --- /dev/null +++ b/dummy-authorization-server-service/src/main/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/AuthorizationServerService.java @@ -0,0 +1,28 @@ +package net.ihe.gazelle.app.dummyauthorizationserverservice.adapter; + + +import net.ihe.gazelle.app.accesstokenproviderapi.application.DummyAuthzServer; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.ext.Provider; +import java.nio.charset.StandardCharsets; + +@Provider +@Path(value="/mock-token") +public class AuthorizationServerService { + + @GET + public byte[] getAccessToken(String userId, String audienceId, String purposeOfUse, String resourceId){ +// TODO Put real implementation but it doesn't work right now +// DummyAuthzServer dummyAuthzServer = new DummyAuthzServerSoapui(); + DummyAuthzServer dummyAuthzServer = new DummyAuthzServer() { + @Override + public byte[] getAccessToken(String userId, String audienceId, String purposeOfUse, String resourceId) { + return "Tartes aux pommes".getBytes(StandardCharsets.UTF_8); + } + }; + return dummyAuthzServer.getAccessToken(userId, audienceId, purposeOfUse, resourceId); + } + +} diff --git a/dummy-authorization-server-service/src/main/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/DummyAuthorizationServerServiceApplication.java b/dummy-authorization-server-service/src/main/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/DummyAuthorizationServerServiceApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..90f6d456b3bdaf8c7aba3e1ca966b1388d6c72a4 --- /dev/null +++ b/dummy-authorization-server-service/src/main/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/DummyAuthorizationServerServiceApplication.java @@ -0,0 +1,23 @@ +package net.ihe.gazelle.app.dummyauthorizationserverservice.adapter; + +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; +import java.util.HashSet; +import java.util.Set; + +/** + * Our Application + */ +@ApplicationPath("/") +public class DummyAuthorizationServerServiceApplication extends Application { + + /** + * {@inheritDoc} + */ + @Override + public Set<Class<?>> getClasses() { + Set<Class<?>> s = new HashSet<>(); + s.add(AuthorizationServerService.class); + return s; + } +} diff --git a/dummy-authorization-server-service/src/main/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/OperationalPreferencesDummy.java b/dummy-authorization-server-service/src/main/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/OperationalPreferencesDummy.java new file mode 100644 index 0000000000000000000000000000000000000000..34a7f6799fda60e08e126f2f99a1554a6f2a3d96 --- /dev/null +++ b/dummy-authorization-server-service/src/main/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/OperationalPreferencesDummy.java @@ -0,0 +1,21 @@ +package net.ihe.gazelle.app.dummyauthorizationserverservice.adapter; + +import net.ihe.gazelle.framework.preferencesmodelapi.application.OperationalPreferencesClientApplication; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Define mandatory preferences. + */ +public class OperationalPreferencesDummy implements OperationalPreferencesClientApplication { + + /** + * {@inheritDoc} + */ + @Override + public Map<String, List<String>> wantedMandatoryPreferences() { + return new HashMap<>(); + } +} diff --git a/dummy-authorization-server-service/src/main/resources/META-INF/beans.xml b/dummy-authorization-server-service/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000000000000000000000000000000000000..d29f9c2aedd99b79a8f82a7f18d27124c2e62358 --- /dev/null +++ b/dummy-authorization-server-service/src/main/resources/META-INF/beans.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans bean-discovery-mode="all" version="2.0" + xmlns="http://xmlns.jcp.org/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee + http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"> +</beans> \ No newline at end of file diff --git a/dummy-authorization-server-service/src/main/webapp/WEB-INF/jboss-web.xml b/dummy-authorization-server-service/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000000000000000000000000000000000000..b832b6ea657c580d51bc40526ad9c4dbf3e568f5 --- /dev/null +++ b/dummy-authorization-server-service/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<jboss-web> + <context-root>authorization-server</context-root> +</jboss-web> \ No newline at end of file diff --git a/dummy-authorization-server-service/src/main/webapp/WEB-INF/web.xml b/dummy-authorization-server-service/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000000000000000000000000000000000..e84277a95f80e2ed59f5518458b90b473057e968 --- /dev/null +++ b/dummy-authorization-server-service/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ +<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee + http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" + version="3.1"> + +</web-app> diff --git a/dummy-authorization-server-service/src/test/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/AuthorizationServerServiceTest.java b/dummy-authorization-server-service/src/test/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/AuthorizationServerServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..059a97e8fcc7e6b8fbdb37994facc18d9bfe7c34 --- /dev/null +++ b/dummy-authorization-server-service/src/test/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/AuthorizationServerServiceTest.java @@ -0,0 +1,21 @@ +package net.ihe.gazelle.app.dummyauthorizationserverservice.adapter; + +import net.ihe.gazelle.app.accesstokenproviderapi.application.DummyAuthzServerSoapui; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class AuthorizationServerServiceTest { + + private static final String SUBJECT = "aamrein"; + private static final String AUDIENCE = "audience"; + + /** + * Test the generation of a token + */ + @Test + public void getAccessToken() { + AuthorizationServerService authorizationServerService = new AuthorizationServerService(); + assertNotNull(authorizationServerService.getAccessToken(SUBJECT, AUDIENCE, null, null)); + } +} \ No newline at end of file diff --git a/dummy-authorization-server-service/src/test/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/DummyAuthorizationServerServiceApplicationTest.java b/dummy-authorization-server-service/src/test/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/DummyAuthorizationServerServiceApplicationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1abdbf9f2e380298181c80658ac2a8ab3cd33f52 --- /dev/null +++ b/dummy-authorization-server-service/src/test/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/DummyAuthorizationServerServiceApplicationTest.java @@ -0,0 +1,24 @@ +package net.ihe.gazelle.app.dummyauthorizationserverservice.adapter; + +import org.junit.jupiter.api.Test; + +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class DummyAuthorizationServerServiceApplicationTest { + + /** + * Test class getter. + */ + @Test + void getClasses() { + DummyAuthorizationServerServiceApplication application = new DummyAuthorizationServerServiceApplication(); + + Set classes = application.getClasses(); + + assertNotNull(classes, "Classes map shall not be null !"); + assertEquals(1, classes.size(), "Classes map shall contain a single element !"); + } +} \ No newline at end of file diff --git a/dummy-authorization-server-service/src/test/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/OperationalPreferencesDummyTest.java b/dummy-authorization-server-service/src/test/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/OperationalPreferencesDummyTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3bd30b4de8262009eedfc15b106f13c970ccc9a7 --- /dev/null +++ b/dummy-authorization-server-service/src/test/java/net/ihe/gazelle/app/dummyauthorizationserverservice/adapter/OperationalPreferencesDummyTest.java @@ -0,0 +1,25 @@ +package net.ihe.gazelle.app.dummyauthorizationserverservice.adapter; + +import net.ihe.gazelle.framework.preferencesmodelapi.application.OperationalPreferencesClientApplication; +import net.ihe.gazelle.framework.preferencesmodelapi.application.OperationalPreferencesService; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class OperationalPreferencesDummyTest { + + /** + * Test wanted mandatroy preferences list. + */ + @Test + void wantedMandatoryPreferences() { + OperationalPreferencesClientApplication operationalPreferencesService = new OperationalPreferencesDummy(); + + Map wantedMandatoryPreferences = operationalPreferencesService.wantedMandatoryPreferences(); + + assertNotNull(wantedMandatoryPreferences, "Wanted Mandatory Preferences map shall not be null !"); + assertEquals(0, wantedMandatoryPreferences.entrySet().size(), "Wanted Mandatory Preferences map shall be empty"); + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index b3aee7e793de7ec7e41636c2392cb87da4cc0dc3..adcb74b9202fc7c6e2977526e11f6148478c81d6 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,5 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.ihe.gazelle</groupId> @@ -200,5 +199,6 @@ <modules> <module>access-token-provider-api</module> <module>audience-retriever</module> - </modules> + <module>dummy-authorization-server-service</module> + </modules> </project>