Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 33f4aa8f authored by Wylem Bars's avatar Wylem Bars
Browse files

Merge branch 'feature/IUAINFRA-52' into 'develop'

Feature/iuainfra 52

See merge request !2
parents ea2095ae 2a9eabb8
No related branches found
No related tags found
2 merge requests!5Develop,!2Feature/iuainfra 52
Showing
with 669 additions and 28 deletions
...@@ -32,7 +32,7 @@ public class DummyAuthzServerSoapui implements DummyAuthzServer { ...@@ -32,7 +32,7 @@ public class DummyAuthzServerSoapui implements DummyAuthzServer {
} }
/** /**
* Constructor with the path for the class. * Constructor with the path for the class.
*/ */
public DummyAuthzServerSoapui(String path) { public DummyAuthzServerSoapui(String path) {
audienceSecretRetriever = new AudienceSecretRetrieverForSoapui(path); audienceSecretRetriever = new AudienceSecretRetrieverForSoapui(path);
...@@ -90,8 +90,8 @@ public class DummyAuthzServerSoapui implements DummyAuthzServer { ...@@ -90,8 +90,8 @@ public class DummyAuthzServerSoapui implements DummyAuthzServer {
} catch (EncodingException | TokenRequestException e) { } catch (EncodingException | TokenRequestException e) {
LOGGER.error("Error generating Access Token", e); LOGGER.error("Error generating Access Token", e);
} }
return token; return token;
} }
} }
...@@ -69,7 +69,7 @@ public class TokenGenerator { ...@@ -69,7 +69,7 @@ public class TokenGenerator {
throw new TokenRequestException("Unsupported issuer"); throw new TokenRequestException("Unsupported issuer");
} }
if (accessTokenRequest.getAudience() ==null || accessTokenRequest.getAudience().isEmpty()) { if (accessTokenRequest.getAudience() == null || accessTokenRequest.getAudience().isEmpty()) {
throw new TokenRequestException("Audience is null or empty"); throw new TokenRequestException("Audience is null or empty");
} }
......
...@@ -14,7 +14,7 @@ class DummyAuthzServerSoapuiTest { ...@@ -14,7 +14,7 @@ class DummyAuthzServerSoapuiTest {
private static final String AUDIENCE = "audience"; private static final String AUDIENCE = "audience";
/** /**
* get access token with an Audience path defined * get access token with an Audience path defined
*/ */
@Test @Test
public void getAccessTokenWithPathAudienceTest() { public void getAccessTokenWithPathAudienceTest() {
......
...@@ -13,6 +13,9 @@ import java.time.Duration; ...@@ -13,6 +13,9 @@ import java.time.Duration;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* Tests for {@link TokenGenerator}
*/
class TokenGeneratorTest { class TokenGeneratorTest {
private static final String ALGORITHM = "HS256"; private static final String ALGORITHM = "HS256";
...@@ -23,11 +26,20 @@ class TokenGeneratorTest { ...@@ -23,11 +26,20 @@ class TokenGeneratorTest {
private static final Duration DURATION = Duration.ofMinutes(5); private static final Duration DURATION = Duration.ofMinutes(5);
private static AudienceSecretRetrieverTestImpl AUDIENCE_RETRIEVER = new AudienceSecretRetrieverTestImpl(); private static AudienceSecretRetrieverTestImpl AUDIENCE_RETRIEVER = new AudienceSecretRetrieverTestImpl();
/**
* Init audience available to generate token.
*/
@BeforeEach @BeforeEach
public void initAudience() { public void initAudience() {
AUDIENCE_RETRIEVER.addAudience(AUDIENCE, "myBeautifulKeyWhichIsAJWTSecretSoSecret"); AUDIENCE_RETRIEVER.addAudience(AUDIENCE, "myBeautifulKeyWhichIsAJWTSecretSoSecret");
} }
/**
* Default generation of a token
*
* @throws EncodingException if something wrong happens during encoding
* @throws TokenRequestException if the token request is not valid
*/
@Test @Test
public void generateAccessTokenTest() throws EncodingException, TokenRequestException { public void generateAccessTokenTest() throws EncodingException, TokenRequestException {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
...@@ -41,9 +53,11 @@ class TokenGeneratorTest { ...@@ -41,9 +53,11 @@ class TokenGeneratorTest {
assertNotNull(encodedIUAToken); assertNotNull(encodedIUAToken);
} }
/**
* Test with a null signature.
*/
@Test @Test
public void generateAccessTokenNullSignatureTest() throws EncodingException, TokenRequestException { public void generateAccessTokenNullSignatureTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(null, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(null, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(null); accessTokenRequest.setSignature(null);
...@@ -54,8 +68,11 @@ class TokenGeneratorTest { ...@@ -54,8 +68,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating token with unsupported issuer.
*/
@Test @Test
public void generateAccessTokenUnsupportedIssuerTest() throws EncodingException, TokenRequestException { public void generateAccessTokenUnsupportedIssuerTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest("blabla", SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest("blabla", SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -66,8 +83,11 @@ class TokenGeneratorTest { ...@@ -66,8 +83,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with a null subject.
*/
@Test @Test
public void generateAccessTokenNullIssuerTest() throws EncodingException, TokenRequestException { public void generateAccessTokenNullIssuerTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(null, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(null, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -78,8 +98,11 @@ class TokenGeneratorTest { ...@@ -78,8 +98,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with unsupported subject.
*/
@Test @Test
public void generateAccessTokenUnsupportedSubjectTest() throws EncodingException, TokenRequestException { public void generateAccessTokenUnsupportedSubjectTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, "subject", AUDIENCE, DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, "subject", AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -90,8 +113,11 @@ class TokenGeneratorTest { ...@@ -90,8 +113,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with null subject.
*/
@Test @Test
public void generateAccessTokenNullSubjectTest() throws EncodingException, TokenRequestException { public void generateAccessTokenNullSubjectTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, null, AUDIENCE, DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, null, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -102,8 +128,11 @@ class TokenGeneratorTest { ...@@ -102,8 +128,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with unsupported token type.
*/
@Test @Test
public void generateAccessTokenUnsupportedTokenTypeTest() throws EncodingException, TokenRequestException { public void generateAccessTokenUnsupportedTokenTypeTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TokenType.SAML); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TokenType.SAML);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -114,8 +143,11 @@ class TokenGeneratorTest { ...@@ -114,8 +143,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with null token type.
*/
@Test @Test
public void generateAccessTokenNullTokenTypeTest() throws EncodingException, TokenRequestException { public void generateAccessTokenNullTokenTypeTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, null); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, null);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -126,8 +158,11 @@ class TokenGeneratorTest { ...@@ -126,8 +158,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with unsupported algo.
*/
@Test @Test
public void generateAccessTokenUnsupportedAlgoTest() throws EncodingException, TokenRequestException { public void generateAccessTokenUnsupportedAlgoTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature("algo", "secret")); accessTokenRequest.setSignature(new SymmetricSignature("algo", "secret"));
...@@ -138,8 +173,11 @@ class TokenGeneratorTest { ...@@ -138,8 +173,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with null algo.
*/
@Test @Test
public void generateAccessTokenNullAlgoTest() throws EncodingException, TokenRequestException { public void generateAccessTokenNullAlgoTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(null, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(null, "secret"));
...@@ -150,8 +188,11 @@ class TokenGeneratorTest { ...@@ -150,8 +188,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with null audience.
*/
@Test @Test
public void generateAccessTokenNullAudienceTest() throws EncodingException, TokenRequestException { public void generateAccessTokenNullAudienceTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, null, DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, null, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -162,8 +203,11 @@ class TokenGeneratorTest { ...@@ -162,8 +203,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with unsupported audience.
*/
@Test @Test
public void generateAccessTokenUnknownAudienceTest() throws EncodingException, TokenRequestException { public void generateAccessTokenUnknownAudienceTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -174,9 +218,11 @@ class TokenGeneratorTest { ...@@ -174,9 +218,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with empty audience.
*/
@Test @Test
public void generateAccessTokenEmptyAudienceTest() throws EncodingException, TokenRequestException { public void generateAccessTokenEmptyAudienceTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "", DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "", DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -187,9 +233,11 @@ class TokenGeneratorTest { ...@@ -187,9 +233,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with empty secret.
*/
@Test @Test
public void generateAccessTokenEmptySecretTest() throws EncodingException, TokenRequestException { public void generateAccessTokenEmptySecretTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -200,9 +248,11 @@ class TokenGeneratorTest { ...@@ -200,9 +248,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with null secret.
*/
@Test @Test
public void generateAccessTokenNullSecretTest() throws EncodingException, TokenRequestException { public void generateAccessTokenNullSecretTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", DURATION, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
...@@ -213,9 +263,11 @@ class TokenGeneratorTest { ...@@ -213,9 +263,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer"); assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
} }
/**
* Test generating a token with null Duration.
*/
@Test @Test
public void generateAccessTokenDurationNullTest() throws EncodingException, TokenRequestException { public void generateAccessTokenDurationNullTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", null, TOKEN_TYPE); AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", null, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret")); accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......
...@@ -32,6 +32,14 @@ ...@@ -32,6 +32,14 @@
<artifactId>framework.preferences-model-api</artifactId> <artifactId>framework.preferences-model-api</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
</dependency> </dependency>
<!-- Implementation of Operational Preferences -->
<dependency>
<groupId>net.ihe.gazelle</groupId>
<artifactId>framework.operational-preferences-service</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -15,7 +15,8 @@ class AudienceSecretRetrieverForSoapuiTest { ...@@ -15,7 +15,8 @@ class AudienceSecretRetrieverForSoapuiTest {
*/ */
@Test @Test
void retrieveSecretForAudienceWithPropertiesPathTest() { void retrieveSecretForAudienceWithPropertiesPathTest() {
AudienceSecretRetrieverForSoapui audienceSecretRetrieverForSoapui = new AudienceSecretRetrieverForSoapui("/opt/simulators/audience.properties"); AudienceSecretRetrieverForSoapui audienceSecretRetrieverForSoapui = new AudienceSecretRetrieverForSoapui("/opt/simulators/audience" +
".properties");
assertNull(audienceSecretRetrieverForSoapui.retrieveSecretForAudience("monpetitsecret")); assertNull(audienceSecretRetrieverForSoapui.retrieveSecretForAudience("monpetitsecret"));
} }
......
Put here your test resources.
\ No newline at end of file
# Dummy Authorization Server Service
This service mock an Access Token Provider, giving a mocked token using one of available user id
and a secret that can be configured depending on the used audience.
## Request examples
```http://localhost:8780/authorization-server/mock-token?userId=aamrein&audienceId=audience```
| Parameter Name | Usage |
|-------------|-----------------------------------------------------------------------|
| userId | User for whom the token is generated |
| audienceId | ID of the audience used to retrieve secret in Gazelle configurations. |
The response body to this request will be the content of the generated token.
## Available user ID
| User ID |
|----------|
| aamrein |
## Install the tool
Sources are available [here](https://gitlab.inria.fr/gazelle/applications/test-execution/simulator/access-token-provider)
Deploy the `app.dummy-authorization-server-service-X.X.X.war` artifact in a wildfly 18 server.
No specific wildfly configuration is needed for the tool to work.
## Configure Audiences
Edit the file `/opt/simulators/audience.properties`, add a property for each audience that needs to be configured :
```
audience1=secret1
audience2=secret2
audience3=secret3
...
```
\ No newline at end of file
<?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
package net.ihe.gazelle.app.dummyauthorizationserverservice.adapter;
import net.ihe.gazelle.app.accesstokenproviderapi.application.DummyAuthzServer;
import net.ihe.gazelle.app.accesstokenproviderapi.application.DummyAuthzServerSoapui;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.ext.Provider;
/**
* Service for Mock Access Token Provider.
*/
@Provider
@Path(value = "/mock-token")
public class AuthorizationServerService {
private DummyAuthzServer dummyAuthzServer;
/**
* Default constructor for the class.
*/
public AuthorizationServerService() {
dummyAuthzServer = new DummyAuthzServerSoapui();
}
/**
* Setter for the dummyAuthzServer property.
*
* @param dummyAuthzServer value to set to the property.
*/
public void setDummyAuthzServer(DummyAuthzServer dummyAuthzServer) {
this.dummyAuthzServer = dummyAuthzServer;
}
/**
* get a dummy access token
*
* @param userId
* @param audienceId
* @param purposeOfUse
* @param resourceId
* @return an access token
*/
@GET
public byte[] getAccessToken(@QueryParam("userId") String userId, @QueryParam("audienceId") String audienceId,
@QueryParam("purposeOfUse") String purposeOfUse, @QueryParam("resourceId") String resourceId) {
return dummyAuthzServer.getAccessToken(userId, audienceId, purposeOfUse, resourceId);
}
}
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;
}
}
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<>();
}
}
<?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
<?xml version="1.0" encoding="UTF-8"?>
<con:soapui-project id="511bc175-43ea-4daa-b8b0-8135770e4931" activeEnvironment="Default" name="REST Project 1" resourceRoot="" soapui-version="5.5.0"
xmlns:con="http://eviware.com/soapui/config">
<con:settings/>
<con:interface xsi:type="con:RestService" id="a83dfcbb-6422-4e5a-a181-094eaf6314b0" wadlVersion="http://wadl.dev.java.net/2009/02"
name="http://localhost:8780" type="rest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<con:settings/>
<con:definitionCache type="TEXT" rootPart=""/>
<con:endpoints>
<con:endpoint>http://localhost:8780</con:endpoint>
</con:endpoints>
<con:resource name="Mock-token" path="/authorization-server/mock-token" id="7270205e-e39c-4360-84e7-e29e05aad49b">
<con:settings/>
<con:parameters>
<con:parameter>
<con:name>userId</con:name>
<con:value/>
<con:style>QUERY</con:style>
<con:default/>
<con:description xsi:nil="true"/>
</con:parameter>
<con:parameter>
<con:name>audienceId</con:name>
<con:value/>
<con:style>QUERY</con:style>
<con:default/>
<con:description xsi:nil="true"/>
</con:parameter>
<con:parameter>
<con:name>purposeOfUse</con:name>
<con:value/>
<con:style>QUERY</con:style>
<con:default/>
<con:description xsi:nil="true"/>
</con:parameter>
<con:parameter>
<con:name>resourceId</con:name>
<con:value/>
<con:style>QUERY</con:style>
<con:default/>
<con:description xsi:nil="true"/>
</con:parameter>
</con:parameters>
<con:method name="Mock-token 1" id="abfda5a1-8402-4e07-af8d-89b02e4d0c72" method="GET">
<con:settings/>
<con:parameters/>
<con:representation type="RESPONSE">
<con:mediaType>application/octet-stream</con:mediaType>
<con:status>200</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>0</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>0</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>0</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="FAULT">
<con:mediaType>text/html</con:mediaType>
<con:status>404</con:status>
<con:params/>
<con:element>html</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>0</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>0</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:representation type="RESPONSE">
<con:mediaType xsi:nil="true"/>
<con:status>204</con:status>
<con:params/>
<con:element>data</con:element>
</con:representation>
<con:request name="Request 1" id="1039bbd9-95cf-452e-ad96-4cfb23827782" mediaType="application/json">
<con:settings/>
<con:endpoint>http://localhost:8780</con:endpoint>
<con:request/>
<con:credentials>
<con:authType>No Authorization</con:authType>
</con:credentials>
<con:jmsConfig JMSDeliveryMode="PERSISTENT"/>
<con:jmsPropertyConfig/>
<con:parameters>
<con:entry key="resourceId" value="12"/>
<con:entry key="purposeOfUse" value="test"/>
<con:entry key="audienceId" value="audience"/>
<con:entry key="userId" value="test"/>
</con:parameters>
<con:parameterOrder>
<con:entry>userId</con:entry>
<con:entry>audienceId</con:entry>
<con:entry>purposeOfUse</con:entry>
<con:entry>resourceId</con:entry>
</con:parameterOrder>
</con:request>
</con:method>
</con:resource>
</con:interface>
<con:testSuite id="99a0a2d5-1bf9-4cd6-a66d-29830e75aef8" name="Test Mock Token Provider">
<con:settings/>
<con:runType>SEQUENTIAL</con:runType>
<con:testCase id="f4ab98d6-051e-4e34-9dca-7aac5409f375" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0"
name="Request" searchProperties="true">
<con:settings/>
<con:testStep type="restrequest" name="Valid request" id="fa834a0a-6dc7-4d84-a15a-f13224626c4e">
<con:settings/>
<con:config service="http://localhost:8780" resourcePath="/authorization-server/mock-token" methodName="Mock-token 1"
xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<con:restRequest name="Mock-token 1 - Request 1" id="1039bbd9-95cf-452e-ad96-4cfb23827782" mediaType="application/json">
<con:settings>
<con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting>
</con:settings>
<con:endpoint>http://localhost:8780</con:endpoint>
<con:request/>
<con:originalUri>http://localhost/authorization-server/mock-token</con:originalUri>
<con:assertion type="Simple Contains" id="eec24b99-0b19-4a1e-93f7-d791268e2f6d" name="Contains">
<con:configuration>
<token>.+\..+\..+</token>
<ignoreCase>false</ignoreCase>
<useRegEx>true</useRegEx>
</con:configuration>
</con:assertion>
<con:credentials>
<con:authType>No Authorization</con:authType>
</con:credentials>
<con:jmsConfig JMSDeliveryMode="PERSISTENT"/>
<con:jmsPropertyConfig/>
<con:parameters>
<con:entry key="audienceId" value="audience"/>
<con:entry key="userId" value="aamrein"/>
</con:parameters>
<con:parameterOrder>
<con:entry>userId</con:entry>
<con:entry>audienceId</con:entry>
<con:entry>purposeOfUse</con:entry>
<con:entry>resourceId</con:entry>
</con:parameterOrder>
</con:restRequest>
</con:config>
</con:testStep>
<con:properties/>
</con:testCase>
<con:testCase id="81ffbff9-1a6a-4389-951a-3f8ed143f4e8" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0"
name="Unknown UserID" searchProperties="true">
<con:settings/>
<con:testStep type="restrequest" name="Unknown userID" id="0821bbbe-9ed6-490b-88f5-c46be620eae6">
<con:settings/>
<con:config service="http://localhost:8780" resourcePath="/authorization-server/mock-token" methodName="Mock-token 1"
xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<con:restRequest name="Unknown userID" id="1039bbd9-95cf-452e-ad96-4cfb23827782" mediaType="application/json">
<con:settings>
<con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting>
</con:settings>
<con:endpoint>http://localhost:8780</con:endpoint>
<con:request/>
<con:originalUri>http://localhost/authorization-server/mock-token</con:originalUri>
<con:assertion type="Valid HTTP Status Codes" id="60be561e-c058-42cd-882f-0e60e9226c65" name="Valid HTTP Status Codes">
<con:configuration>
<codes>204</codes>
</con:configuration>
</con:assertion>
<con:credentials>
<con:authType>No Authorization</con:authType>
</con:credentials>
<con:jmsConfig JMSDeliveryMode="PERSISTENT"/>
<con:jmsPropertyConfig/>
<con:parameters>
<con:entry key="audienceId" value="audience43"/>
<con:entry key="userId" value="aamrein"/>
</con:parameters>
<con:parameterOrder>
<con:entry>userId</con:entry>
<con:entry>audienceId</con:entry>
<con:entry>purposeOfUse</con:entry>
<con:entry>resourceId</con:entry>
</con:parameterOrder>
</con:restRequest>
</con:config>
</con:testStep>
<con:properties/>
</con:testCase>
<con:testCase id="0b0c480f-8389-40e2-83bf-1adfad6f874f" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0"
name="Unknown Audience" searchProperties="true">
<con:settings/>
<con:testStep type="restrequest" name="Unknown audience" id="b3d2c1e7-36a2-43ad-8056-5ff54b75677b">
<con:settings/>
<con:config service="http://localhost:8780" resourcePath="/authorization-server/mock-token" methodName="Mock-token 1"
xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<con:restRequest name="Unknown audience" id="1039bbd9-95cf-452e-ad96-4cfb23827782" mediaType="application/json">
<con:settings>
<con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting>
</con:settings>
<con:endpoint>http://localhost:8780</con:endpoint>
<con:request/>
<con:originalUri>http://localhost/authorization-server/mock-token</con:originalUri>
<con:assertion type="Valid HTTP Status Codes" id="60be561e-c058-42cd-882f-0e60e9226c65" name="Valid HTTP Status Codes">
<con:configuration>
<codes>204</codes>
</con:configuration>
</con:assertion>
<con:credentials>
<con:authType>No Authorization</con:authType>
</con:credentials>
<con:jmsConfig JMSDeliveryMode="PERSISTENT"/>
<con:jmsPropertyConfig/>
<con:parameters>
<con:entry key="audienceId" value="audience"/>
<con:entry key="userId" value="wbars"/>
</con:parameters>
<con:parameterOrder>
<con:entry>userId</con:entry>
<con:entry>audienceId</con:entry>
<con:entry>purposeOfUse</con:entry>
<con:entry>resourceId</con:entry>
</con:parameterOrder>
</con:restRequest>
</con:config>
</con:testStep>
<con:properties/>
</con:testCase>
<con:properties/>
</con:testSuite>
<con:properties/>
<con:wssContainer/>
<con:oAuth2ProfileContainer/>
<con:oAuth1ProfileContainer/>
</con:soapui-project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>authorization-server</context-root>
</jboss-web>
\ No newline at end of file
<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>
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.assertNotNull;
/**
* Tests for {@link AuthorizationServerService}
*/
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();
DummyAuthzServerSoapui dummyAuthzServer = new DummyAuthzServerSoapui();
dummyAuthzServer.setAudienceSecretRetriever((String audience) -> "myBeautifulKeyWhichIsAJWTSecretSoSecret");
authorizationServerService.setDummyAuthzServer(dummyAuthzServer);
assertNotNull(authorizationServerService.getAccessToken(SUBJECT, AUDIENCE, null, null),
"Provided access token shall not be null !");
}
}
\ No newline at end of file
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
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
...@@ -201,5 +201,6 @@ ...@@ -201,5 +201,6 @@
<modules> <modules>
<module>access-token-provider-api</module> <module>access-token-provider-api</module>
<module>audience-retriever</module> <module>audience-retriever</module>
</modules> <module>dummy-authorization-server-service</module>
</project> </modules>
</project>
\ 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