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