This is an automated email from the ASF dual-hosted git repository.
pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new b23b2621ac NIFI-11267 Removed deprecated OAuth2TokenProviderImpl
b23b2621ac is described below
commit b23b2621acd53a96d3b8371e128fc1b5590632d0
Author: exceptionfactory <[email protected]>
AuthorDate: Fri Mar 10 09:30:40 2023 -0600
NIFI-11267 Removed deprecated OAuth2TokenProviderImpl
Signed-off-by: Pierre Villard <[email protected]>
This closes #7029.
---
.../nifi-oauth2-provider-service/pom.xml | 24 +--
.../nifi/oauth2/OAuth2TokenProviderImpl.java | 186 ---------------------
.../org.apache.nifi.controller.ControllerService | 2 -
.../nifi/oauth2/OAuth2TokenProviderImplTest.java | 125 --------------
4 files changed, 4 insertions(+), 333 deletions(-)
diff --git
a/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/pom.xml
b/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/pom.xml
index 7dce8e65ac..75c5ff63fc 100644
---
a/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/pom.xml
+++
b/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/pom.xml
@@ -40,31 +40,20 @@
<artifactId>nifi-utils</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-record</artifactId>
- <scope>provided</scope>
- </dependency>
-
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-ssl-context-service-api</artifactId>
<version>2.0.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
-
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>log4j-over-slf4j</artifactId>
- </dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ </dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
@@ -76,10 +65,5 @@
<version>2.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <scope>compile</scope>
- </dependency>
</dependencies>
</project>
diff --git
a/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/main/java/org/apache/nifi/oauth2/OAuth2TokenProviderImpl.java
b/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/main/java/org/apache/nifi/oauth2/OAuth2TokenProviderImpl.java
deleted file mode 100644
index cc06309c2e..0000000000
---
a/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/main/java/org/apache/nifi/oauth2/OAuth2TokenProviderImpl.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.nifi.oauth2;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.X509TrustManager;
-
-import okhttp3.FormBody;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.RequestBody;
-import okhttp3.Response;
-import org.apache.nifi.annotation.documentation.CapabilityDescription;
-import org.apache.nifi.annotation.documentation.DeprecationNotice;
-import org.apache.nifi.annotation.documentation.Tags;
-import org.apache.nifi.annotation.lifecycle.OnEnabled;
-import org.apache.nifi.components.PropertyDescriptor;
-import org.apache.nifi.controller.AbstractControllerService;
-import org.apache.nifi.controller.ConfigurationContext;
-import org.apache.nifi.processor.exception.ProcessException;
-import org.apache.nifi.ssl.SSLContextService;
-import org.apache.nifi.util.StringUtils;
-
-@Deprecated
-@DeprecationNotice(alternatives = {StandardOauth2AccessTokenProvider.class})
-@Tags({"oauth2", "provider", "authorization" })
-@CapabilityDescription("This controller service provides a way of working with
access and refresh tokens via the " +
- "password and client_credential grant flows in the OAuth2
specification. It is meant to provide a way for components " +
- "to get a token from an oauth2 provider and pass that token as a part
of a header to another service.")
-public class OAuth2TokenProviderImpl extends AbstractControllerService
implements OAuth2TokenProvider {
- @Override
- public List<PropertyDescriptor> getSupportedPropertyDescriptors() {
- return PROPERTIES;
- }
-
- private String resourceServerUrl;
- private SSLContext sslContext;
- private SSLContextService sslService;
-
- @OnEnabled
- public void onEnabled(ConfigurationContext context) {
- resourceServerUrl =
context.getProperty(ACCESS_TOKEN_URL).evaluateAttributeExpressions().getValue();
-
- sslService =
context.getProperty(SSL_CONTEXT).asControllerService(SSLContextService.class);
-
- sslContext = sslService == null ? null : sslService.createContext();
- }
-
-
- @Override
- public AccessToken getAccessTokenByPassword(String clientId, String
clientSecret,
- String username, String
password) throws AccessTokenAcquisitionException {
- OkHttpClient.Builder builder = getClientBuilder();
- OkHttpClient client = builder.build();
-
- RequestBody body = new FormBody.Builder()
- .add("username", username)
- .add("password", password)
- .add("client_id", clientId)
- .add("client_secret", clientSecret)
- .add("grant_type", "password")
- .build();
-
- Request newRequest = new Request.Builder()
- .url(resourceServerUrl)
- .post(body)
- .build();
-
- return executePost(client, newRequest);
- }
-
- private OkHttpClient.Builder getClientBuilder() {
- OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
-
- if (sslService != null) {
- final X509TrustManager trustManager =
sslService.createTrustManager();
- clientBuilder.sslSocketFactory(sslContext.getSocketFactory(),
trustManager);
- }
-
- return clientBuilder;
- }
-
- private AccessToken executePost(OkHttpClient httpClient, Request
newRequest) throws AccessTokenAcquisitionException {
- try {
- Response response = httpClient.newCall(newRequest).execute();
- String body = response.body().string();
- if (response.code() >= 300) {
- getLogger().error(String.format("Bad response from the server
during oauth2 request:\n%s", body));
- throw new AccessTokenAcquisitionException(String.format("Got
HTTP %d during oauth2 request.", response.code()));
- }
-
- return parseTokenResponse(body);
- } catch (IOException e) {
- throw new AccessTokenAcquisitionException(e);
- }
- }
-
- @Override
- public AccessToken getAccessTokenByClientCredentials(String clientId,
String clientSecret) throws AccessTokenAcquisitionException {
- OkHttpClient.Builder builder = getClientBuilder();
- OkHttpClient client = builder.build();
-
- RequestBody body = new FormBody.Builder()
- .add("grant_type", "client_credentials")
- .add("client_id", clientId)
- .add("client_secret", clientSecret)
- .build();
-
- Request newRequest = new Request.Builder()
- .url(resourceServerUrl)
- .post(body)
- .build();
-
- return executePost(client, newRequest);
- }
-
- @Override
- public AccessToken refreshToken(AccessToken refreshThis) throws
AccessTokenAcquisitionException {
- if (StringUtils.isEmpty(refreshThis.getRefreshToken())) {
- throw new ProcessException("Missing refresh token. Refresh cannot
happen.");
- }
- OkHttpClient.Builder builder = getClientBuilder();
- OkHttpClient client = builder.build();
- RequestBody body = new FormBody.Builder()
- .add("grant_type", "refresh_token")
- .add("refresh_token", refreshThis.getRefreshToken())
- .build();
-
- Request newRequest = new Request.Builder()
- .url(resourceServerUrl)
- .post(body)
- .build();
-
- return executePost(client, newRequest);
- }
-
- private static final ObjectMapper MAPPER = new ObjectMapper();
-
- public static final String KEY_ACCESS_TOKEN = "access_token";
- public static final String KEY_REFRESH_TOKEN = "refresh_token";
- public static final String KEY_EXPIRES = "expires_in";
- public static final String KEY_TOKEN_TYPE = "token_type";
- public static final String KEY_SCOPE = "scope";
-
- public AccessToken parseTokenResponse(String rawResponse) {
- try {
- Map<String, Object> parsed = MAPPER.readValue(rawResponse,
Map.class);
- String accessToken = (String)parsed.get(KEY_ACCESS_TOKEN);
- String refreshToken = (String)parsed.get(KEY_REFRESH_TOKEN);
- Integer expires = (Integer)parsed.get(KEY_EXPIRES);
- String tokenType = (String)parsed.get(KEY_TOKEN_TYPE);
- String scope = (String)parsed.get(KEY_SCOPE);
-
- if (StringUtils.isEmpty(accessToken)) {
- throw new Exception(String.format("Missing value for %s",
KEY_ACCESS_TOKEN));
- }
-
- if (StringUtils.isEmpty(tokenType)) {
- throw new Exception(String.format("Missing value for %s",
KEY_TOKEN_TYPE));
- }
-
- return new AccessToken(accessToken, refreshToken, tokenType,
expires, scope);
- } catch (Exception ex) {
- throw new ProcessException(ex);
- }
- }
-}
diff --git
a/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
b/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
index b1de8ed022..cd4bc7ee01 100644
---
a/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
+++
b/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
@@ -12,6 +12,4 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-org.apache.nifi.oauth2.OAuth2TokenProviderImpl
org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider
-
diff --git
a/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/test/java/org/apache/nifi/oauth2/OAuth2TokenProviderImplTest.java
b/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/test/java/org/apache/nifi/oauth2/OAuth2TokenProviderImplTest.java
deleted file mode 100644
index ab04d6654d..0000000000
---
a/nifi-nar-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/src/test/java/org/apache/nifi/oauth2/OAuth2TokenProviderImplTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.nifi.oauth2;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import org.apache.nifi.processor.AbstractProcessor;
-import org.apache.nifi.processor.ProcessContext;
-import org.apache.nifi.processor.ProcessSession;
-import org.apache.nifi.processor.exception.ProcessException;
-import org.apache.nifi.util.TestRunner;
-import org.apache.nifi.util.TestRunners;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-public class OAuth2TokenProviderImplTest {
- private TestRunner runner;
-
- private MockWebServer mockWebServer;
-
- private OAuth2TokenProvider oAuth2TokenProvider;
-
- @BeforeEach
- public void setup() throws Exception {
- mockWebServer = new MockWebServer();
- final String url = mockWebServer.url("/").toString();
-
- runner = TestRunners.newTestRunner(new AbstractProcessor() {
- @Override
- public void onTrigger(ProcessContext context, ProcessSession
session) throws ProcessException {
-
- }
- });
- oAuth2TokenProvider = new OAuth2TokenProviderImpl();
- runner.addControllerService("provider", oAuth2TokenProvider);
- runner.setProperty(oAuth2TokenProvider,
OAuth2TokenProvider.ACCESS_TOKEN_URL, url);
- runner.enableControllerService(oAuth2TokenProvider);
- runner.assertValid();
- }
-
- @Test
- public void testClientCredentialGrant() throws
AccessTokenAcquisitionException, JsonProcessingException {
- enqueueTokenResponse();
- final AccessToken token =
oAuth2TokenProvider.getAccessTokenByClientCredentials(
- "test-client",
- UUID.randomUUID().toString()
- );
- assertAccessTokenFound(token);
- }
-
- @Test
- public void testErrorHandler() {
- mockWebServer.enqueue(new MockResponse().setResponseCode(500));
- assertThrows(AccessTokenAcquisitionException.class, () ->
oAuth2TokenProvider.getAccessTokenByClientCredentials(
- "test-client",
- UUID.randomUUID().toString()
- ));
- }
-
- @Test
- public void testPasswordGrant() throws AccessTokenAcquisitionException,
JsonProcessingException {
- enqueueTokenResponse();
- final AccessToken token = oAuth2TokenProvider.getAccessTokenByPassword(
- "test-client",
- UUID.randomUUID().toString(),
- "user",
- "password"
- );
- assertAccessTokenFound(token);
- }
-
- @Test
- public void testRefreshToken() throws AccessTokenAcquisitionException,
JsonProcessingException {
- enqueueTokenResponse();
- final AccessToken token = oAuth2TokenProvider.refreshToken(
- new AccessToken("token", "refresh", "BEARER", 300, "test")
- );
- assertAccessTokenFound(token);
- }
-
- private void assertAccessTokenFound(final AccessToken accessToken) {
- assertNotNull(accessToken);
- assertEquals("access token", accessToken.getAccessToken());
- assertEquals(5300, accessToken.getExpiresIn());
- assertEquals("BEARER", accessToken.getTokenType());
- assertFalse(accessToken.isExpired());
- }
-
- private void enqueueTokenResponse() throws JsonProcessingException {
- final Map<String, Object> token = new HashMap<>();
- token.put("access_token", "access token");
- token.put("refresh_token", "refresh token");
- token.put("token_type", "BEARER");
- token.put("expires_in", 5300);
- token.put("scope", "test scope");
- final String accessToken = new
ObjectMapper().writeValueAsString(token);
- mockWebServer.enqueue(new
MockResponse().setResponseCode(200).addHeader("Content-Type",
"application/json").setBody(accessToken));
- }
-}
\ No newline at end of file