public SubscriptionOAuthPolicy build() { return new SubscriptionOAuthPolicy(grantType, providerName, scope, username, password); } }
public Optional<OAuthSubscriptionHandler> create(SubscriptionName subscriptionName) { Subscription subscription = subscriptionRepository.getSubscriptionDetails(subscriptionName); if (subscription.hasOAuthPolicy()) { try { String providerName = subscription.getOAuthPolicy().getProviderName(); logger.info("Creating OAuth handler subscription {} using {} OAuth provider", subscriptionName, providerName); OAuthTokenRequestRateLimiter rateLimiter = rateLimiterLoader.create(subscription); return Optional.of(new OAuthSubscriptionHandler(subscriptionName, providerName, accessTokens, rateLimiter)); } catch (Exception e) { logger.error("Failed to create OAuth handler for subscription {}, {}", subscriptionName.getQualifiedName(), e.getMessage()); } } return Optional.empty(); } }
@Test public void shouldApplyPatchChangingSubscriptionOAuthPolicyGrantType() { // given Subscription subscription = subscription("group.topic", "subscription") .withOAuthPolicy(new SubscriptionOAuthPolicy(CLIENT_CREDENTIALS, "myProvider", "repo", null, null)) .build(); PatchData oAuthPolicyPatchData = patchData() .set("grantType", SubscriptionOAuthPolicy.GrantType.USERNAME_PASSWORD.getName()) .set("username", "user1") .set("password", "abc123") .build(); PatchData patch = patchData() .set("oAuthPolicy", oAuthPolicyPatchData) .build(); // when Subscription updated = Patch.apply(subscription, patch); // then SubscriptionOAuthPolicy updatedPolicy = updated.getOAuthPolicy(); assertThat(updatedPolicy.getGrantType()).isEqualTo(USERNAME_PASSWORD); assertThat(updatedPolicy.getUsername()).isEqualTo("user1"); } }
private OAuthTokenRequest getOAuthUsernamePasswordGrantTokenRequest(SubscriptionOAuthPolicy policy, OAuthProvider provider) { return oAuthTokenRequest() .withUrl(provider.getTokenEndpoint()) .withGrantType(OAuthTokenRequest.GrantTypeValue.RESOURCE_OWNER_USERNAME_PASSWORD) .withScope(policy.getScope()) .withClientId(provider.getClientId()) .withClientSecret(provider.getClientSecret()) .withUsername(policy.getUsername()) .withPassword(policy.getPassword()) .withRequestTimeout(provider.getRequestTimeout()) .build(); }
@Override public OAuthAccessToken load(SubscriptionName subscriptionName) throws Exception { Subscription subscription = subscriptionRepository.getSubscriptionDetails(subscriptionName); SubscriptionOAuthPolicy oAuthPolicy = subscription.getOAuthPolicy(); String providerName = oAuthPolicy.getProviderName(); OAuthProvider oAuthProvider = oAuthProviderRepository.getOAuthProviderDetails(providerName); OAuthTokenRequest request; if (USERNAME_PASSWORD.equals(oAuthPolicy.getGrantType())) { request = getOAuthUsernamePasswordGrantTokenRequest(oAuthPolicy, oAuthProvider); } else { request = getOAuthClientCredentialsGrantTokenRequest(oAuthPolicy, oAuthProvider); } metrics.oAuthSubscriptionTokenRequestMeter(subscription, providerName).mark(); try (Timer.Context timer = metrics.oAuthProviderLatencyTimer(providerName).time()) { return oAuthClient.getToken(request); } }
private OAuthTokenRequest getOAuthClientCredentialsGrantTokenRequest(SubscriptionOAuthPolicy policy, OAuthProvider provider) { return oAuthTokenRequest() .withUrl(provider.getTokenEndpoint()) .withGrantType(OAuthTokenRequest.GrantTypeValue.CLIENT_CREDENTIALS) .withScope(policy.getScope()) .withClientId(provider.getClientId()) .withClientSecret(provider.getClientSecret()) .withRequestTimeout(provider.getRequestTimeout()) .build(); } }
@Override public Subscription anonymize() { if (getEndpoint().containsCredentials() || hasOAuthPolicy()) { return new Subscription( topicName, name, endpoint.anonymize(), state, description, deliveryType == DeliveryType.BATCH ? batchSubscriptionPolicy : serialSubscriptionPolicy, trackingEnabled, trackingMode, owner, supportTeam, monitoringDetails, contentType, deliveryType, filters, mode, headers, endpointAddressResolverMetadata, oAuthPolicy != null ? oAuthPolicy.anonymize() : null, http2Enabled ); } return this; }
private Subscription subscriptionWithout4xxRetryAndWithOAuthPolicy() { return subscriptionBuilderWithTestValues() .withOAuthPolicy(passwordGrantOAuthPolicy("myOAuthProvider") .withUsername("user1") .withPassword("abc123") .build()) .build(); }
private OAuthTokenRequest getOAuthUsernamePasswordGrantTokenRequest(SubscriptionOAuthPolicy policy, OAuthProvider provider) { return oAuthTokenRequest() .withUrl(provider.getTokenEndpoint()) .withGrantType(OAuthTokenRequest.GrantTypeValue.RESOURCE_OWNER_USERNAME_PASSWORD) .withScope(policy.getScope()) .withClientId(provider.getClientId()) .withClientSecret(provider.getClientSecret()) .withUsername(policy.getUsername()) .withPassword(policy.getPassword()) .withRequestTimeout(provider.getRequestTimeout()) .build(); }
@Override public OAuthAccessToken load(SubscriptionName subscriptionName) throws Exception { Subscription subscription = subscriptionRepository.getSubscriptionDetails(subscriptionName); SubscriptionOAuthPolicy oAuthPolicy = subscription.getOAuthPolicy(); String providerName = oAuthPolicy.getProviderName(); OAuthProvider oAuthProvider = oAuthProviderRepository.getOAuthProviderDetails(providerName); OAuthTokenRequest request; if (USERNAME_PASSWORD.equals(oAuthPolicy.getGrantType())) { request = getOAuthUsernamePasswordGrantTokenRequest(oAuthPolicy, oAuthProvider); } else { request = getOAuthClientCredentialsGrantTokenRequest(oAuthPolicy, oAuthProvider); } metrics.oAuthSubscriptionTokenRequestMeter(subscription, providerName).mark(); try (Timer.Context timer = metrics.oAuthProviderLatencyTimer(providerName).time()) { return oAuthClient.getToken(request); } }
private OAuthTokenRequest getOAuthClientCredentialsGrantTokenRequest(SubscriptionOAuthPolicy policy, OAuthProvider provider) { return oAuthTokenRequest() .withUrl(provider.getTokenEndpoint()) .withGrantType(OAuthTokenRequest.GrantTypeValue.CLIENT_CREDENTIALS) .withScope(policy.getScope()) .withClientId(provider.getClientId()) .withClientSecret(provider.getClientSecret()) .withRequestTimeout(provider.getRequestTimeout()) .build(); } }
public Optional<OAuthSubscriptionHandler> create(SubscriptionName subscriptionName) { Subscription subscription = subscriptionRepository.getSubscriptionDetails(subscriptionName); if (subscription.hasOAuthPolicy()) { try { String providerName = subscription.getOAuthPolicy().getProviderName(); logger.info("Creating OAuth handler subscription {} using {} OAuth provider", subscriptionName, providerName); OAuthTokenRequestRateLimiter rateLimiter = rateLimiterLoader.create(subscription); return Optional.of(new OAuthSubscriptionHandler(subscriptionName, providerName, accessTokens, rateLimiter)); } catch (Exception e) { logger.error("Failed to create OAuth handler for subscription {}, {}", subscriptionName.getQualifiedName(), e.getMessage()); } } return Optional.empty(); } }
public SubscriptionOAuthPolicy anonymize() { if (GrantType.USERNAME_PASSWORD.equals(grantType)) { return new SubscriptionOAuthPolicy(grantType, providerName, scope, username, ANONYMIZED_PASSWORD); } return this; }
public OAuthTokenRequestRateLimiter create(Subscription subscription) { String providerName = subscription.getOAuthPolicy().getProviderName(); OAuthProvider oAuthProvider = oAuthProviderRepository.getOAuthProviderDetails(providerName); double initialRate = delayToRate(oAuthProvider.getTokenRequestInitialDelay()); double minimalRate = delayToRate(oAuthProvider.getTokenRequestMaxDelay()); return new OAuthTokenRequestRateLimiter(initialRate, minimalRate, rateReductionFactor, oAuthProvider.getTokenRequestInitialDelay()); }
public OAuthTokenRequestRateLimiter create(Subscription subscription) { String providerName = subscription.getOAuthPolicy().getProviderName(); OAuthProvider oAuthProvider = oAuthProviderRepository.getOAuthProviderDetails(providerName); double initialRate = delayToRate(oAuthProvider.getTokenRequestInitialDelay()); double minimalRate = delayToRate(oAuthProvider.getTokenRequestMaxDelay()); return new OAuthTokenRequestRateLimiter(initialRate, minimalRate, rateReductionFactor, oAuthProvider.getTokenRequestInitialDelay()); }