Skip to content

Commit e68dd89

Browse files
benmoriceauakashkulk
authored andcommitted
Revert "Bmoric/add fetch source schema in oauth (#19392)" (#19512)
This reverts commit a968078.
1 parent 5a74345 commit e68dd89

File tree

6 files changed

+25
-280
lines changed

6 files changed

+25
-280
lines changed

airbyte-commons/src/main/java/io/airbyte/commons/json/Jsons.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,6 @@ public static void mergeMaps(final Map<String, Object> originalMap, final String
281281
Entry::getValue)));
282282
}
283283

284-
public static Map<String, String> deserializeToStringMap(JsonNode json) {
285-
return OBJECT_MAPPER.convertValue(json, new TypeReference<>() {});
286-
}
287-
288284
/**
289285
* By the Jackson DefaultPrettyPrinter prints objects with an extra space as follows: {"name" :
290286
* "airbyte"}. We prefer {"name": "airbyte"}.

airbyte-server/src/main/java/io/airbyte/server/ServerApp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ public static ServerRunnable getServer(final ServerFactory apiFactory,
295295

296296
final HealthCheckHandler healthCheckHandler = new HealthCheckHandler(configRepository);
297297

298-
final OAuthHandler oAuthHandler = new OAuthHandler(configRepository, httpClient, trackingClient, secretsRepositoryReader);
298+
final OAuthHandler oAuthHandler = new OAuthHandler(configRepository, httpClient, trackingClient);
299299

300300
final SourceHandler sourceHandler = new SourceHandler(
301301
configRepository,

airbyte-server/src/main/java/io/airbyte/server/handlers/OAuthHandler.java

Lines changed: 23 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
package io.airbyte.server.handlers;
66

7-
import com.fasterxml.jackson.databind.JsonNode;
8-
import com.google.common.annotations.VisibleForTesting;
97
import io.airbyte.analytics.TrackingClient;
108
import io.airbyte.api.model.generated.CompleteDestinationOAuthRequest;
119
import io.airbyte.api.model.generated.CompleteSourceOauthRequest;
@@ -14,32 +12,23 @@
1412
import io.airbyte.api.model.generated.SetInstancewideDestinationOauthParamsRequestBody;
1513
import io.airbyte.api.model.generated.SetInstancewideSourceOauthParamsRequestBody;
1614
import io.airbyte.api.model.generated.SourceOauthConsentRequest;
17-
import io.airbyte.commons.constants.AirbyteSecretConstants;
18-
import io.airbyte.commons.json.JsonPaths;
1915
import io.airbyte.commons.json.Jsons;
20-
import io.airbyte.config.DestinationConnection;
2116
import io.airbyte.config.DestinationOAuthParameter;
22-
import io.airbyte.config.SourceConnection;
2317
import io.airbyte.config.SourceOAuthParameter;
2418
import io.airbyte.config.StandardDestinationDefinition;
2519
import io.airbyte.config.StandardSourceDefinition;
2620
import io.airbyte.config.persistence.ConfigNotFoundException;
2721
import io.airbyte.config.persistence.ConfigRepository;
28-
import io.airbyte.config.persistence.SecretsRepositoryReader;
2922
import io.airbyte.oauth.OAuthFlowImplementation;
3023
import io.airbyte.oauth.OAuthImplementationFactory;
3124
import io.airbyte.persistence.job.factory.OAuthConfigSupplier;
3225
import io.airbyte.persistence.job.tracker.TrackingMetadata;
3326
import io.airbyte.protocol.models.ConnectorSpecification;
34-
import io.airbyte.server.handlers.helpers.OAuthPathExtractor;
3527
import io.airbyte.validation.json.JsonValidationException;
3628
import java.io.IOException;
3729
import java.net.http.HttpClient;
38-
import java.util.HashMap;
39-
import java.util.List;
4030
import java.util.Map;
4131
import java.util.UUID;
42-
import java.util.stream.Collectors;
4332
import org.slf4j.Logger;
4433
import org.slf4j.LoggerFactory;
4534

@@ -51,97 +40,67 @@ public class OAuthHandler {
5140
private final ConfigRepository configRepository;
5241
private final OAuthImplementationFactory oAuthImplementationFactory;
5342
private final TrackingClient trackingClient;
54-
private final SecretsRepositoryReader secretsRepositoryReader;
5543

5644
public OAuthHandler(final ConfigRepository configRepository,
5745
final HttpClient httpClient,
58-
final TrackingClient trackingClient,
59-
final SecretsRepositoryReader secretsRepositoryReader) {
46+
final TrackingClient trackingClient) {
6047
this.configRepository = configRepository;
6148
this.oAuthImplementationFactory = new OAuthImplementationFactory(configRepository, httpClient);
6249
this.trackingClient = trackingClient;
63-
this.secretsRepositoryReader = secretsRepositoryReader;
6450
}
6551

66-
public OAuthConsentRead getSourceOAuthConsent(final SourceOauthConsentRequest sourceOauthConsentRequest)
52+
public OAuthConsentRead getSourceOAuthConsent(final SourceOauthConsentRequest sourceDefinitionIdRequestBody)
6753
throws JsonValidationException, ConfigNotFoundException, IOException {
6854
final StandardSourceDefinition sourceDefinition =
69-
configRepository.getStandardSourceDefinition(sourceOauthConsentRequest.getSourceDefinitionId());
55+
configRepository.getStandardSourceDefinition(sourceDefinitionIdRequestBody.getSourceDefinitionId());
7056
final OAuthFlowImplementation oAuthFlowImplementation = oAuthImplementationFactory.create(sourceDefinition);
7157
final ConnectorSpecification spec = sourceDefinition.getSpec();
72-
final Map<String, Object> metadata = generateSourceMetadata(sourceOauthConsentRequest.getSourceDefinitionId());
58+
final Map<String, Object> metadata = generateSourceMetadata(sourceDefinitionIdRequestBody.getSourceDefinitionId());
7359
final OAuthConsentRead result;
7460
if (OAuthConfigSupplier.hasOAuthConfigSpecification(spec)) {
75-
final JsonNode oAuthInputConfigurationForConsent;
76-
77-
if (sourceOauthConsentRequest.getSourceId() == null) {
78-
oAuthInputConfigurationForConsent = sourceOauthConsentRequest.getoAuthInputConfiguration();
79-
} else {
80-
final SourceConnection hydratedSourceConnection =
81-
secretsRepositoryReader.getSourceConnectionWithSecrets(sourceOauthConsentRequest.getSourceId());
82-
83-
oAuthInputConfigurationForConsent = getOAuthInputConfigurationForConsent(spec,
84-
hydratedSourceConnection.getConfiguration(),
85-
sourceOauthConsentRequest.getoAuthInputConfiguration());
86-
}
87-
8861
result = new OAuthConsentRead().consentUrl(oAuthFlowImplementation.getSourceConsentUrl(
89-
sourceOauthConsentRequest.getWorkspaceId(),
90-
sourceOauthConsentRequest.getSourceDefinitionId(),
91-
sourceOauthConsentRequest.getRedirectUrl(),
92-
oAuthInputConfigurationForConsent,
62+
sourceDefinitionIdRequestBody.getWorkspaceId(),
63+
sourceDefinitionIdRequestBody.getSourceDefinitionId(),
64+
sourceDefinitionIdRequestBody.getRedirectUrl(),
65+
sourceDefinitionIdRequestBody.getoAuthInputConfiguration(),
9366
spec.getAdvancedAuth().getOauthConfigSpecification()));
9467
} else {
9568
result = new OAuthConsentRead().consentUrl(oAuthFlowImplementation.getSourceConsentUrl(
96-
sourceOauthConsentRequest.getWorkspaceId(),
97-
sourceOauthConsentRequest.getSourceDefinitionId(),
98-
sourceOauthConsentRequest.getRedirectUrl(), Jsons.emptyObject(), null));
69+
sourceDefinitionIdRequestBody.getWorkspaceId(),
70+
sourceDefinitionIdRequestBody.getSourceDefinitionId(),
71+
sourceDefinitionIdRequestBody.getRedirectUrl(), Jsons.emptyObject(), null));
9972
}
10073
try {
101-
trackingClient.track(sourceOauthConsentRequest.getWorkspaceId(), "Get Oauth Consent URL - Backend", metadata);
74+
trackingClient.track(sourceDefinitionIdRequestBody.getWorkspaceId(), "Get Oauth Consent URL - Backend", metadata);
10275
} catch (final Exception e) {
10376
LOGGER.error(ERROR_MESSAGE, e);
10477
}
10578
return result;
10679
}
10780

108-
public OAuthConsentRead getDestinationOAuthConsent(final DestinationOauthConsentRequest destinationOauthConsentRequest)
81+
public OAuthConsentRead getDestinationOAuthConsent(final DestinationOauthConsentRequest destinationDefinitionIdRequestBody)
10982
throws JsonValidationException, ConfigNotFoundException, IOException {
11083
final StandardDestinationDefinition destinationDefinition =
111-
configRepository.getStandardDestinationDefinition(destinationOauthConsentRequest.getDestinationDefinitionId());
84+
configRepository.getStandardDestinationDefinition(destinationDefinitionIdRequestBody.getDestinationDefinitionId());
11285
final OAuthFlowImplementation oAuthFlowImplementation = oAuthImplementationFactory.create(destinationDefinition);
11386
final ConnectorSpecification spec = destinationDefinition.getSpec();
114-
final Map<String, Object> metadata = generateDestinationMetadata(destinationOauthConsentRequest.getDestinationDefinitionId());
87+
final Map<String, Object> metadata = generateDestinationMetadata(destinationDefinitionIdRequestBody.getDestinationDefinitionId());
11588
final OAuthConsentRead result;
11689
if (OAuthConfigSupplier.hasOAuthConfigSpecification(spec)) {
117-
final JsonNode oAuthInputConfigurationForConsent;
118-
119-
if (destinationOauthConsentRequest.getDestinationId() == null) {
120-
oAuthInputConfigurationForConsent = destinationOauthConsentRequest.getoAuthInputConfiguration();
121-
} else {
122-
final DestinationConnection hydratedSourceConnection =
123-
secretsRepositoryReader.getDestinationConnectionWithSecrets(destinationOauthConsentRequest.getDestinationId());
124-
125-
oAuthInputConfigurationForConsent = getOAuthInputConfigurationForConsent(spec,
126-
hydratedSourceConnection.getConfiguration(),
127-
destinationOauthConsentRequest.getoAuthInputConfiguration());
128-
129-
}
130-
13190
result = new OAuthConsentRead().consentUrl(oAuthFlowImplementation.getDestinationConsentUrl(
132-
destinationOauthConsentRequest.getWorkspaceId(),
133-
destinationOauthConsentRequest.getDestinationDefinitionId(),
134-
destinationOauthConsentRequest.getRedirectUrl(),
135-
oAuthInputConfigurationForConsent,
91+
destinationDefinitionIdRequestBody.getWorkspaceId(),
92+
destinationDefinitionIdRequestBody.getDestinationDefinitionId(),
93+
destinationDefinitionIdRequestBody.getRedirectUrl(),
94+
destinationDefinitionIdRequestBody.getoAuthInputConfiguration(),
13695
spec.getAdvancedAuth().getOauthConfigSpecification()));
13796
} else {
13897
result = new OAuthConsentRead().consentUrl(oAuthFlowImplementation.getDestinationConsentUrl(
139-
destinationOauthConsentRequest.getWorkspaceId(),
140-
destinationOauthConsentRequest.getDestinationDefinitionId(),
141-
destinationOauthConsentRequest.getRedirectUrl(), Jsons.emptyObject(), null));
98+
destinationDefinitionIdRequestBody.getWorkspaceId(),
99+
destinationDefinitionIdRequestBody.getDestinationDefinitionId(),
100+
destinationDefinitionIdRequestBody.getRedirectUrl(), Jsons.emptyObject(), null));
142101
}
143102
try {
144-
trackingClient.track(destinationOauthConsentRequest.getWorkspaceId(), "Get Oauth Consent URL - Backend", metadata);
103+
trackingClient.track(destinationDefinitionIdRequestBody.getWorkspaceId(), "Get Oauth Consent URL - Backend", metadata);
145104
} catch (final Exception e) {
146105
LOGGER.error(ERROR_MESSAGE, e);
147106
}
@@ -236,19 +195,6 @@ public void setDestinationInstancewideOauthParams(final SetInstancewideDestinati
236195
configRepository.writeDestinationOAuthParam(param);
237196
}
238197

239-
private JsonNode getOAuthInputConfigurationForConsent(final ConnectorSpecification spec,
240-
final JsonNode hydratedSourceConnectionConfiguration,
241-
final JsonNode oAuthInputConfiguration) {
242-
final Map<String, String> fieldsToGet =
243-
buildJsonPathFromOAuthFlowInitParameters(OAuthPathExtractor.extractOauthConfigurationPaths(
244-
spec.getAdvancedAuth().getOauthConfigSpecification().getOauthUserInputFromConnectorConfigSpecification()));
245-
246-
final JsonNode oAuthInputConfigurationFromDB = getOAuthInputConfiguration(hydratedSourceConnectionConfiguration, fieldsToGet);
247-
248-
return getOauthFromDBIfNeeded(oAuthInputConfigurationFromDB,
249-
oAuthInputConfiguration);
250-
}
251-
252198
private Map<String, Object> generateSourceMetadata(final UUID sourceDefinitionId)
253199
throws JsonValidationException, ConfigNotFoundException, IOException {
254200
final StandardSourceDefinition sourceDefinition = configRepository.getStandardSourceDefinition(sourceDefinitionId);
@@ -261,40 +207,4 @@ private Map<String, Object> generateDestinationMetadata(final UUID destinationDe
261207
return TrackingMetadata.generateDestinationDefinitionMetadata(destinationDefinition);
262208
}
263209

264-
@VisibleForTesting
265-
Map<String, String> buildJsonPathFromOAuthFlowInitParameters(final Map<String, List<String>> oAuthFlowInitParameters) {
266-
return oAuthFlowInitParameters.entrySet().stream()
267-
.map(entry -> Map.entry(entry.getKey(), "$." + String.join(".", entry.getValue())))
268-
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
269-
}
270-
271-
@VisibleForTesting
272-
JsonNode getOauthFromDBIfNeeded(final JsonNode oAuthInputConfigurationFromDB, final JsonNode oAuthInputConfigurationFromInput) {
273-
final Map<String, String> result = new HashMap<>();
274-
275-
Jsons.deserializeToStringMap(oAuthInputConfigurationFromInput)
276-
.forEach((k, v) -> {
277-
if (AirbyteSecretConstants.SECRETS_MASK.equals(v)) {
278-
if (oAuthInputConfigurationFromDB.has(k)) {
279-
result.put(k, oAuthInputConfigurationFromDB.get(k).textValue());
280-
} else {
281-
LOGGER.warn("Missing the key {} in the config store in DB", k);
282-
}
283-
284-
} else {
285-
result.put(k, v);
286-
}
287-
});
288-
289-
return Jsons.jsonNode(result);
290-
}
291-
292-
@VisibleForTesting
293-
JsonNode getOAuthInputConfiguration(final JsonNode hydratedSourceConnectionConfiguration, final Map<String, String> pathsToGet) {
294-
return Jsons.jsonNode(pathsToGet.entrySet().stream()
295-
.collect(Collectors.toMap(
296-
Map.Entry::getKey,
297-
entry -> JsonPaths.getSingleValue(hydratedSourceConnectionConfiguration, entry.getValue()).get())));
298-
}
299-
300210
}

airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/OAuthPathExtractor.java

Lines changed: 0 additions & 40 deletions
This file was deleted.

airbyte-server/src/test/java/io/airbyte/server/handlers/OAuthHandlerTest.java

Lines changed: 1 addition & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@
88
import static org.mockito.Mockito.mock;
99
import static org.mockito.Mockito.when;
1010

11-
import com.fasterxml.jackson.databind.JsonNode;
1211
import io.airbyte.analytics.TrackingClient;
1312
import io.airbyte.api.model.generated.SetInstancewideDestinationOauthParamsRequestBody;
1413
import io.airbyte.api.model.generated.SetInstancewideSourceOauthParamsRequestBody;
1514
import io.airbyte.commons.json.Jsons;
1615
import io.airbyte.config.DestinationOAuthParameter;
1716
import io.airbyte.config.SourceOAuthParameter;
1817
import io.airbyte.config.persistence.ConfigRepository;
19-
import io.airbyte.config.persistence.SecretsRepositoryReader;
2018
import io.airbyte.validation.json.JsonValidationException;
2119
import java.io.IOException;
2220
import java.net.http.HttpClient;
@@ -36,7 +34,6 @@ class OAuthHandlerTest {
3634
private OAuthHandler handler;
3735
private TrackingClient trackingClient;
3836
private HttpClient httpClient;
39-
private SecretsRepositoryReader secretsRepositoryReader;
4037
private static final String CLIENT_ID = "123";
4138
private static final String CLIENT_ID_KEY = "client_id";
4239
private static final String CLIENT_SECRET_KEY = "client_secret";
@@ -47,8 +44,7 @@ public void init() {
4744
configRepository = Mockito.mock(ConfigRepository.class);
4845
trackingClient = mock(TrackingClient.class);
4946
httpClient = Mockito.mock(HttpClient.class);
50-
secretsRepositoryReader = mock(SecretsRepositoryReader.class);
51-
handler = new OAuthHandler(configRepository, httpClient, trackingClient, secretsRepositoryReader);
47+
handler = new OAuthHandler(configRepository, httpClient, trackingClient);
5248
}
5349

5450
@Test
@@ -155,77 +151,4 @@ void resetDestinationInstancewideOauthParams() throws JsonValidationException, I
155151
assertEquals(oauthParameterId, capturedValues.get(1).getOauthParameterId());
156152
}
157153

158-
@Test
159-
void testBuildJsonPathFromOAuthFlowInitParameters() {
160-
final Map<String, List<String>> input = Map.ofEntries(
161-
Map.entry("field1", List.of("1")),
162-
Map.entry("field2", List.of("2", "3")));
163-
164-
final Map<String, String> expected = Map.ofEntries(
165-
Map.entry("field1", "$.1"),
166-
Map.entry("field2", "$.2.3"));
167-
168-
assertEquals(expected, handler.buildJsonPathFromOAuthFlowInitParameters(input));
169-
}
170-
171-
@Test
172-
void testGetOAuthInputConfiguration() {
173-
final JsonNode hydratedConfig = Jsons.deserialize(
174-
"""
175-
{
176-
"field1": "1",
177-
"field2": "2",
178-
"field3": {
179-
"field3_1": "3_1",
180-
"field3_2": "3_2"
181-
}
182-
}
183-
""");
184-
185-
final Map<String, String> pathsToGet = Map.ofEntries(
186-
Map.entry("field1", "$.field1"),
187-
Map.entry("field3_1", "$.field3.field3_1"),
188-
Map.entry("field3_2", "$.field3.field3_2"));
189-
190-
final JsonNode expected = Jsons.deserialize(
191-
"""
192-
{
193-
"field1": "1",
194-
"field3_1": "3_1",
195-
"field3_2": "3_2"
196-
}
197-
""");
198-
199-
assertEquals(expected, handler.getOAuthInputConfiguration(hydratedConfig, pathsToGet));
200-
}
201-
202-
@Test
203-
void testGetOauthFromDBIfNeeded() {
204-
final JsonNode fromInput = Jsons.deserialize(
205-
"""
206-
{
207-
"testMask": "**********",
208-
"testNotMask": "this"
209-
}
210-
""");
211-
212-
final JsonNode fromDb = Jsons.deserialize(
213-
"""
214-
{
215-
"testMask": "mask",
216-
"testNotMask": "notThis"
217-
}
218-
""");
219-
220-
final JsonNode expected = Jsons.deserialize(
221-
"""
222-
{
223-
"testMask": "mask",
224-
"testNotMask": "this"
225-
}
226-
""");
227-
228-
assertEquals(expected, handler.getOauthFromDBIfNeeded(fromDb, fromInput));
229-
}
230-
231154
}

0 commit comments

Comments
 (0)