package com.dbg.cloud.acheron.plugins.oauth2.authserver.hydra; import com.dbg.cloud.acheron.plugins.oauth2.authserver.base.CredentialsStruct; import com.dbg.cloud.acheron.plugins.oauth2.authserver.base.OAuth2AuthorisationServer; import com.dbg.cloud.acheron.plugins.oauth2.authserver.base.authentication.AuthenticationOperation; import com.dbg.cloud.acheron.plugins.oauth2.authserver.base.authentication.AuthenticationResult; import com.dbg.cloud.acheron.plugins.oauth2.authserver.base.management.client.creation.ClientCreationSpec; import com.dbg.cloud.acheron.plugins.oauth2.authserver.base.management.client.deletion.ClientDeletionSpec; import com.dbg.cloud.acheron.plugins.oauth2.authserver.hydra.management.client.creation.ClientCreationSpecSimple; import com.dbg.cloud.acheron.plugins.oauth2.authserver.hydra.management.client.creation.ClientCreationSpecWithAuth; import com.dbg.cloud.acheron.plugins.oauth2.authserver.hydra.management.client.deletion.ClientDeletionSpecSimple; import com.dbg.cloud.acheron.plugins.oauth2.authserver.hydra.management.client.deletion.ClientDeletionSpecWithAuth; import org.springframework.boot.web.client.RestTemplateBuilder; public final class Hydra extends OAuth2AuthorisationServer.SpecCompliantServer { private final String rootURL; public Hydra(final String rootURL, final CredentialsStruct credentials, final RestTemplateBuilder restTemplateBuilder) { super(credentials, restTemplateBuilder); this.rootURL = rootURL; } @Override protected String tokenEndpoint() { return rootURL + "/oauth2/token"; } @Override protected String introspectionEndpoint() { return rootURL + "/oauth2/introspect"; } @Override protected String operatingScopes() { return "hydra.clients"; } @Override public ClientCreationSpec clientCreationSpec(final AuthenticationResult authenticationResult) { return new ClientCreationSpecSimple( getClientCreationURL(), authenticationResult.accessToken().get().token(), getRestTemplateBuilder()); } @Override public ClientCreationSpec clientCreationSpec(final AuthenticationOperation authenticationOperation) { return new ClientCreationSpecWithAuth( getClientCreationURL(), authenticationOperation, getRestTemplateBuilder()); } @Override public ClientDeletionSpec clientDeletionSpec(AuthenticationResult authenticationResult) { return new ClientDeletionSpecSimple( getClientDeletionURL(), authenticationResult.accessToken().get().token(), getRestTemplateBuilder() ); } @Override public ClientDeletionSpec clientDeletionSpec(AuthenticationOperation authenticationOperation) { return new ClientDeletionSpecWithAuth( getClientDeletionURL(), authenticationOperation, getRestTemplateBuilder()); } private String getClientCreationURL() { return rootURL + "/clients"; } private String getClientDeletionURL() { return rootURL + "/clients"; } }