Skip to content

Commit e2de6ae

Browse files
author
Christian Huff
committed
Merge branch 'master' of git://github.com/fernandezpablo85/scribe-java
Conflicts: pom.xml src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java
2 parents 1c99fc0 + ad55e22 commit e2de6ae

29 files changed

Lines changed: 568 additions & 51 deletions

README.textile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ You can pull scribe from a maven repository, just add this to your __pom.xml__ f
6565
@<dependency>@
6666
@<groupId>org.scribe</groupId>@
6767
@<artifactId>scribe</artifactId>@
68-
@<version>1.3.2</version>@
68+
@<version>1.3.4</version>@
6969
@</dependency>@
7070

7171
h1. Getting started in less than 2 minutes
@@ -90,6 +90,4 @@ h1. About me
9090

9191
"LinkedIn profile":http://www.linkedin.com/in/fernandezpablo85
9292

93-
Email me: fernandezpablo85 at gmail.com
94-
9593
Follow me: "@fernandezpablo":http://twitter.com/fernandezpablo

changelog.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,4 @@
9595

9696
[1.3.3]
9797
* FEATURE: accessToken and requestToken timeouts default to 2 seconds and can be specified.
98+
* FEATURE: New Apis.

pom.xml

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>org.scribe</groupId>
55
<artifactId>scribe</artifactId>
66
<packaging>jar</packaging>
7-
<version>1.3.2-patched</version>
7+
<version>1.3.4-patched</version>
88
<name>Scribe OAuth Library</name>
99
<description>The best OAuth library out there</description>
1010
<url>http://github.com/fernandezpablo85/scribe-java</url>
@@ -22,12 +22,6 @@
2222
<email>fernandezpablo85@gmail.com</email>
2323
<timezone>-3</timezone>
2424
</developer>
25-
<developer>
26-
<id>diegossilveira</id>
27-
<name>Diego Silveira</name>
28-
<email>diegossilveira@gmail.com</email>
29-
<timezone>-3</timezone>
30-
</developer>
3125
</developers>
3226

3327
<licenses>
@@ -44,32 +38,34 @@
4438
</scm>
4539

4640
<dependencies>
47-
<dependency>
48-
<groupId>commons-codec</groupId>
49-
<artifactId>commons-codec</artifactId>
50-
<version>1.4</version>
51-
</dependency>
52-
5341
<dependency>
5442
<groupId>junit</groupId>
5543
<artifactId>junit</artifactId>
5644
<version>4.8.1</version>
5745
<scope>test</scope>
5846
</dependency>
59-
47+
<dependency>
48+
<groupId>commons-codec</groupId>
49+
<artifactId>commons-codec</artifactId>
50+
<version>1.4</version>
51+
<scope>compile</scope>
52+
<optional>true</optional>
53+
</dependency>
6054
</dependencies>
6155
<build>
6256
<plugins>
6357
<plugin>
6458
<artifactId>maven-compiler-plugin</artifactId>
59+
<version>3.0</version>
6560
<configuration>
6661
<source>1.5</source>
6762
<target>1.5</target>
6863
</configuration>
6964
</plugin>
70-
<!-- plugin>
65+
<plugin>
7166
<groupId>org.apache.maven.plugins</groupId>
7267
<artifactId>maven-gpg-plugin</artifactId>
68+
<version>1.4</version>
7369
<executions>
7470
<execution>
7571
<id>sign-artifacts</id>
@@ -79,7 +75,24 @@
7975
</goals>
8076
</execution>
8177
</executions>
82-
</plugin-->
78+
</plugin>
79+
<plugin>
80+
<groupId>org.codehaus.mojo</groupId>
81+
<artifactId>findbugs-maven-plugin</artifactId>
82+
<version>2.5.2</version>
83+
<executions>
84+
<execution>
85+
<id>failing-on-high</id>
86+
<phase>compile</phase>
87+
<goals>
88+
<goal>check</goal>
89+
</goals>
90+
<configuration>
91+
<threshold>Low</threshold>
92+
</configuration>
93+
</execution>
94+
</executions>
95+
</plugin>
8396
</plugins>
8497
</build>
8598
</project>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.scribe.builder.api;
2+
3+
import org.scribe.model.Token;
4+
5+
public class AWeberApi extends DefaultApi10a
6+
{
7+
private static final String AUTHORIZE_URL = "https://auth.aweber.com/1.0/oauth/authorize?oauth_token=%s";
8+
private static final String REQUEST_TOKEN_ENDPOINT = "https://auth.aweber.com/1.0/oauth/request_token";
9+
private static final String ACCESS_TOKEN_ENDPOINT = "https://auth.aweber.com/1.0/oauth/access_token";
10+
11+
@Override
12+
public String getAccessTokenEndpoint()
13+
{
14+
return ACCESS_TOKEN_ENDPOINT;
15+
}
16+
17+
@Override
18+
public String getRequestTokenEndpoint()
19+
{
20+
return REQUEST_TOKEN_ENDPOINT;
21+
}
22+
23+
@Override
24+
public String getAuthorizationUrl(Token requestToken)
25+
{
26+
return String.format(AUTHORIZE_URL, requestToken.getToken());
27+
}
28+
}

src/main/java/org/scribe/builder/api/LinkedInApi.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
11
package org.scribe.builder.api;
22

33
import org.scribe.model.*;
4+
import java.util.*;
45

