Skip to content

Commit 4e2a9a1

Browse files
committed
standardize authorization url generation for OAuth2
1 parent 8af489a commit 4e2a9a1

31 files changed

+120
-376
lines changed

changelog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* refactor usage of grant_type [authorization_code|refresh_token|password|etc]
55
* add Genius.com API authentication (OAuth2)
66
* fix GitHub API
7+
* standardize authorization url generation for OAuth2
78

89
[2.5.3]
910
* fix - do not send two Content-Type header in async requests

scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,9 @@
55
import com.github.scribejava.core.builder.api.DefaultApi20;
66
import com.github.scribejava.core.extractors.TokenExtractor;
77
import com.github.scribejava.core.model.OAuth2AccessToken;
8-
import com.github.scribejava.core.model.OAuthConfig;
9-
import com.github.scribejava.core.utils.OAuthEncoder;
108

119
public class ConstantContactApi2 extends DefaultApi20 {
1210

13-
private static final String AUTHORIZE_URL
14-
= "https://oauth2.constantcontact.com/oauth2/oauth/siteowner/authorize?client_id=%s&response_type=code"
15-
+ "&redirect_uri=%s";
16-
1711
protected ConstantContactApi2() {
1812
}
1913

@@ -31,8 +25,8 @@ public String getAccessTokenEndpoint() {
3125
}
3226

3327
@Override
34-
public String getAuthorizationUrl(OAuthConfig config) {
35-
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
28+
protected String getAuthorizationBaseUrl() {
29+
return "https://oauth2.constantcontact.com/oauth2/oauth/siteowner/authorize";
3630
}
3731

3832
@Override

scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,10 @@
33
import com.github.scribejava.apis.service.DoktornaraboteOAuthServiceImpl;
44
import com.github.scribejava.core.builder.api.DefaultApi20;
55
import com.github.scribejava.core.model.OAuthConfig;
6-
import com.github.scribejava.core.model.OAuthConstants;
76
import com.github.scribejava.core.oauth.OAuth20Service;
8-
import com.github.scribejava.core.utils.OAuthEncoder;
9-
import com.github.scribejava.core.utils.Preconditions;
107

118
public class DoktornaraboteApi extends DefaultApi20 {
129

13-
private static final String AUTHORIZE_URL
14-
= "http://auth.doktornarabote.ru/OAuth/Authorize?response_type=code&client_id=%s&redirect_uri=%s&scope=%s";
15-
private static final String TOKEN_URL = "http://auth.doktornarabote.ru/OAuth/Token";
16-
1710
protected DoktornaraboteApi() {
1811
}
1912

@@ -27,28 +20,12 @@ public static DoktornaraboteApi instance() {
2720

2821
@Override
2922
public String getAccessTokenEndpoint() {
30-
return TOKEN_URL;
23+
return "http://auth.doktornarabote.ru/OAuth/Token";
3124
}
3225

3326
@Override
34-
public String getAuthorizationUrl(OAuthConfig config) {
35-
Preconditions.checkValidUrl(
36-
config.getCallback(),
37-
"Must provide a valid url as callback. Doktornarabote does not support OOB");
38-
final StringBuilder sb = new StringBuilder(
39-
String.format(
40-
AUTHORIZE_URL,
41-
config.getApiKey(),
42-
OAuthEncoder.encode(config.getCallback()),
43-
OAuthEncoder.encode(config.getScope())
44-
)
45-
);
46-
47-
final String state = config.getState();
48-
if (state != null) {
49-
sb.append('&').append(OAuthConstants.STATE).append('=').append(OAuthEncoder.encode(state));
50-
}
51-
return sb.toString();
27+
protected String getAuthorizationBaseUrl() {
28+
return "http://auth.doktornarabote.ru/OAuth/Authorize";
5229
}
5330

5431
@Override
Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,13 @@
11
package com.github.scribejava.apis;
22

33
import com.github.scribejava.core.builder.api.DefaultApi20;
4-
import com.github.scribejava.core.model.OAuthConfig;
5-
import com.github.scribejava.core.model.OAuthConstants;
64
import com.github.scribejava.core.model.Verb;
7-
import com.github.scribejava.core.utils.OAuthEncoder;
8-
import com.github.scribejava.core.utils.Preconditions;
95

106
/**
117
* Facebook v2.5 API
128
*/
139
public class FacebookApi extends DefaultApi20 {
1410

15-
private static final String AUTHORIZE_URL
16-
= "https://www.facebook.com/v2.5/dialog/oauth?client_id=%s&redirect_uri=%s";
17-
1811
protected FacebookApi() {
1912
}
2013

@@ -43,19 +36,7 @@ public String getRefreshTokenEndpoint() {
4336
}
4437

4538
@Override
46-
public String getAuthorizationUrl(OAuthConfig config) {
47-
Preconditions.checkValidUrl(config.getCallback(),
48-
"Must provide a valid url as callback. Facebook does not support OOB");
49-
final StringBuilder sb = new StringBuilder(String.format(AUTHORIZE_URL, config.getApiKey(),
50-
OAuthEncoder.encode(config.getCallback())));
51-
if (config.hasScope()) {
52-
sb.append('&').append(OAuthConstants.SCOPE).append('=').append(OAuthEncoder.encode(config.getScope()));
53-
}
54-
55-
final String state = config.getState();
56-
if (state != null) {
57-
sb.append('&').append(OAuthConstants.STATE).append('=').append(OAuthEncoder.encode(state));
58-
}
59-
return sb.toString();
39+
protected String getAuthorizationBaseUrl() {
40+
return "https://www.facebook.com/v2.5/dialog/oauth";
6041
}
6142
}

scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
package com.github.scribejava.apis;
22

33
import com.github.scribejava.core.builder.api.DefaultApi20;
4-
import com.github.scribejava.core.model.OAuthConfig;
54
import com.github.scribejava.core.model.Verb;
6-
import com.github.scribejava.core.utils.OAuthEncoder;
7-
import com.github.scribejava.core.utils.Preconditions;
85

96
public class Foursquare2Api extends DefaultApi20 {
107

11-
private static final String AUTHORIZATION_URL
12-
= "https://foursquare.com/oauth2/authenticate?client_id=%s&response_type=code&redirect_uri=%s";
13-
148
protected Foursquare2Api() {
159
}
1610

@@ -33,9 +27,7 @@ public String getAccessTokenEndpoint() {
3327
}
3428

3529
@Override
36-
public String getAuthorizationUrl(OAuthConfig config) {
37-
Preconditions.checkValidUrl(config.getCallback(),
38-
"Must provide a valid url as callback. Foursquare2 does not support OOB");
39-
return String.format(AUTHORIZATION_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
30+
protected String getAuthorizationBaseUrl() {
31+
return "https://foursquare.com/oauth2/authenticate";
4032
}
4133
}

scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,9 @@
44
import com.github.scribejava.core.builder.api.DefaultApi20;
55
import com.github.scribejava.core.model.OAuthConfig;
66
import com.github.scribejava.core.oauth.OAuth20Service;
7-
import com.github.scribejava.core.utils.OAuthEncoder;
87

98
public class GeniusApi extends DefaultApi20 {
109

11-
private static final String AUTHORIZE_URL = "https://api.genius.com/oauth/authorize"
12-
+ "?client_id=%s"
13-
+ "&redirect_uri=%s"
14-
+ "&scope=%s"
15-
+ "&state=%s"
16-
+ "&response_type=code";
17-
18-
private static final String TOKEN_ENDPOINT_URL = "https://api.genius.com/oauth/token";
19-
2010
protected GeniusApi() {
2111
}
2212

@@ -31,18 +21,12 @@ public static GeniusApi instance() {
3121

3222
@Override
3323
public String getAccessTokenEndpoint() {
34-
return TOKEN_ENDPOINT_URL;
24+
return "https://api.genius.com/oauth/token";
3525
}
3626

3727
@Override
38-
public String getAuthorizationUrl(OAuthConfig config) {
39-
40-
// User must provide these 4 elements to the service builder
41-
return String.format(AUTHORIZE_URL,
42-
OAuthEncoder.encode(config.getApiKey()),
43-
OAuthEncoder.encode(config.getCallback()),
44-
OAuthEncoder.encode(config.getScope()),
45-
OAuthEncoder.encode(config.getState()));
28+
protected String getAuthorizationBaseUrl() {
29+
return "https://api.genius.com/oauth/authorize";
4630
}
4731

4832
@Override

scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,10 @@
44
import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor;
55
import com.github.scribejava.core.extractors.TokenExtractor;
66
import com.github.scribejava.core.model.OAuth2AccessToken;
7-
import com.github.scribejava.core.model.OAuthConfig;
8-
import com.github.scribejava.core.model.OAuthConstants;
97
import com.github.scribejava.core.model.Verb;
10-
import com.github.scribejava.core.utils.OAuthEncoder;
11-
import com.github.scribejava.core.utils.Preconditions;
128

139
public class GitHubApi extends DefaultApi20 {
1410

15-
private static final String AUTHORIZE_URL = "https://github.com/login/oauth/authorize?client_id=%s&redirect_uri=%s";
16-
1711
protected GitHubApi() {
1812
}
1913

@@ -36,19 +30,8 @@ public String getAccessTokenEndpoint() {
3630
}
3731

3832
@Override
39-
public String getAuthorizationUrl(OAuthConfig config) {
40-
Preconditions.checkValidUrl(config.getCallback(),
41-
"Must provide a valid url as callback. GitHub does not support OOB");
42-
final StringBuilder sb = new StringBuilder(String.format(AUTHORIZE_URL, config.getApiKey(),
43-
OAuthEncoder.encode(config.getCallback())));
44-
if (config.hasScope()) {
45-
sb.append('&').append(OAuthConstants.SCOPE).append('=').append(OAuthEncoder.encode(config.getScope()));
46-
}
47-
final String state = config.getState();
48-
if (state != null) {
49-
sb.append('&').append(OAuthConstants.STATE).append('=').append(OAuthEncoder.encode(state));
50-
}
51-
return sb.toString();
33+
protected String getAuthorizationBaseUrl() {
34+
return "https://github.com/login/oauth/authorize";
5235
}
5336

5437
@Override

scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,9 @@
44
import com.github.scribejava.core.builder.api.DefaultApi20;
55
import com.github.scribejava.core.extractors.TokenExtractor;
66
import com.github.scribejava.core.model.OAuth2AccessToken;
7-
import com.github.scribejava.core.model.OAuthConfig;
8-
import com.github.scribejava.core.model.OAuthConstants;
9-
import com.github.scribejava.core.utils.OAuthEncoder;
107

118
public class GoogleApi20 extends DefaultApi20 {
129

13-
private static final String AUTHORIZE_URL
14-
= "https://accounts.google.com/o/oauth2/auth?response_type=%s&client_id=%s&redirect_uri=%s&scope=%s";
15-
1610
protected GoogleApi20() {
1711
}
1812

@@ -30,15 +24,8 @@ public String getAccessTokenEndpoint() {
3024
}
3125

3226
@Override
33-
public String getAuthorizationUrl(OAuthConfig config) {
34-
final StringBuilder sb = new StringBuilder(String.format(AUTHORIZE_URL, config.getResponseType(),
35-
config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope())));
36-
37-
final String state = config.getState();
38-
if (state != null) {
39-
sb.append('&').append(OAuthConstants.STATE).append('=').append(OAuthEncoder.encode(state));
40-
}
41-
return sb.toString();
27+
protected String getAuthorizationBaseUrl() {
28+
return "https://accounts.google.com/o/oauth2/auth";
4229
}
4330

4431
@Override

scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,9 @@
55

66
import com.github.scribejava.apis.service.HHOAuthServiceImpl;
77
import com.github.scribejava.core.oauth.OAuth20Service;
8-
import com.github.scribejava.core.utils.OAuthEncoder;
98

109
public class HHApi extends DefaultApi20 {
1110

12-
private static final String AUTHORIZE_URL = "https://hh.ru/oauth/authorize?response_type=code&" +
13-
"client_id=%s&redirect_uri=%s";
14-
15-
private static final String TOKEN_URL = "https://hh.ru/oauth/token";
16-
1711
protected HHApi() {
1812
}
1913

@@ -27,12 +21,12 @@ public static HHApi instance() {
2721

2822
@Override
2923
public String getAccessTokenEndpoint() {
30-
return TOKEN_URL;
24+
return "https://hh.ru/oauth/token";
3125
}
3226

3327
@Override
34-
public String getAuthorizationUrl(OAuthConfig config) {
35-
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
28+
protected String getAuthorizationBaseUrl() {
29+
return "https://hh.ru/oauth/authorize";
3630
}
3731

3832
@Override

scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
import com.github.scribejava.apis.service.ImgurOAuthServiceImpl;
44
import com.github.scribejava.core.builder.api.DefaultApi20;
55
import com.github.scribejava.core.model.OAuthConfig;
6+
import com.github.scribejava.core.model.OAuthConstants;
7+
import com.github.scribejava.core.model.ParameterList;
68
import com.github.scribejava.core.oauth.OAuth20Service;
9+
import java.util.Map;
710

811
public class ImgurApi extends DefaultApi20 {
912

10-
private static final String AUTHORIZATION_URL =
11-
"https://api.imgur.com/oauth2/authorize?client_id=%s&response_type=%s";
12-
1313
protected ImgurApi() {
1414
}
1515

@@ -27,8 +27,32 @@ public String getAccessTokenEndpoint() {
2727
}
2828

2929
@Override
30-
public String getAuthorizationUrl(OAuthConfig config) {
31-
return String.format(AUTHORIZATION_URL, config.getApiKey(), isOob(config) ? "pin" : "code");
30+
public String getAuthorizationUrl(OAuthConfig config, Map<String, String> additionalParams) {
31+
final ParameterList parameters = new ParameterList(additionalParams);
32+
parameters.add(OAuthConstants.RESPONSE_TYPE, isOob(config) ? "pin" : "code");
33+
parameters.add(OAuthConstants.CLIENT_ID, config.getApiKey());
34+
35+
final String callback = config.getCallback();
36+
if (callback != null) {
37+
parameters.add(OAuthConstants.REDIRECT_URI, callback);
38+
}
39+
40+
final String scope = config.getScope();
41+
if (scope != null) {
42+
parameters.add(OAuthConstants.SCOPE, scope);
43+
}
44+
45+
final String state = config.getState();
46+
if (state != null) {
47+
parameters.add(OAuthConstants.STATE, state);
48+
}
49+
50+
return parameters.appendTo("https://api.imgur.com/oauth2/authorize");
51+
}
52+
53+
@Override
54+
protected String getAuthorizationBaseUrl() {
55+
throw new UnsupportedOperationException("use getAuthorizationUrl instead");
3256
}
3357

3458
@Override

0 commit comments

Comments
 (0)