Mentions légales du service

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

Expose Dummy Authz Server as Webservice

parent ea2095ae
No related branches found
No related tags found
1 merge request!5Develop
Showing
with 669 additions and 28 deletions
......@@ -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) {
audienceSecretRetriever = new AudienceSecretRetrieverForSoapui(path);
......@@ -90,8 +90,8 @@ public class DummyAuthzServerSoapui implements DummyAuthzServer {
} catch (EncodingException | TokenRequestException e) {
LOGGER.error("Error generating Access Token", e);
}
return token;
}
return token;
}
}
......@@ -69,7 +69,7 @@ public class TokenGenerator {
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");
}
......
......@@ -14,7 +14,7 @@ class DummyAuthzServerSoapuiTest {
private static final String AUDIENCE = "audience";
/**
* get access token with an Audience path defined
* get access token with an Audience path defined
*/
@Test
public void getAccessTokenWithPathAudienceTest() {
......
......@@ -13,6 +13,9 @@ import java.time.Duration;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* Tests for {@link TokenGenerator}
*/
class TokenGeneratorTest {
private static final String ALGORITHM = "HS256";
......@@ -23,11 +26,20 @@ class TokenGeneratorTest {
private static final Duration DURATION = Duration.ofMinutes(5);
private static AudienceSecretRetrieverTestImpl AUDIENCE_RETRIEVER = new AudienceSecretRetrieverTestImpl();
/**
* Init audience available to generate token.
*/
@BeforeEach
public void initAudience() {
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
public void generateAccessTokenTest() throws EncodingException, TokenRequestException {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
......@@ -41,9 +53,11 @@ class TokenGeneratorTest {
assertNotNull(encodedIUAToken);
}
/**
* Test with a null signature.
*/
@Test
public void generateAccessTokenNullSignatureTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenNullSignatureTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(null, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(null);
......@@ -54,8 +68,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating token with unsupported issuer.
*/
@Test
public void generateAccessTokenUnsupportedIssuerTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenUnsupportedIssuerTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest("blabla", SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -66,8 +83,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with a null subject.
*/
@Test
public void generateAccessTokenNullIssuerTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenNullIssuerTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(null, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -78,8 +98,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with unsupported subject.
*/
@Test
public void generateAccessTokenUnsupportedSubjectTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenUnsupportedSubjectTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, "subject", AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -90,8 +113,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with null subject.
*/
@Test
public void generateAccessTokenNullSubjectTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenNullSubjectTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, null, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -102,8 +128,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with unsupported token type.
*/
@Test
public void generateAccessTokenUnsupportedTokenTypeTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenUnsupportedTokenTypeTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TokenType.SAML);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -114,8 +143,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with null token type.
*/
@Test
public void generateAccessTokenNullTokenTypeTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenNullTokenTypeTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, null);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -126,8 +158,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with unsupported algo.
*/
@Test
public void generateAccessTokenUnsupportedAlgoTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenUnsupportedAlgoTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature("algo", "secret"));
......@@ -138,8 +173,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with null algo.
*/
@Test
public void generateAccessTokenNullAlgoTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenNullAlgoTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, AUDIENCE, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(null, "secret"));
......@@ -150,8 +188,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with null audience.
*/
@Test
public void generateAccessTokenNullAudienceTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenNullAudienceTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, null, DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -162,8 +203,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with unsupported audience.
*/
@Test
public void generateAccessTokenUnknownAudienceTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenUnknownAudienceTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -174,9 +218,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with empty audience.
*/
@Test
public void generateAccessTokenEmptyAudienceTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenEmptyAudienceTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "", DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -187,9 +233,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with empty secret.
*/
@Test
public void generateAccessTokenEmptySecretTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenEmptySecretTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -200,9 +248,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with null secret.
*/
@Test
public void generateAccessTokenNullSecretTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenNullSecretTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", DURATION, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......@@ -213,9 +263,11 @@ class TokenGeneratorTest {
assertThrows(TokenRequestException.class, () -> tokenGenerator.generateAccessToken(accessTokenRequest), "Unsupported issuer");
}
/**
* Test generating a token with null Duration.
*/
@Test
public void generateAccessTokenDurationNullTest() throws EncodingException, TokenRequestException {
public void generateAccessTokenDurationNullTest() {
AccessTokenRequest accessTokenRequest = new AccessTokenRequest(ISSUER, SUBJECT, "pouet", null, TOKEN_TYPE);
accessTokenRequest.setSignature(new SymmetricSignature(ALGORITHM, "secret"));
......
......@@ -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>
......@@ -15,7 +15,8 @@ class AudienceSecretRetrieverForSoapuiTest {
*/
@Test
void retrieveSecretForAudienceWithPropertiesPathTest() {
AudienceSecretRetrieverForSoapui audienceSecretRetrieverForSoapui = new AudienceSecretRetrieverForSoapui("/opt/simulators/audience.properties");
AudienceSecretRetrieverForSoapui audienceSecretRetrieverForSoapui = new AudienceSecretRetrieverForSoapui("/opt/simulators/audience" +
".properties");
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 @@
<modules>
<module>access-token-provider-api</module>
<module>audience-retriever</module>
</modules>
</project>
<module>dummy-authorization-server-service</module>
</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