56
public class LinkedInApi extends DefaultApi10a
67
{
78
private static final String AUTHORIZE_URL = "https://api.linkedin.com/uas/oauth/authenticate?oauth_token=%s";
9+
private static final String REQUEST_TOKEN_URL = "https://api.linkedin.com/uas/oauth/requestToken";
10+
11+
private final Set<String> scopes;
12+
13+
public LinkedInApi()
14+
{
15+
scopes = Collections.emptySet();
16+
}
17+
18+
public LinkedInApi(Set<String> scopes)
19+
{
20+
this.scopes = Collections.unmodifiableSet(scopes);
21+
}
822

923
@Override
1024
public String getAccessTokenEndpoint()
@@ -15,13 +29,29 @@ public String getAccessTokenEndpoint()
1529
@Override
1630
public String getRequestTokenEndpoint()
1731
{
18-
return "https://api.linkedin.com/uas/oauth/requestToken";
32+
return scopes.isEmpty() ? REQUEST_TOKEN_URL : REQUEST_TOKEN_URL + "?scope=" + scopesAsString();
1933
}
20-
34+
35+
private String scopesAsString()
36+
{
37+
StringBuilder builder = new StringBuilder();
38+
for(String scope : scopes)
39+
{
40+
builder.append("+" + scope);
41+
}
42+
return builder.substring(1);
43+
}
44+
2145
@Override
2246
public String getAuthorizationUrl(Token requestToken)
2347
{
2448
return String.format(AUTHORIZE_URL, requestToken.getToken());
2549
}
50+
51+
public static LinkedInApi withScopes(String... scopes)
52+
{
53+
Set<String> scopeSet = new HashSet<String>(Arrays.asList(scopes));
54+
return new LinkedInApi(scopeSet);
55+
}
2656

2757
}

src/main/java/org/scribe/builder/api/PlurkApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public String getAccessTokenEndpoint()
2626
return ACCESS_TOKEN_URL;
2727
}
2828

29-
public class Mobile extends PlurkApi
29+
public static class Mobile extends PlurkApi
3030
{
3131
private static final String AUTHORIZATION_URL = "http://www.plurk.com/m/authorize?oauth_token=%s";
3232

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.scribe.builder.api;
2+
3+
import org.scribe.extractors.AccessTokenExtractor;
4+
import org.scribe.model.OAuthConfig;
5+
import org.scribe.utils.OAuthEncoder;
6+
import org.scribe.utils.Preconditions;
7+
8+
import org.scribe.extractors.JsonTokenExtractor;
9+
10+
public class ViadeoApi extends DefaultApi20
11+
{
12+
private static final String AUTHORIZE_URL = "https://secure.viadeo.com/oauth-provider/authorize2?client_id=%s&redirect_uri=%s&response_type=code";
13+
private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s";
14+
15+
@Override
16+
public AccessTokenExtractor getAccessTokenExtractor()
17+
{
18+
return new JsonTokenExtractor();
19+
}
20+
21+
@Override
22+
public String getAccessTokenEndpoint()
23+
{
24+
return "https://secure.viadeo.com/oauth-provider/access_token2?grant_type=authorization_code";
25+
}
26+
27+
@Override
28+
public String getAuthorizationUrl(OAuthConfig config)
29+
{
30+
Preconditions.checkValidUrl(config.getCallback(), "Must provide a valid url as callback. Viadeo does not support OOB");
31+
32+
// Append scope if present
33+
if(config.hasScope())
34+
{
35+
return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope()));
36+
}
37+
else
38+
{
39+
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
40+
}
41+
}
42+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.scribe.builder.api;
2+
3+
import org.scribe.model.*;
4+
5+
public class XingApi extends DefaultApi10a
6+
{
7+
private static final String AUTHORIZE_URL = "https://api.xing.com/v1/authorize?oauth_token=%s";
8+
9+
@Override
10+
public String getAccessTokenEndpoint()
11+
{
12+
return "https://api.xing.com/v1/access_token";
13+
}
14+
15+
@Override
16+
public String getRequestTokenEndpoint()
17+
{
18+
return "https://api.xing.com/v1/request_token";
19+
}
20+
21+
@Override
22+
public String getAuthorizationUrl(Token requestToken)
23+
{
24+
return String.format(AUTHORIZE_URL, requestToken.getToken());
25+
}
26+
27+
}

src/main/java/org/scribe/extractors/HeaderExtractorImpl.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class HeaderExtractorImpl implements HeaderExtractor
1616
{
1717
private static final String PARAM_SEPARATOR = ", ";
1818
private static final String PREAMBLE = "OAuth ";
19+
public static final int ESTIMATED_PARAM_LENGTH = 20;
1920

2021
/**
2122
* {@inheritDoc}
@@ -24,15 +25,15 @@ public String extract(OAuthRequest request)
2425
{
2526
checkPreconditions(request);
2627
Map<String, String> parameters = request.getOauthParameters();
27-
StringBuffer header = new StringBuffer(parameters.size() * 20);
28+
StringBuilder header = new StringBuilder(parameters.size() * ESTIMATED_PARAM_LENGTH);
2829
header.append(PREAMBLE);
29-
for (String key : parameters.keySet())
30+
for (Map.Entry<String, String> entry : parameters.entrySet())
3031
{
3132
if(header.length() > PREAMBLE.length())
3233
{
3334
header.append(PARAM_SEPARATOR);
3435
}
35-
header.append(String.format("%s=\"%s\"", key, OAuthEncoder.encode(parameters.get(key))));
36+
header.append(String.format("%s=\"%s\"", entry.getKey(), OAuthEncoder.encode(entry.getValue())));
3637
}
3738
return header.toString();
3839
}

src/main/java/org/scribe/model/OAuthConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
*/
2323
public class OAuthConstants
2424
{
25+
private OAuthConstants(){}
26+
2527
public static final String TIMESTAMP = "oauth_timestamp";
2628
public static final String SIGN_METHOD = "oauth_signature_method";
2729
public static final String SIGNATURE = "oauth_signature";

0 commit comments

Comments
 (0)