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}