001
002package io.vrap.rmf.base.client.oauth2;
003
004import static io.vrap.rmf.base.client.ApiHttpHeaders.headerEntry;
005
006import java.net.URI;
007import java.nio.charset.StandardCharsets;
008import java.util.Base64;
009
010import io.vrap.rmf.base.client.*;
011
012/**
013 * Token supplier using anonymous flow
014 */
015public class AnonymousSessionTokenSupplier extends BaseAuthTokenSupplier implements TokenSupplier {
016
017    public AnonymousSessionTokenSupplier(final String clientId, final String clientSecret, final String scope,
018            final String tokenEndpoint, final VrapHttpClient vrapHttpClient) {
019        super(vrapHttpClient, constructApiHttpRequest(clientId, clientSecret, scope, tokenEndpoint));
020    }
021
022    private static ApiHttpRequest constructApiHttpRequest(final String clientId, final String clientSecret,
023            final String scope, final String tokenEndpoint) {
024        String auth = Base64.getEncoder()
025                .encodeToString((clientId + ":" + clientSecret).getBytes(StandardCharsets.UTF_8));
026        final ApiHttpHeaders apiHttpHeaders = new ApiHttpHeaders(
027            headerEntry(ApiHttpHeaders.AUTHORIZATION, String.format("Basic %s", auth)),
028            headerEntry(ApiHttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded"));
029        final String body;
030        if (scope == null || scope.isEmpty()) {
031            body = "grant_type=client_credentials";
032        }
033        else {
034            body = String.format("grant_type=client_credentials&scope=%s", urlEncode(scope));
035        }
036        return new ApiHttpRequest(ApiHttpMethod.POST, URI.create(tokenEndpoint), apiHttpHeaders,
037            body.getBytes(StandardCharsets.UTF_8));
038    }
039}