Skip to content

Commit

Permalink
Include auth protocol in AuthFlowConfigurations
Browse files Browse the repository at this point in the history
  • Loading branch information
rtannenbaum committed Aug 17, 2018
1 parent 88d5bc4 commit a227504
Show file tree
Hide file tree
Showing 9 changed files with 76 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,14 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol;
import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol.OAUTH_1;

public class FlickrAuthDataGenerator implements AuthDataGenerator {
private static final Logger logger = LoggerFactory.getLogger(FlickrAuthDataGenerator.class);
private static final AuthProtocol AUTH_PROTOCOL = OAUTH_1;

private final Flickr flickr;
private final static Logger logger = LoggerFactory.getLogger(FlickrAuthDataGenerator.class);

FlickrAuthDataGenerator(AppCredentials appCredentials){
flickr = new Flickr(appCredentials.getKey(), appCredentials.getSecret(), new REST());
Expand All @@ -48,7 +53,7 @@ public AuthFlowConfiguration generateConfiguration(String callbackBaseUrl, Strin
String url =
authInterface.getAuthorizationUrl(
token, Permission.WRITE);
return new AuthFlowConfiguration(url, toAuthData(token));
return new AuthFlowConfiguration(url, AUTH_PROTOCOL, toAuthData(token));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,20 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.io.BaseEncoding;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.datatransferproject.spi.api.auth.AuthDataGenerator;
import org.datatransferproject.spi.api.auth.AuthServiceProviderRegistry.AuthMode;
import org.datatransferproject.spi.api.types.AuthFlowConfiguration;
import org.datatransferproject.types.transfer.auth.AppCredentials;
import org.datatransferproject.types.transfer.auth.AuthData;
import org.datatransferproject.types.transfer.auth.TokensAndUrlAuthData;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol;
import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol.OAUTH_2;

/**
* Provides configuration for conducting an OAuth flow against the Google AD API. Returned tokens
* can be used to make requests against the Google Graph API.
Expand All @@ -49,6 +54,7 @@
* authorization code and posts it against the AD API to obtain a token for querying the Graph API.
*/
public class GoogleAuthDataGenerator implements AuthDataGenerator {
private static final AuthProtocol AUTH_PROTOCOL = OAUTH_2;
// The scopes necessary to import each supported data type.
// These are READ/WRITE scopes
private static final Map<String, List<String>> IMPORT_SCOPES =
Expand Down Expand Up @@ -112,7 +118,7 @@ public AuthFlowConfiguration generateConfiguration(String callbackBaseUrl, Strin
.setRedirectUri(callbackBaseUrl + redirectPath)
.setState(encodedJobId)
.build();
return new AuthFlowConfiguration(url);
return new AuthFlowConfiguration(url, AUTH_PROTOCOL);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,7 @@
*/
package org.datatransferproject.auth.instagram;

import com.google.api.client.auth.oauth2.AuthorizationCodeFlow;
import com.google.api.client.auth.oauth2.BearerToken;
import com.google.api.client.auth.oauth2.ClientParametersAuthentication;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.auth.oauth2.TokenResponse;
import com.google.api.client.auth.oauth2.*;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
Expand All @@ -28,16 +24,20 @@
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.io.BaseEncoding;
import java.io.IOException;
import java.util.List;
import org.datatransferproject.spi.api.auth.AuthDataGenerator;
import org.datatransferproject.spi.api.auth.AuthServiceProviderRegistry.AuthMode;
import org.datatransferproject.spi.api.types.AuthFlowConfiguration;
import org.datatransferproject.types.transfer.auth.AppCredentials;
import org.datatransferproject.types.transfer.auth.AuthData;
import org.datatransferproject.types.transfer.auth.TokensAndUrlAuthData;

import java.io.IOException;
import java.util.List;

import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol;
import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol.OAUTH_2;

public class InstagramAuthDataGenerator implements AuthDataGenerator {
private static final AuthProtocol AUTHORIZATION_PROTOCOL = OAUTH_2;
private static final String CALLBACK_PATH = "/callback/instagram";
private static final String AUTHORIZATION_SERVER_URL =
"https://api.instagram.com/oauth/authorize";
Expand All @@ -61,7 +61,7 @@ public AuthFlowConfiguration generateConfiguration(String callbackBaseUrl, Strin
.setRedirectUri(callbackBaseUrl + CALLBACK_PATH)
.setState(encodedJobId)
.build();
return new AuthFlowConfiguration(url);
return new AuthFlowConfiguration(url, AUTHORIZATION_PROTOCOL);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
import java.util.Map;
import java.util.function.Supplier;

import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol;
import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol.OAUTH_2;

/**
* Provides configuration for conducting an OAuth flow against the Microsoft AD API. Returned tokens
* can be used to make requests against the Microsoft Graph API.
Expand All @@ -31,6 +34,7 @@
* authorization code and posts it against the AD API to obtain a token for querying the Graph API.
*/
public class MicrosoftAuthDataGenerator implements AuthDataGenerator {
private static final AuthProtocol AUTHORIZATION_PROTOCOL = OAUTH_2;
private static final String AUTHORIZATION_URL =
"https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
private static final String TOKEN_URL =
Expand Down Expand Up @@ -102,7 +106,7 @@ public AuthFlowConfiguration generateConfiguration(String callbackBaseUrl, Strin
// constructs a request for the Microsoft Graph authorization code.
String redirectUrl = callbackBaseUrl + redirectPath;
String queryPart = constructAuthQueryPart(redirectUrl, id, scopes);
return new AuthFlowConfiguration(AUTHORIZATION_URL + "?" + queryPart);
return new AuthFlowConfiguration(AUTHORIZATION_URL + "?" + queryPart, AUTHORIZATION_PROTOCOL);
}

public TokenAuthData generateAuthData(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,21 @@
import org.datatransferproject.types.transfer.auth.AuthData;
import org.datatransferproject.types.transfer.auth.TokenAuthData;

import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol;
import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol.OAUTH_2;

/**
* Generates authentication data for the offline data demo importer.
*
* <p>Since the demo does not authenticate against a live service, the OAuth url is set set directly
* to the callback address.
*/
public class OfflineDemoAuthDataGenerator implements AuthDataGenerator {
private static final AuthProtocol AUTH_PROTOCOL = OAUTH_2;

@Override
public AuthFlowConfiguration generateConfiguration(String callbackBaseUrl, String id) {
return new AuthFlowConfiguration(callbackBaseUrl + "/callback/offline-demo?code=123");
return new AuthFlowConfiguration(callbackBaseUrl + "/callback/offline-demo?code=123", AUTH_PROTOCOL);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,17 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol;
import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol.CUSTOM;

public class RememberTheMilkAuthDataGenerator implements AuthDataGenerator {
private static final Logger logger = LoggerFactory.getLogger(RememberTheMilkAuthDataGenerator.class);
private static final AuthProtocol AUTH_PROTOCOL = CUSTOM;
private static final String AUTH_URL = "https://api.rememberthemilk.com/services/auth/";
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final String GET_TOKEN_URL = "https://api.rememberthemilk.com/services/rest/";
private static final String GET_TOKEN_METHOD = "rtm.auth.getToken";

private final Logger logger = LoggerFactory.getLogger(RememberTheMilkAuthDataGenerator.class);
private final RememberTheMilkSignatureGenerator signatureGenerator;
private final String perms;
private final XmlMapper xmlMapper;
Expand All @@ -68,7 +72,7 @@ public AuthFlowConfiguration generateConfiguration(String callbackBaseUrl, Strin
return null;
}

return new AuthFlowConfiguration(authUrlSigned.toString(), null);
return new AuthFlowConfiguration(authUrlSigned.toString(), AUTH_PROTOCOL, null);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,13 @@

import java.io.IOException;

import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol;
import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol.OAUTH_1;

/* SmugmugAuthDataGenerator used for obtaining auth credentials for the Smugmug API*/
public class SmugMugAuthDataGenerator implements AuthDataGenerator {
private final Logger logger = LoggerFactory.getLogger(SmugMugAuthDataGenerator.class);
private static final Logger logger = LoggerFactory.getLogger(SmugMugAuthDataGenerator.class);
private static final AuthProtocol AUTH_PROTOCOL = OAUTH_1;
private final String perms;
private final SmugMugOauthInterface smugMugOauthInterface;

Expand All @@ -55,7 +59,7 @@ public AuthFlowConfiguration generateConfiguration(String callbackBaseUrl, Strin
}

String url = smugMugOauthInterface.getAuthorizationUrl(authData, perms);
return new AuthFlowConfiguration(url, authData);
return new AuthFlowConfiguration(url, AUTH_PROTOCOL, authData);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,14 @@
import twitter4j.auth.RequestToken;
import twitter4j.conf.ConfigurationBuilder;


import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol;
import static org.datatransferproject.spi.api.types.AuthFlowConfiguration.AuthProtocol.OAUTH_2;

/* TwitterAuthDataGenerator used for obtaining auth credentials for the Twitter API*/
final class TwitterAuthDataGenerator implements AuthDataGenerator {
private final Logger logger = LoggerFactory.getLogger(TwitterAuthDataGenerator.class);
private static final Logger logger = LoggerFactory.getLogger(TwitterAuthDataGenerator.class);
private static final AuthProtocol AUTH_PROTOCOL = OAUTH_2;
private final String perms;
private final Twitter twitterApi;

Expand Down Expand Up @@ -63,6 +68,7 @@ public AuthFlowConfiguration generateConfiguration(String callbackBaseUrl, Strin

return new AuthFlowConfiguration(
requestToken.getAuthorizationURL(),
AUTH_PROTOCOL,
new TokenSecretAuthData(requestToken.getToken(), requestToken.getTokenSecret()));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,40 @@
*/
@JsonTypeName("org.dataportability:AuthFlowConfiguration")
public class AuthFlowConfiguration extends PortableType {
public enum AuthProtocol {
UNKNOWN,
OAUTH_1,
OAUTH_2,
CUSTOM
}

private final String url;
private final AuthProtocol authProtocol;
private AuthData initialAuthData;

/**
* Ctor used when the flow does not require initial authentication data.
*
* @param url the initial URL.
*/
public AuthFlowConfiguration(String url) {
public AuthFlowConfiguration(String url, AuthProtocol authProtocol) {
this.url = url;
this.authProtocol = authProtocol;
}

/**
* Ctor.
*
* @param url the initial URL.
* @param url the initial URL.
* @param authProtocol the protocol used for authentication.
* @param initialAuthData the initial authentication data
*/
@JsonCreator
public AuthFlowConfiguration(
@JsonProperty("url") String url, @JsonProperty("initialAuthData") AuthData initialAuthData) {
@JsonProperty("url") String url,
@JsonProperty("authProtocol") AuthProtocol authProtocol,
@JsonProperty("initialAuthData") AuthData initialAuthData) {
this.url = url;
this.authProtocol = authProtocol;
this.initialAuthData = initialAuthData;
}

Expand All @@ -46,4 +58,9 @@ public String getUrl() {
public AuthData getInitialAuthData() {
return initialAuthData;
}

/** Returns the authentication protocol. */
public AuthProtocol getAuthProtocol() {
return authProtocol;
}
}

0 comments on commit a227504

Please sign in to comment.