Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0386df2606 | ||
|
|
ca0076c043 |
No files matched your search
@@ -5,11 +5,6 @@
|
||||
.project
|
||||
.settings
|
||||
|
||||
# IntelliJ Idea settings
|
||||
|
||||
.idea
|
||||
scribe.iml
|
||||
|
||||
# Binaries
|
||||
|
||||
target
|
||||
@@ -1,5 +0,0 @@
|
||||
# kickstart travis.
|
||||
language: java
|
||||
|
||||
# need to override travis 'install' since it will try gpg sign and fail.
|
||||
install: mvn clean package -DskipTests=true
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2010 Pablo Fernandez
|
||||
Copyright (c) 2010 Pablo Fenandez
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
+4
-20
@@ -1,6 +1,6 @@
|
||||
h2. Welcome to the home of Scribe, the simple OAuth Java lib!
|
||||
!http://img411.imageshack.us/img411/2851/scribelogo.png!
|
||||
|
||||
!https://secure.travis-ci.org/fernandezpablo85/scribe-java.png?branch=master(travis-ci-status)!
|
||||
h2. Welcome to the home of Scribe, the simple OAuth Java lib!
|
||||
|
||||
h1. Why use Scribe?
|
||||
|
||||
@@ -20,12 +20,10 @@ h3. Threadsafe
|
||||
|
||||
Hit Scribe as hard and with many threads as you like.
|
||||
|
||||
h3. Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box
|
||||
h3. Supports all major OAuth APIs out-of-the-box
|
||||
|
||||
* Google
|
||||
|
||||
* Facebook
|
||||
|
||||
* Yahoo
|
||||
|
||||
* LinkedIn
|
||||
@@ -40,8 +38,6 @@ h3. Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box
|
||||
|
||||
* Yammer
|
||||
|
||||
* Windows Live
|
||||
|
||||
* and many more! check the "examples folder":http://github.com/fernandezpablo85/scribe-java/tree/master/src/test/java/org/scribe/examples
|
||||
|
||||
h3. Small and modular
|
||||
@@ -65,7 +61,7 @@ You can pull scribe from a maven repository, just add this to your __pom.xml__ f
|
||||
@<dependency>@
|
||||
@<groupId>org.scribe</groupId>@
|
||||
@<artifactId>scribe</artifactId>@
|
||||
@<version>1.3.0</version>@
|
||||
@<version>1.0.6</version>@
|
||||
@</dependency>@
|
||||
|
||||
h1. Getting started in less than 2 minutes
|
||||
@@ -74,18 +70,6 @@ Check the "Getting Started":http://wiki.github.com/fernandezpablo85/scribe-java/
|
||||
|
||||
h1. Please Read the "FAQ":http://wiki.github.com/fernandezpablo85/scribe-java/faq before creating an issue :)
|
||||
|
||||
h1. Questions?
|
||||
|
||||
Feel free to drop me an email, but there's already a "StackOverflow":http://stackoverflow.com tag for "scribe":http://stackoverflow.com/questions/tagged/scribe you should use. I'm subscribed to it so I'll pick the question immediately.
|
||||
|
||||
Note that it really helps to run scribe on "debug mode":https://github.com/fernandezpablo85/scribe-java/wiki/debug-mode (since 1.3.0), to get additional info. To do this simply call the @.debug()@ method on the @ServiceBuilder@.
|
||||
|
||||
h1. Forks
|
||||
|
||||
Looking for a scribe variation? check the "Fork List":https://github.com/fernandezpablo85/scribe-java/wiki/Forks
|
||||
|
||||
If you have a useful fork that should be listed there please contact me (see About me).
|
||||
|
||||
h1. About me
|
||||
|
||||
"LinkedIn profile":http://www.linkedin.com/in/fernandezpablo85
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/bin/sh
|
||||
mvn source:jar javadoc:jar package gpg:sign repository:bundle-create -Dgpg.passphrase=$1
|
||||
+1
-58
@@ -28,61 +28,4 @@
|
||||
[1.1.1]
|
||||
|
||||
* FIX: Removed isEmpty() from OAuth2.0 code in order to support older JVMs
|
||||
* FEATURE: Overloaded provider() method to support instances as well as classes (thanks dustismo)
|
||||
* FIX: White-space parameter bug (thanks Krogoth)
|
||||
* FEATURE: OAuth 2.0 now implements server-flow (thanks Diego Silveira)
|
||||
|
||||
[1.1.2]
|
||||
|
||||
* FIX: Fixed ugly bug that made 1.1.1 practically unusable (thanks Stubbs)
|
||||
|
||||
[1.1.3]
|
||||
|
||||
* FEATURE: Added rawResponse to Token, for extracting additional parameters (thanks Dirk McCormick)
|
||||
* FEATURE: Added Dropbox Api
|
||||
* FIX: Token responses now work despite of the token/secret order
|
||||
* FEATURE: Added Foursquare OAuth 2.0 Api (thanks Tom Tasche)
|
||||
* FEATURE: Added support for OAuth1.0a signatures via querystring parameters
|
||||
* FEATURE: Added ConstantContact Api (thanks Matthew Laudato)
|
||||
|
||||
[1.2]
|
||||
* REFACTOR: Moved scope inside OAuthConfig (breaks backwards compatibility)
|
||||
* FEATURE: Added scopes to Facebook 2.0 Api
|
||||
* FEATURE: Added Plaintext signature for Yammer
|
||||
* FEATURE: Added Twitter SSL endpoints (use TwitterApi.SSL.class)
|
||||
|
||||
[1.2.1]
|
||||
* FEATURE: Added custom charset support to Request (thanks Eric Genet)
|
||||
* FEATURE: Added support for Vkontakte (thanks dotbg)
|
||||
* FEATURE: Added Sohu Weibo, Netease Weibo & Sina Weibo Apis (thanks Arthur Wang)
|
||||
* FEATURE: Added support for persistent Http Connections (thanks Craig Minton)
|
||||
|
||||
[1.2.2]
|
||||
* FIX: Added support for JDK 1.5. Issue #146 (thanks Sripathi Krishnan)
|
||||
* FIX: Invalid character constant error message. Issue #137 (thanks Scott Scoble)
|
||||
* FEATURE: Added a Api class to handle windows live authentication. Issue #135 (thanks Tomas Lin)
|
||||
* FEATURE: Added refresh token feature for Yahoo! API. Issue #134 (thanks Aaron Foltz)
|
||||
* FEATURE: Added support for Plurk API. Issue #130 (thanks Chia-Wei Li)
|
||||
* FIX: Request.setConnectTimeout() and setReadTimeout() throw NPE. Issue #123 (thanks thepizzle)
|
||||
|
||||
[1.2.3]
|
||||
* FEATURE: Added default Content-Type header
|
||||
* FEATURE: Sapo Api
|
||||
* FEATURE: Plurk Mobile Api
|
||||
* FEATURE: Kaixin and QWeibo Apis
|
||||
* FEATURE: SimpleGeo Api
|
||||
|
||||
[1.3.0]
|
||||
* FEATURE: Multiple parameters with the same name supported.
|
||||
* FEAUTRE: 'debug' mode that logs useful information about the signature making
|
||||
|
||||
[1.3.1]
|
||||
* FEATURE: Meetup.com Api
|
||||
* FEATURE: NetProspex Api
|
||||
* FEATURE: Kaixin2, SinaWeibo2 and Renren Apis
|
||||
* FEATURE: ImgUr Api
|
||||
* FEATURE: Freelancer Api (thanks Juan Palacios!)
|
||||
* FIX: Allow digits in url schemes
|
||||
* FEATURE: Specific exception for connection problems (OAuthConnectionException)
|
||||
* FIX: Dropbox Api and Evernote Api updated to their latests versions
|
||||
* FIX: Digg and Skyrock Apis
|
||||
* FEATURE: Overloaded provider() method to support instances as well as classes (thanks dustismo)
|
||||
@@ -4,7 +4,7 @@
|
||||
<groupId>org.scribe</groupId>
|
||||
<artifactId>scribe</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.3.1</version>
|
||||
<version>1.1.0</version>
|
||||
<name>Scribe OAuth Library</name>
|
||||
<description>The best OAuth library out there</description>
|
||||
<url>http://github.com/fernandezpablo85/scribe-java</url>
|
||||
@@ -63,8 +63,8 @@
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.5</source>
|
||||
<target>1.5</target>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
||||
@@ -1,290 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><profiles version="12">
|
||||
<profile kind="CodeFormatterProfile" name="scribe" version="12">
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.source" value="1.7"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="9999"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="32"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.7"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="9999"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.7"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="48"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
|
||||
</profile>
|
||||
</profiles>
|
||||
@@ -1,7 +0,0 @@
|
||||
#Organize Import Order
|
||||
#Tue Feb 21 20:29:55 GMT 2012
|
||||
4=java
|
||||
3=javax
|
||||
2=org
|
||||
1=org.boncey
|
||||
0=com
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.scribe.builder;
|
||||
|
||||
import java.io.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.model.*;
|
||||
@@ -21,8 +20,6 @@ public class ServiceBuilder
|
||||
private String callback;
|
||||
private Api api;
|
||||
private String scope;
|
||||
private SignatureType signatureType;
|
||||
private OutputStream debugStream;
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
@@ -30,8 +27,6 @@ public class ServiceBuilder
|
||||
public ServiceBuilder()
|
||||
{
|
||||
this.callback = OAuthConstants.OUT_OF_BAND;
|
||||
this.signatureType = SignatureType.Header;
|
||||
this.debugStream = null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -84,7 +79,7 @@ public class ServiceBuilder
|
||||
*/
|
||||
public ServiceBuilder callback(String callback)
|
||||
{
|
||||
Preconditions.checkNotNull(callback, "Callback can't be null");
|
||||
Preconditions.checkValidOAuthCallback(callback, "Callback must be a valid URL or 'oob'");
|
||||
this.callback = callback;
|
||||
return this;
|
||||
}
|
||||
@@ -127,32 +122,6 @@ public class ServiceBuilder
|
||||
this.scope = scope;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the signature type, choose between header, querystring, etc. Defaults to Header
|
||||
*
|
||||
* @param scope The OAuth scope
|
||||
* @return the {@link ServiceBuilder} instance for method chaining
|
||||
*/
|
||||
public ServiceBuilder signatureType(SignatureType type)
|
||||
{
|
||||
Preconditions.checkNotNull(type, "Signature type can't be null");
|
||||
this.signatureType = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ServiceBuilder debugStream(OutputStream stream)
|
||||
{
|
||||
Preconditions.checkNotNull(stream, "debug stream can't be null");
|
||||
this.debugStream = stream;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ServiceBuilder debug()
|
||||
{
|
||||
this.debugStream(System.out);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the fully configured {@link OAuthService}
|
||||
@@ -164,6 +133,6 @@ public class ServiceBuilder
|
||||
Preconditions.checkNotNull(api, "You must specify a valid api through the provider() method");
|
||||
Preconditions.checkEmptyString(apiKey, "You must provide an api key");
|
||||
Preconditions.checkEmptyString(apiSecret, "You must provide an api secret");
|
||||
return api.createService(new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream));
|
||||
return api.createService(new OAuthConfig(apiKey, apiSecret, callback), scope);
|
||||
}
|
||||
}
|
||||
@@ -21,5 +21,5 @@ public interface Api
|
||||
*
|
||||
* @return fully configured {@link OAuthService}
|
||||
*/
|
||||
OAuthService createService(OAuthConfig config);
|
||||
OAuthService createService(OAuthConfig config, String scope);
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class ConstantContactApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "https://oauth.constantcontact.com/ws/oauth/confirm_access?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://oauth.constantcontact.com/ws/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "https://oauth.constantcontact.com/ws/oauth/request_token";
|
||||
}
|
||||
}
|
||||
@@ -134,7 +134,14 @@ public abstract class DefaultApi10a implements Api
|
||||
* @param callback OAuth callback (either URL or 'oob')
|
||||
* @param scope OAuth scope (optional)
|
||||
*/
|
||||
public OAuthService createService(OAuthConfig config)
|
||||
public OAuthService createService(OAuthConfig config, String scope)
|
||||
{
|
||||
OAuthService service = doCreateService(config);
|
||||
service.addScope(scope);
|
||||
return service;
|
||||
}
|
||||
|
||||
private OAuthService doCreateService(OAuthConfig config)
|
||||
{
|
||||
return new OAuth10aServiceImpl(this, config);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.extractors.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
@@ -23,33 +22,6 @@ import org.scribe.oauth.*;
|
||||
public abstract class DefaultApi20 implements Api
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns the access token extractor.
|
||||
*
|
||||
* @return access token extractor
|
||||
*/
|
||||
public AccessTokenExtractor getAccessTokenExtractor()
|
||||
{
|
||||
return new TokenExtractor20Impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the verb for the access token endpoint (defaults to GET)
|
||||
*
|
||||
* @return access token endpoint verb
|
||||
*/
|
||||
public Verb getAccessTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the URL that receives the access token requests.
|
||||
*
|
||||
* @return access token URL
|
||||
*/
|
||||
public abstract String getAccessTokenEndpoint();
|
||||
|
||||
/**
|
||||
* Returns the URL where you should redirect your users to authenticate
|
||||
* your application.
|
||||
@@ -62,7 +34,7 @@ public abstract class DefaultApi20 implements Api
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public OAuthService createService(OAuthConfig config)
|
||||
public OAuthService createService(OAuthConfig config, String scope)
|
||||
{
|
||||
return new OAuth20ServiceImpl(this, config);
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class DiggApi extends DefaultApi10a
|
||||
{
|
||||
|
||||
private static final String AUTHORIZATION_URL = "http://digg.com/oauth/authorize?oauth_token=%s";
|
||||
private static final String BASE_URL = "http://services.digg.com/oauth/";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return BASE_URL + "request_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return BASE_URL + "access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZATION_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class DropBoxApi extends DefaultApi10a
|
||||
{
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://api.dropbox.com/1/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return "https://www.dropbox.com/1/oauth/authorize?oauth_token="+requestToken.getToken();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "https://api.dropbox.com/1/oauth/request_token";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,21 +1,34 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.Token;
|
||||
import org.scribe.model.Verb;
|
||||
|
||||
public class EvernoteApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZATION_URL = "https://www.evernote.com/OAuth.action?oauth_token=%s";
|
||||
|
||||
|
||||
@Override
|
||||
public Verb getRequestTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "https://www.evernote.com/oauth";
|
||||
}
|
||||
return "https://www.evernote.com/oauth";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Verb getAccessTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://www.evernote.com/oauth";
|
||||
return "https://www.evernote.com/oauth";
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -26,24 +39,24 @@ public class EvernoteApi extends DefaultApi10a
|
||||
|
||||
public static class Sandbox extends EvernoteApi
|
||||
{
|
||||
private static final String SANDBOX_URL = "https://sandbox.evernote.com";
|
||||
private static final String SANDBOX_URL = "https://sandbox.evernote.com/oauth";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return SANDBOX_URL + "/oauth";
|
||||
return SANDBOX_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return SANDBOX_URL + "/oauth";
|
||||
return SANDBOX_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(SANDBOX_URL + "/OAuth.action?oauth_token=%s", requestToken.getToken());
|
||||
return String.format(SANDBOX_URL + "?oauth_token=%s", requestToken.getToken());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,33 +1,16 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
import org.scribe.utils.*;
|
||||
|
||||
public class FacebookApi extends DefaultApi20
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "https://www.facebook.com/dialog/oauth?client_id=%s&redirect_uri=%s";
|
||||
private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://graph.facebook.com/oauth/access_token";
|
||||
}
|
||||
private static final String AUTHORIZE_URL = "https://graph.facebook.com/oauth/authorize?response_type=token&client_id=%s&redirect_uri=%s";
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(OAuthConfig config)
|
||||
{
|
||||
Preconditions.checkValidUrl(config.getCallback(), "Must provide a valid url as callback. Facebook does not support OOB");
|
||||
|
||||
// Append scope if present
|
||||
if(config.hasScope())
|
||||
{
|
||||
return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope()));
|
||||
}
|
||||
else
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
|
||||
}
|
||||
return String.format(AUTHORIZE_URL, config.getApiKey(), URLUtils.urlEncodeWrapper(config.getCallback()));
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
/**
|
||||
* OAuth API for Flickr.
|
||||
*
|
||||
* @author Darren Greaves
|
||||
* @see <a href="http://www.flickr.com/services/api/">Flickr API</a>
|
||||
*/
|
||||
public class FlickrApi extends DefaultApi10a
|
||||
{
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "http://www.flickr.com/services/oauth/access_token";
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return "http://www.flickr.com/services/oauth/authorize?oauth_token=" + requestToken.getToken();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "http://www.flickr.com/services/oauth/request_token";
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.extractors.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
public class Foursquare2Api extends DefaultApi20
|
||||
{
|
||||
private static final String AUTHORIZATION_URL = "https://foursquare.com/oauth2/authenticate?client_id=%s&response_type=code&redirect_uri=%s";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://foursquare.com/oauth2/access_token?grant_type=authorization_code";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(OAuthConfig config)
|
||||
{
|
||||
Preconditions.checkValidUrl(config.getCallback(), "Must provide a valid url as callback. Foursquare2 does not support OOB");
|
||||
return String.format(AUTHORIZATION_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccessTokenExtractor getAccessTokenExtractor()
|
||||
{
|
||||
return new JsonTokenExtractor();
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class FreelancerApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZATION_URL = "http://www.freelancer.com/users/api-token/auth.php?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "http://api.freelancer.com/RequestAccessToken/requestAccessToken.xml?";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "http://api.freelancer.com/RequestRequestToken/requestRequestToken.xml";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Verb getAccessTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Verb getRequestTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZATION_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
public static class Sandbox extends FreelancerApi
|
||||
{
|
||||
private static final String SANDBOX_AUTHORIZATION_URL = "http://www.sandbox.freelancer.com/users/api-token/auth.php";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "http://api.sandbox.freelancer.com/RequestRequestToken/requestRequestToken.xml";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "http://api.sandbox.freelancer.com/RequestAccessToken/requestAccessToken.xml?";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(SANDBOX_AUTHORIZATION_URL + "?oauth_token=%s", requestToken.getToken());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.Token;
|
||||
|
||||
public class GetGlueApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "http://getglue.com/oauth/authorize?oauth_token=%s";
|
||||
private static final String REQUEST_TOKEN_RESOURCE = "https://api.getglue.com/oauth/request_token";
|
||||
private static final String ACCESS_TOKEN_RESOURCE = "https://api.getglue.com/oauth/access_token";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_RESOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_RESOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
/**
|
||||
* OAuth API for ImgUr
|
||||
*
|
||||
* @author David Wursteisen
|
||||
* @see <a href="http://api.imgur.com/#authapi">ImgUr API</a>
|
||||
*/
|
||||
public class ImgUrApi extends DefaultApi10a
|
||||
{
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "https://api.imgur.com/oauth/request_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://api.imgur.com/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format("https://api.imgur.com/oauth/authorize?oauth_token=%s", requestToken.getToken());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class KaixinApi extends DefaultApi10a
|
||||
{
|
||||
private static final String REQUEST_TOKEN_URL = "http://api.kaixin001.com/oauth/request_token";
|
||||
private static final String ACCESS_TOKEN_URL = "http://api.kaixin001.com/oauth/access_token";
|
||||
private static final String AUTHORIZE_URL = "http://api.kaixin001.com/oauth/authorize?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Verb getRequestTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Verb getAccessTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.extractors.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
* Kaixin(http://www.kaixin001.com/) open platform api based on OAuth 2.0.
|
||||
*/
|
||||
public class KaixinApi20 extends DefaultApi20
|
||||
{
|
||||
|
||||
private static final String AUTHORIZE_URL = "http://api.kaixin001.com/oauth2/authorize?client_id=%s&redirect_uri=%s&response_type=code";
|
||||
private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s";
|
||||
|
||||
@Override
|
||||
public AccessTokenExtractor getAccessTokenExtractor()
|
||||
{
|
||||
return new JsonTokenExtractor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://api.kaixin001.com/oauth2/access_token?grant_type=authorization_code";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(OAuthConfig config)
|
||||
{
|
||||
// Append scope if present
|
||||
if (config.hasScope())
|
||||
{
|
||||
return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope()));
|
||||
}
|
||||
else
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.extractors.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
public class LiveApi extends DefaultApi20
|
||||
{
|
||||
|
||||
private static final String AUTHORIZE_URL = "https://oauth.live.com/authorize?client_id=%s&redirect_uri=%s&response_type=code";
|
||||
private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://oauth.live.com/token?grant_type=authorization_code";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(OAuthConfig config)
|
||||
{
|
||||
Preconditions.checkValidUrl(config.getCallback(), "Must provide a valid url as callback. Live does not support OOB");
|
||||
|
||||
// Append scope if present
|
||||
if (config.hasScope())
|
||||
{
|
||||
return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope()));
|
||||
}
|
||||
else
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccessTokenExtractor getAccessTokenExtractor()
|
||||
{
|
||||
return new JsonTokenExtractor();
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.Token;
|
||||
|
||||
public class LoveFilmApi extends DefaultApi10a
|
||||
{
|
||||
private static final String REQUEST_TOKEN_URL = "http://openapi.lovefilm.com/oauth/request_token";
|
||||
private static final String ACCESS_TOKEN_URL = "http://openapi.lovefilm.com/oauth/access_token";
|
||||
private static final String AUTHORIZE_URL = "https://www.lovefilm.com/activate?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.Token;
|
||||
|
||||
/**
|
||||
* OAuth access to the Meetup.com API.
|
||||
* For more information visit http://www.meetup.com/api
|
||||
*/
|
||||
public class MeetupApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "http://www.meetup.com/authenticate?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "http://api.meetup.com/oauth/request/";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "http://api.meetup.com/oauth/access/";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.Token;
|
||||
|
||||
public class MisoApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "http://gomiso.com/oauth/authorize?oauth_token=%s";
|
||||
private static final String REQUEST_TOKEN_RESOURCE = "http://gomiso.com/oauth/request_token";
|
||||
private static final String ACCESS_TOKEN_RESOURCE = "http://gomiso.com/oauth/access_token";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_RESOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_RESOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.Token;
|
||||
|
||||
public class NetProspexApi extends DefaultApi10a
|
||||
{
|
||||
private static final String REQUEST_TOKEN_URL = "https://api.netprospex.com/1.0/oauth/request-token";
|
||||
private static final String ACCESS_TOKEN_URL = "https://api.netprospex.com/1.0/oauth/access-token";
|
||||
private static final String AUTHORIZE_URL = "https://api.netprospex.com/1.0/oauth/authorize?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class NeteaseWeibooApi extends DefaultApi10a
|
||||
{
|
||||
private static final String REQUEST_TOKEN_URL = "http://api.t.163.com/oauth/request_token";
|
||||
private static final String ACCESS_TOKEN_URL = "http://api.t.163.com/oauth/access_token";
|
||||
private static final String AUTHORIZE_URL = "http://api.t.163.com/oauth/authorize?oauth_token=%s";
|
||||
private static final String AUTHENTICATE_URL = "http://api.t.163.com/oauth/authenticate?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* this method will ignore your callback
|
||||
* if you're creating a desktop client please choose this url
|
||||
* else your can call getAuthenticateUrl
|
||||
*
|
||||
* via http://open.t.163.com/wiki/index.php?title=%E8%AF%B7%E6%B1%82%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83Token(oauth/authorize)
|
||||
*/
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
/**
|
||||
* this method is for web client with callback url
|
||||
* if you're creating a desktop client please call getAuthorizationUrl
|
||||
*
|
||||
* via http://open.t.163.com/wiki/index.php?title=%E8%AF%B7%E6%B1%82%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83Token(oauth/authenticate)
|
||||
*/
|
||||
public String getAuthenticateUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHENTICATE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.Token;
|
||||
|
||||
public class PlurkApi extends DefaultApi10a
|
||||
{
|
||||
private static final String REQUEST_TOKEN_URL = "http://www.plurk.com/OAuth/request_token";
|
||||
private static final String AUTHORIZATION_URL = "http://www.plurk.com/OAuth/authorize?oauth_token=%s";
|
||||
private static final String ACCESS_TOKEN_URL = "http://www.plurk.com/OAuth/access_token";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZATION_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_URL;
|
||||
}
|
||||
|
||||
public class Mobile extends PlurkApi
|
||||
{
|
||||
private static final String AUTHORIZATION_URL = "http://www.plurk.com/m/authorize?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZATION_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class Px500Api extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZATION_URL = "https://api.500px.com/v1/oauth/authorize?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://api.500px.com/v1/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "https://api.500px.com/v1/oauth/request_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZATION_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class QWeiboApi extends DefaultApi10a
|
||||
{
|
||||
private static final String REQUEST_TOKEN_URL = "https://open.t.qq.com/cgi-bin/request_token";
|
||||
private static final String ACCESS_TOKEN_URL = "https://open.t.qq.com/cgi-bin/access_token";
|
||||
private static final String AUTHORIZE_URL = "https://open.t.qq.com/cgi-bin/authorize?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.extractors.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
* Renren(http://www.renren.com/) OAuth 2.0 based api.
|
||||
*/
|
||||
public class RenrenApi extends DefaultApi20
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "https://graph.renren.com/oauth/authorize?client_id=%s&redirect_uri=%s&response_type=code";
|
||||
private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s";
|
||||
|
||||
@Override
|
||||
public AccessTokenExtractor getAccessTokenExtractor()
|
||||
{
|
||||
return new JsonTokenExtractor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://graph.renren.com/oauth/token?grant_type=authorization_code";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(OAuthConfig config)
|
||||
{
|
||||
// Append scope if present
|
||||
if (config.hasScope())
|
||||
{
|
||||
return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope()));
|
||||
}
|
||||
else
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class SapoApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "https://id.sapo.pt/oauth/authorize?oauth_token=%s";
|
||||
private static final String ACCESS_URL = "https://id.sapo.pt/oauth/access_token";
|
||||
private static final String REQUEST_URL = "https://id.sapo.pt/oauth/request_token";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Verb getRequestTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Verb getAccessTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.Token;
|
||||
|
||||
/**
|
||||
* @author: Pablo Fernandez
|
||||
*/
|
||||
public class SimpleGeoApi extends DefaultApi10a
|
||||
{
|
||||
private static final String ENDPOINT = "these are not used since SimpleGeo uses 2 legged OAuth";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return ENDPOINT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ENDPOINT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return ENDPOINT;
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class SinaWeiboApi extends DefaultApi10a
|
||||
{
|
||||
private static final String REQUEST_TOKEN_URL = "http://api.t.sina.com.cn/oauth/request_token";
|
||||
private static final String ACCESS_TOKEN_URL = "http://api.t.sina.com.cn/oauth/access_token";
|
||||
private static final String AUTHORIZE_URL = "http://api.t.sina.com.cn/oauth/authorize?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.extractors.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
* SinaWeibo OAuth 2.0 api.
|
||||
*/
|
||||
public class SinaWeiboApi20 extends DefaultApi20
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "https://api.weibo.com/oauth2/authorize?client_id=%s&redirect_uri=%s&response_type=code";
|
||||
private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s";
|
||||
|
||||
@Override
|
||||
public Verb getAccessTokenVerb()
|
||||
{
|
||||
return Verb.POST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccessTokenExtractor getAccessTokenExtractor()
|
||||
{
|
||||
return new JsonTokenExtractor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://api.weibo.com/oauth2/access_token?grant_type=authorization_code";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(OAuthConfig config)
|
||||
{
|
||||
// Append scope if present
|
||||
if (config.hasScope())
|
||||
{
|
||||
return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope()));
|
||||
}
|
||||
else
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
/**
|
||||
* OAuth API for Skyrock.
|
||||
*
|
||||
* @author Nicolas Quiénot
|
||||
* @see <a href="http://www.skyrock.com/developer/">Skyrock.com API</a>
|
||||
*/
|
||||
public class SkyrockApi extends DefaultApi10a
|
||||
{
|
||||
private static final String API_ENDPOINT = "https://api.skyrock.com/v2";
|
||||
private static final String REQUEST_TOKEN_RESOURCE = "/oauth/initiate";
|
||||
private static final String AUTHORIZE_URL = "/oauth/authorize?oauth_token=%s";
|
||||
private static final String ACCESS_TOKEN_RESOURCE = "/oauth/token";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return API_ENDPOINT + ACCESS_TOKEN_RESOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return API_ENDPOINT + REQUEST_TOKEN_RESOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(API_ENDPOINT + AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class SohuWeiboApi extends DefaultApi10a
|
||||
{
|
||||
private static final String REQUEST_TOKEN_URL = "http://api.t.sohu.com/oauth/request_token";
|
||||
private static final String ACCESS_TOKEN_URL = "http://api.t.sohu.com/oauth/access_token";
|
||||
private static final String AUTHORIZE_URL = "http://api.t.sohu.com/oauth/authorize?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_URL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.Token;
|
||||
|
||||
public class TumblrApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "https://www.tumblr.com/oauth/authorize?oauth_token=%s";
|
||||
private static final String REQUEST_TOKEN_RESOURCE = "http://www.tumblr.com/oauth/request_token";
|
||||
private static final String ACCESS_TOKEN_RESOURCE = "http://www.tumblr.com/oauth/access_token";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return ACCESS_TOKEN_RESOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return REQUEST_TOKEN_RESOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -5,62 +5,22 @@ import org.scribe.model.Token;
|
||||
public class TwitterApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize?oauth_token=%s";
|
||||
private static final String REQUEST_TOKEN_RESOURCE = "api.twitter.com/oauth/request_token";
|
||||
private static final String ACCESS_TOKEN_RESOURCE = "api.twitter.com/oauth/access_token";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "http://" + ACCESS_TOKEN_RESOURCE;
|
||||
return "http://api.twitter.com/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "http://" + REQUEST_TOKEN_RESOURCE;
|
||||
return "http://api.twitter.com/oauth/request_token";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
public static class SSL extends TwitterApi
|
||||
{
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://" + ACCESS_TOKEN_RESOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "https://" + REQUEST_TOKEN_RESOURCE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Twitter 'friendlier' authorization endpoint for OAuth.
|
||||
*
|
||||
* Uses SSL.
|
||||
*/
|
||||
public static class Authenticate extends SSL
|
||||
{
|
||||
private static final String AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate?oauth_token=%s";
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHENTICATE_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Just an alias to the default (SSL) authorization endpoint.
|
||||
*
|
||||
* Need to include this for symmetry with 'Authenticate' only.
|
||||
*/
|
||||
public static class Authorize extends SSL{}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.extractors.*;
|
||||
import org.scribe.utils.*;
|
||||
import org.scribe.model.*;
|
||||
|
||||
/**
|
||||
* @author Boris G. Tsirkin <mail@dotbg.name>
|
||||
* @since 20.4.2011
|
||||
*/
|
||||
public class VkontakteApi extends DefaultApi20
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "https://api.vkontakte.ru/oauth/authorize?client_id=%s&redirect_uri=%s&response_type=code";
|
||||
private static final String SCOPED_AUTHORIZE_URL = String.format("%s&scope=%%s", AUTHORIZE_URL);
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://api.vkontakte.ru/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(OAuthConfig config)
|
||||
{
|
||||
Preconditions.checkValidUrl(config.getCallback(), "Valid url is required for a callback. Vkontakte does not support OOB");
|
||||
if(config.hasScope())// Appending scope if present
|
||||
{
|
||||
return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope()));
|
||||
}
|
||||
else
|
||||
{
|
||||
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccessTokenExtractor getAccessTokenExtractor()
|
||||
{
|
||||
return new JsonTokenExtractor();
|
||||
}
|
||||
}
|
||||
@@ -1,33 +1,26 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.services.*;
|
||||
import org.scribe.model.Token;
|
||||
|
||||
public class YammerApi extends DefaultApi10a
|
||||
{
|
||||
private static final String AUTHORIZATION_URL = "https://www.yammer.com/oauth/authorize?oauth_token=%s";
|
||||
private static final String AUTHORIZATION_URL = "'https://www.yammer.com/oauth/authorize?oauth_token=%s'";
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
@Override
|
||||
public String getRequestTokenEndpoint()
|
||||
{
|
||||
return "https://www.yammer.com/oauth/request_token";
|
||||
}
|
||||
return "https://www.yammer.com/oauth/request_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://www.yammer.com/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZATION_URL, requestToken.getToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
public SignatureService getSignatureService()
|
||||
{
|
||||
return new PlaintextSignatureService();
|
||||
}
|
||||
return "https://www.yammer.com/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(Token requestToken)
|
||||
{
|
||||
return String.format(AUTHORIZATION_URL, requestToken.getToken());
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
package org.scribe.exceptions;
|
||||
|
||||
/**
|
||||
* @author: Pablo Fernandez
|
||||
*/
|
||||
public class OAuthConnectionException extends OAuthException
|
||||
{
|
||||
private static final String MSG = "There was a problem while creating a connection to the remote service.";
|
||||
|
||||
public OAuthConnectionException(Exception e)
|
||||
{
|
||||
super(MSG, e);
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,6 @@ package org.scribe.exceptions;
|
||||
public class OAuthSignatureException extends OAuthException
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final String MSG = "Error while signing string: %s";
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
@@ -18,7 +17,7 @@ public class OAuthSignatureException extends OAuthException
|
||||
*/
|
||||
public OAuthSignatureException(String stringToSign, Exception e)
|
||||
{
|
||||
super(String.format(MSG, stringToSign), e);
|
||||
super("Error while signing string: " + stringToSign, e);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.scribe.extractors;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
@@ -21,19 +23,40 @@ public class BaseStringExtractorImpl implements BaseStringExtractor
|
||||
public String extract(OAuthRequest request)
|
||||
{
|
||||
checkPreconditions(request);
|
||||
String verb = OAuthEncoder.encode(request.getVerb().name());
|
||||
String url = OAuthEncoder.encode(request.getSanitizedUrl());
|
||||
String verb = URLUtils.percentEncode(request.getVerb().name());
|
||||
String url = URLUtils.percentEncode(request.getSanitizedUrl());
|
||||
String params = getSortedAndEncodedParams(request);
|
||||
return String.format(AMPERSAND_SEPARATED_STRING, verb, url, params);
|
||||
}
|
||||
|
||||
private String getSortedAndEncodedParams(OAuthRequest request)
|
||||
{
|
||||
ParameterList params = new ParameterList();
|
||||
params.addAll(request.getQueryStringParams());
|
||||
params.addAll(request.getBodyParams());
|
||||
params.addAll(new ParameterList(request.getOauthParameters()));
|
||||
return params.sort().asOauthBaseString();
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
Map<String, String> tmp = null;
|
||||
//params.putAll(request.getQueryStringParams());
|
||||
tmp = request.getQueryStringParams();
|
||||
for (String key:tmp.keySet()){
|
||||
params.put(
|
||||
URLUtils.percentEncode(key),
|
||||
URLUtils.percentEncode(tmp.get(key))
|
||||
);
|
||||
}
|
||||
tmp = request.getBodyParams();
|
||||
for (String key:tmp.keySet()){
|
||||
params.put(
|
||||
URLUtils.percentEncode(key),
|
||||
URLUtils.percentEncode(tmp.get(key))
|
||||
);
|
||||
}
|
||||
tmp = request.getOauthParameters();
|
||||
for (String key:tmp.keySet()){
|
||||
params.put(
|
||||
URLUtils.percentEncode(key),
|
||||
URLUtils.percentEncode(tmp.get(key))
|
||||
);
|
||||
}
|
||||
params = MapUtils.sort(params);
|
||||
return URLUtils.percentEncode(URLUtils.concatSortedPercentEncodedParams(params));
|
||||
}
|
||||
|
||||
private void checkPreconditions(OAuthRequest request)
|
||||
|
||||
@@ -32,7 +32,7 @@ public class HeaderExtractorImpl implements HeaderExtractor
|
||||
{
|
||||
header.append(PARAM_SEPARATOR);
|
||||
}
|
||||
header.append(String.format("%s=\"%s\"", key, OAuthEncoder.encode(parameters.get(key))));
|
||||
header.append(String.format("%s=\"%s\"", key, URLUtils.percentEncode(parameters.get(key))));
|
||||
}
|
||||
return header.toString();
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
package org.scribe.extractors;
|
||||
|
||||
import java.util.regex.*;
|
||||
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
public class JsonTokenExtractor implements AccessTokenExtractor
|
||||
{
|
||||
private Pattern accessTokenPattern = Pattern.compile("\"access_token\":\\s*\"(\\S*?)\"");
|
||||
|
||||
@Override
|
||||
public Token extract(String response)
|
||||
{
|
||||
Preconditions.checkEmptyString(response, "Cannot extract a token from a null or empty String");
|
||||
Matcher matcher = accessTokenPattern.matcher(response);
|
||||
if(matcher.find())
|
||||
{
|
||||
return new Token(matcher.group(1), "", response);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new OAuthException("Cannot extract an acces token. Response was: " + response);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package org.scribe.extractors;
|
||||
|
||||
import java.util.regex.*;
|
||||
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
* Default implementation of {@AccessTokenExtractor}. Conforms to OAuth 2.0
|
||||
*
|
||||
*/
|
||||
public class TokenExtractor20Impl implements AccessTokenExtractor
|
||||
{
|
||||
private static final String TOKEN_REGEX = "access_token=([^&]+)";
|
||||
private static final String EMPTY_SECRET = "";
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public Token extract(String response)
|
||||
{
|
||||
Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string");
|
||||
|
||||
Matcher matcher = Pattern.compile(TOKEN_REGEX).matcher(response);
|
||||
if (matcher.find())
|
||||
{
|
||||
String token = OAuthEncoder.decode(matcher.group(1));
|
||||
return new Token(token, EMPTY_SECRET, response);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new OAuthException("Response body is incorrect. Can't extract a token from this: '" + response + "'", null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,7 @@ import org.scribe.utils.*;
|
||||
*/
|
||||
public class TokenExtractorImpl implements RequestTokenExtractor, AccessTokenExtractor
|
||||
{
|
||||
private static final Pattern TOKEN_REGEX = Pattern.compile("oauth_token=([^&]+)");
|
||||
private static final Pattern SECRET_REGEX = Pattern.compile("oauth_token_secret=([^&]*)");
|
||||
private static final String TOKEN_REGEX = "oauth_token=(\\S*)&oauth_token_secret=(\\S*?)(&(.*))?";
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
@@ -24,21 +23,16 @@ public class TokenExtractorImpl implements RequestTokenExtractor, AccessTokenExt
|
||||
public Token extract(String response)
|
||||
{
|
||||
Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string");
|
||||
String token = extract(response, TOKEN_REGEX);
|
||||
String secret = extract(response, SECRET_REGEX);
|
||||
return new Token(token, secret, response);
|
||||
}
|
||||
|
||||
private String extract(String response, Pattern p)
|
||||
{
|
||||
Matcher matcher = p.matcher(response);
|
||||
if (matcher.find() && matcher.groupCount() >= 1)
|
||||
Matcher matcher = Pattern.compile(TOKEN_REGEX).matcher(response);
|
||||
if (matcher.matches())
|
||||
{
|
||||
return OAuthEncoder.decode(matcher.group(1));
|
||||
}
|
||||
else
|
||||
String token = URLUtils.urlDecodeWrapper(matcher.group(1));
|
||||
String secret = URLUtils.urlDecodeWrapper(matcher.group(2));
|
||||
return new Token(token, secret);
|
||||
} else
|
||||
{
|
||||
throw new OAuthException("Response body is incorrect. Can't extract token and secret from this: '" + response + "'", null);
|
||||
throw new OAuthException("Response body is incorrect. Can't extract a token from this: '" + response + "'", null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
package org.scribe.model;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* Parameter object that groups OAuth config values
|
||||
*
|
||||
@@ -9,26 +7,20 @@ import java.io.*;
|
||||
*/
|
||||
public class OAuthConfig
|
||||
{
|
||||
private final String apiKey;
|
||||
private final String apiSecret;
|
||||
private final String callback;
|
||||
private final SignatureType signatureType;
|
||||
private final String scope;
|
||||
private final OutputStream debugStream;
|
||||
private String apiKey;
|
||||
private String apiSecret;
|
||||
private String callback;
|
||||
|
||||
public OAuthConfig(String key, String secret)
|
||||
{
|
||||
this(key, secret, null, null, null, null);
|
||||
this(key,secret,null);
|
||||
}
|
||||
|
||||
public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope, OutputStream stream)
|
||||
|
||||
public OAuthConfig(String key, String secret, String callback)
|
||||
{
|
||||
this.apiKey = key;
|
||||
this.apiSecret = secret;
|
||||
this.callback = callback;
|
||||
this.signatureType = type;
|
||||
this.scope = scope;
|
||||
this.debugStream = stream;
|
||||
}
|
||||
|
||||
public String getApiKey()
|
||||
@@ -36,44 +28,28 @@ public class OAuthConfig
|
||||
return apiKey;
|
||||
}
|
||||
|
||||
public void setApiKey(String apiKey)
|
||||
{
|
||||
this.apiKey = apiKey;
|
||||
}
|
||||
|
||||
public String getApiSecret()
|
||||
{
|
||||
return apiSecret;
|
||||
}
|
||||
|
||||
public void setApiSecret(String apiSecret)
|
||||
{
|
||||
this.apiSecret = apiSecret;
|
||||
}
|
||||
|
||||
public String getCallback()
|
||||
{
|
||||
return callback;
|
||||
return callback != null ? callback : OAuthConstants.OUT_OF_BAND;
|
||||
}
|
||||
|
||||
public SignatureType getSignatureType()
|
||||
public void setCallback(String callback)
|
||||
{
|
||||
return signatureType;
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
public String getScope()
|
||||
{
|
||||
return scope;
|
||||
}
|
||||
|
||||
public boolean hasScope()
|
||||
{
|
||||
return scope != null;
|
||||
}
|
||||
|
||||
public void log(String message)
|
||||
{
|
||||
if (debugStream != null)
|
||||
{
|
||||
message = message + "\n";
|
||||
try
|
||||
{
|
||||
debugStream.write(message.getBytes("UTF8"));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new RuntimeException("there were problems while writting to the debug stream", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -41,9 +41,4 @@ public class OAuthConstants
|
||||
|
||||
//OAuth 2.0
|
||||
public static final String ACCESS_TOKEN = "access_token";
|
||||
public static final String CLIENT_ID = "client_id";
|
||||
public static final String CLIENT_SECRET = "client_secret";
|
||||
public static final String REDIRECT_URI = "redirect_uri";
|
||||
public static final String CODE = "code";
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.scribe.model;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@@ -19,8 +20,9 @@ public class OAuthRequest extends Request
|
||||
*
|
||||
* @param verb Http verb/method
|
||||
* @param url resource URL
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
public OAuthRequest(Verb verb, String url)
|
||||
public OAuthRequest(Verb verb, String url) throws MalformedURLException
|
||||
{
|
||||
super(verb, url);
|
||||
this.oauthParameters = new HashMap<String, String>();
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
package org.scribe.model;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import org.scribe.exceptions.OAuthException;
|
||||
import org.scribe.utils.OAuthEncoder;
|
||||
|
||||
/**
|
||||
* @author: Pablo Fernandez
|
||||
*/
|
||||
public class Parameter implements Comparable<Parameter>
|
||||
{
|
||||
private static final String UTF = "UTF8";
|
||||
|
||||
private final String key;
|
||||
private final String value;
|
||||
|
||||
public Parameter(String key, String value)
|
||||
{
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String asUrlEncodedPair()
|
||||
{
|
||||
return OAuthEncoder.encode(key).concat("=").concat(OAuthEncoder.encode(value));
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
if(other == null) return false;
|
||||
if(other == this) return true;
|
||||
if(!(other instanceof Parameter)) return false;
|
||||
|
||||
Parameter otherParam = (Parameter) other;
|
||||
return otherParam.key.equals(key) && otherParam.value.equals(value);
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return key.hashCode() + value.hashCode();
|
||||
}
|
||||
|
||||
public int compareTo(Parameter parameter)
|
||||
{
|
||||
int keyDiff = key.compareTo(parameter.key);
|
||||
|
||||
return keyDiff != 0 ? keyDiff : value.compareTo(parameter.value);
|
||||
}
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
package org.scribe.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.scribe.utils.OAuthEncoder;
|
||||
import org.scribe.utils.Preconditions;
|
||||
|
||||
/**
|
||||
* @author: Pablo Fernandez
|
||||
*/
|
||||
public class ParameterList
|
||||
{
|
||||
private static final char QUERY_STRING_SEPARATOR = '?';
|
||||
private static final String PARAM_SEPARATOR = "&";
|
||||
private static final String PAIR_SEPARATOR = "=";
|
||||
private static final String EMPTY_STRING = "";
|
||||
|
||||
private final List<Parameter> params;
|
||||
|
||||
public ParameterList()
|
||||
{
|
||||
params = new ArrayList<Parameter>();
|
||||
}
|
||||
|
||||
ParameterList(List<Parameter> params)
|
||||
{
|
||||
this.params = new ArrayList<Parameter>(params);
|
||||
}
|
||||
|
||||
public ParameterList(Map<String, String> map)
|
||||
{
|
||||
this();
|
||||
for(Map.Entry<String, String> entry : map.entrySet())
|
||||
{
|
||||
params.add(new Parameter(entry.getKey(), entry.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
public void add(String key, String value)
|
||||
{
|
||||
params.add(new Parameter(key, value));
|
||||
}
|
||||
|
||||
public String appendTo(String url)
|
||||
{
|
||||
Preconditions.checkNotNull(url, "Cannot append to null URL");
|
||||
String queryString = asFormUrlEncodedString();
|
||||
if (queryString.equals(EMPTY_STRING))
|
||||
{
|
||||
return url;
|
||||
}
|
||||
else
|
||||
{
|
||||
url += url.indexOf(QUERY_STRING_SEPARATOR) != -1 ? PARAM_SEPARATOR : QUERY_STRING_SEPARATOR;
|
||||
url += queryString;
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
public String asOauthBaseString()
|
||||
{
|
||||
return OAuthEncoder.encode(asFormUrlEncodedString());
|
||||
}
|
||||
|
||||
public String asFormUrlEncodedString()
|
||||
{
|
||||
if (params.size() == 0) return EMPTY_STRING;
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for(Parameter p : params)
|
||||
{
|
||||
builder.append('&').append(p.asUrlEncodedPair());
|
||||
}
|
||||
return builder.toString().substring(1);
|
||||
}
|
||||
|
||||
public void addAll(ParameterList other)
|
||||
{
|
||||
params.addAll(other.params);
|
||||
}
|
||||
|
||||
public void addQuerystring(String queryString)
|
||||
{
|
||||
if (queryString != null && queryString.length() > 0)
|
||||
{
|
||||
for (String param : queryString.split(PARAM_SEPARATOR))
|
||||
{
|
||||
String pair[] = param.split(PAIR_SEPARATOR);
|
||||
String key = OAuthEncoder.decode(pair[0]);
|
||||
String value = pair.length > 1 ? OAuthEncoder.decode(pair[1]) : EMPTY_STRING;
|
||||
params.add(new Parameter(key, value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean contains(Parameter param)
|
||||
{
|
||||
return params.contains(param);
|
||||
}
|
||||
|
||||
public int size()
|
||||
{
|
||||
return params.size();
|
||||
}
|
||||
|
||||
public ParameterList sort()
|
||||
{
|
||||
ParameterList sorted = new ParameterList(params);
|
||||
Collections.sort(sorted.params);
|
||||
return sorted;
|
||||
}
|
||||
}
|
||||
@@ -2,11 +2,11 @@ package org.scribe.model;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.nio.charset.*;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
* Represents an HTTP Request object
|
||||
@@ -16,34 +16,28 @@ import org.scribe.exceptions.*;
|
||||
class Request
|
||||
{
|
||||
private static final String CONTENT_LENGTH = "Content-Length";
|
||||
private static final String CONTENT_TYPE = "Content-Type";
|
||||
public static final String DEFAULT_CONTENT_TYPE = "application/x-www-form-urlencoded";
|
||||
|
||||
private String url;
|
||||
private URL url;
|
||||
private Verb verb;
|
||||
private ParameterList querystringParams;
|
||||
private ParameterList bodyParams;
|
||||
private Map<String, String> querystringParams;
|
||||
private Map<String, String> bodyParams;
|
||||
private Map<String, String> headers;
|
||||
private String payload = null;
|
||||
private HttpURLConnection connection;
|
||||
private String charset;
|
||||
private byte[] bytePayload = null;
|
||||
private boolean connectionKeepAlive = false;
|
||||
private Long connectTimeout = null;
|
||||
private Long readTimeout = null;
|
||||
|
||||
/**
|
||||
* Creates a new Http Request
|
||||
*
|
||||
* @param verb Http Verb (GET, POST, etc)
|
||||
* @param url url with optional querystring parameters.
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
public Request(Verb verb, String url)
|
||||
public Request(Verb verb, String url) throws MalformedURLException
|
||||
{
|
||||
this.verb = verb;
|
||||
this.url = url;
|
||||
this.querystringParams = new ParameterList();
|
||||
this.bodyParams = new ParameterList();
|
||||
this.url = new URL(url);
|
||||
this.querystringParams = new HashMap<String, String>();
|
||||
this.bodyParams = new HashMap<String, String>();
|
||||
this.headers = new HashMap<String, String>();
|
||||
}
|
||||
|
||||
@@ -60,48 +54,28 @@ class Request
|
||||
{
|
||||
createConnection();
|
||||
return doSend();
|
||||
}
|
||||
catch (Exception e)
|
||||
} catch (IOException ioe)
|
||||
{
|
||||
throw new OAuthConnectionException(e);
|
||||
throw new OAuthException("Problems while creating connection", ioe);
|
||||
}
|
||||
}
|
||||
|
||||
private void createConnection() throws IOException
|
||||
{
|
||||
String completeUrl = getCompleteUrl();
|
||||
String effectiveUrl = URLUtils.appendParametersToQueryString(url.toString(), querystringParams);
|
||||
if (connection == null)
|
||||
{
|
||||
System.setProperty("http.keepAlive", connectionKeepAlive ? "true" : "false");
|
||||
connection = (HttpURLConnection) new URL(completeUrl).openConnection();
|
||||
connection = (HttpURLConnection) new URL(effectiveUrl).openConnection();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the complete url (host + resource + encoded querystring parameters).
|
||||
*
|
||||
* @return the complete url.
|
||||
*/
|
||||
public String getCompleteUrl()
|
||||
{
|
||||
return querystringParams.appendTo(url);
|
||||
}
|
||||
|
||||
Response doSend() throws IOException
|
||||
{
|
||||
connection.setRequestMethod(this.verb.name());
|
||||
if (connectTimeout != null)
|
||||
{
|
||||
connection.setConnectTimeout(connectTimeout.intValue());
|
||||
}
|
||||
if (readTimeout != null)
|
||||
{
|
||||
connection.setReadTimeout(readTimeout.intValue());
|
||||
}
|
||||
addHeaders(connection);
|
||||
if (verb.equals(Verb.PUT) || verb.equals(Verb.POST))
|
||||
{
|
||||
addBody(connection, getByteBodyContents());
|
||||
addBody(connection, getBodyContents());
|
||||
}
|
||||
return new Response(connection);
|
||||
}
|
||||
@@ -112,17 +86,11 @@ class Request
|
||||
conn.setRequestProperty(key, headers.get(key));
|
||||
}
|
||||
|
||||
void addBody(HttpURLConnection conn, byte[] content) throws IOException
|
||||
void addBody(HttpURLConnection conn, String content) throws IOException
|
||||
{
|
||||
conn.setRequestProperty(CONTENT_LENGTH, String.valueOf(content.length));
|
||||
|
||||
// Set default content type if none is set.
|
||||
if (conn.getRequestProperty(CONTENT_TYPE) == null)
|
||||
{
|
||||
conn.setRequestProperty(CONTENT_TYPE, DEFAULT_CONTENT_TYPE);
|
||||
}
|
||||
conn.setRequestProperty(CONTENT_LENGTH, String.valueOf(content.getBytes().length));
|
||||
conn.setDoOutput(true);
|
||||
conn.getOutputStream().write(content);
|
||||
conn.getOutputStream().write(content.getBytes());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,7 +112,7 @@ class Request
|
||||
*/
|
||||
public void addBodyParameter(String key, String value)
|
||||
{
|
||||
this.bodyParams.add(key, value);
|
||||
this.bodyParams.put(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,7 +123,7 @@ class Request
|
||||
*/
|
||||
public void addQuerystringParameter(String key, String value)
|
||||
{
|
||||
this.querystringParams.add(key, value);
|
||||
this.querystringParams.put(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -174,43 +142,36 @@ class Request
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded version for byte arrays
|
||||
*
|
||||
* @param payload
|
||||
* Get a {@link Map} of the query string parameters.
|
||||
*
|
||||
* @return a map containing the query string parameters
|
||||
*/
|
||||
public void addPayload(byte[] payload)
|
||||
public Map<String, String> getQueryStringParams()
|
||||
{
|
||||
this.bytePayload = payload;
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
String query = url.getQuery();
|
||||
if (query != null)
|
||||
{
|
||||
for (String param : query.split("&"))
|
||||
{
|
||||
String pair[] = param.split("=");
|
||||
String valuePart = "";
|
||||
if (pair.length > 1) {
|
||||
valuePart = URLUtils.urlDecodeWrapper(pair[1]);
|
||||
}
|
||||
params.put(URLUtils.urlDecodeWrapper(pair[0]),valuePart );
|
||||
}
|
||||
}
|
||||
params.putAll(querystringParams);
|
||||
return params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a {@link ParameterList} with the query string parameters.
|
||||
* Obtains a {@link Map} of the body parameters.
|
||||
*
|
||||
* @return a {@link ParameterList} containing the query string parameters.
|
||||
* @throws OAuthException if the request URL is not valid.
|
||||
* @return a map containing the body parameters.
|
||||
*/
|
||||
public ParameterList getQueryStringParams()
|
||||
{
|
||||
try
|
||||
{
|
||||
ParameterList result = new ParameterList();
|
||||
String queryString = new URL(url).getQuery();
|
||||
result.addQuerystring(queryString);
|
||||
result.addAll(querystringParams);
|
||||
return result;
|
||||
}
|
||||
catch (MalformedURLException mue)
|
||||
{
|
||||
throw new OAuthException("Malformed URL", mue);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtains a {@link ParameterList} of the body parameters.
|
||||
*
|
||||
* @return a {@link ParameterList}containing the body parameters.
|
||||
*/
|
||||
public ParameterList getBodyParams()
|
||||
public Map<String, String> getBodyParams()
|
||||
{
|
||||
return bodyParams;
|
||||
}
|
||||
@@ -222,7 +183,7 @@ class Request
|
||||
*/
|
||||
public String getUrl()
|
||||
{
|
||||
return url;
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -232,39 +193,17 @@ class Request
|
||||
*/
|
||||
public String getSanitizedUrl()
|
||||
{
|
||||
return url.replaceAll("\\?.*", "").replace("\\:\\d{4}", "");
|
||||
return URLUtils.convertUrlToBaseStringURI(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the body of the request
|
||||
*
|
||||
* @return form encoded string
|
||||
* @throws OAuthException if the charset chosen is not supported
|
||||
*/
|
||||
public String getBodyContents()
|
||||
{
|
||||
try
|
||||
{
|
||||
return new String(getByteBodyContents(),getCharset());
|
||||
}
|
||||
catch(UnsupportedEncodingException uee)
|
||||
{
|
||||
throw new OAuthException("Unsupported Charset: "+charset, uee);
|
||||
}
|
||||
}
|
||||
|
||||
byte[] getByteBodyContents()
|
||||
{
|
||||
if (bytePayload != null) return bytePayload;
|
||||
String body = (payload != null) ? payload : bodyParams.asFormUrlEncodedString();
|
||||
try
|
||||
{
|
||||
return body.getBytes(getCharset());
|
||||
}
|
||||
catch(UnsupportedEncodingException uee)
|
||||
{
|
||||
throw new OAuthException("Unsupported Charset: "+getCharset(), uee);
|
||||
}
|
||||
return (payload != null) ? payload : URLUtils.formURLEncodeMap(bodyParams);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -287,16 +226,6 @@ class Request
|
||||
return headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the connection charset. Defaults to {@link Charset} defaultCharset if not set
|
||||
*
|
||||
* @return charset
|
||||
*/
|
||||
public String getCharset()
|
||||
{
|
||||
return charset == null ? Charset.defaultCharset().name() : charset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the connect timeout for the underlying {@link HttpURLConnection}
|
||||
*
|
||||
@@ -306,7 +235,7 @@ class Request
|
||||
*/
|
||||
public void setConnectTimeout(int duration, TimeUnit unit)
|
||||
{
|
||||
this.connectTimeout = unit.toMillis(duration);
|
||||
this.connection.setConnectTimeout((int) unit.toMillis(duration));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -318,30 +247,9 @@ class Request
|
||||
*/
|
||||
public void setReadTimeout(int duration, TimeUnit unit)
|
||||
{
|
||||
this.readTimeout = unit.toMillis(duration);
|
||||
this.connection.setReadTimeout((int) unit.toMillis(duration));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the charset of the body of the request
|
||||
*
|
||||
* @param charsetName name of the charset of the request
|
||||
*/
|
||||
public void setCharset(String charsetName)
|
||||
{
|
||||
this.charset = charsetName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the underlying Http Connection is persistent or not.
|
||||
*
|
||||
* @see http://download.oracle.com/javase/1.5.0/docs/guide/net/http-keepalive.html
|
||||
* @param connectionKeepAlive
|
||||
*/
|
||||
public void setConnectionKeepAlive(boolean connectionKeepAlive)
|
||||
{
|
||||
this.connectionKeepAlive = connectionKeepAlive;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* We need this in order to stub the connection object for test cases
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,6 @@ import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
@@ -28,11 +27,11 @@ public class Response
|
||||
connection.connect();
|
||||
code = connection.getResponseCode();
|
||||
headers = parseHeaders(connection);
|
||||
stream = isSuccessful() ? connection.getInputStream() : connection.getErrorStream();
|
||||
}
|
||||
catch (UnknownHostException e)
|
||||
stream = wasSuccessful() ? connection.getInputStream() : connection.getErrorStream();
|
||||
} catch (UnknownHostException e)
|
||||
{
|
||||
throw new OAuthException("The IP address of a host could not be determined.", e);
|
||||
code = 404;
|
||||
body = EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +51,7 @@ public class Response
|
||||
return headers;
|
||||
}
|
||||
|
||||
public boolean isSuccessful()
|
||||
private boolean wasSuccessful()
|
||||
{
|
||||
return getCode() >= 200 && getCode() < 400;
|
||||
}
|
||||
@@ -101,9 +100,10 @@ public class Response
|
||||
/**
|
||||
* Obtains a single HTTP Header value, or null if undefined
|
||||
*
|
||||
* @param name the header name.
|
||||
* @param header
|
||||
* name
|
||||
*
|
||||
* @return header value or null.
|
||||
* @return header value or null
|
||||
*/
|
||||
public String getHeader(String name)
|
||||
{
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package org.scribe.model;
|
||||
|
||||
public enum SignatureType
|
||||
{
|
||||
Header,
|
||||
QueryString
|
||||
}
|
||||
@@ -13,7 +13,6 @@ public class Token implements Serializable
|
||||
|
||||
private final String token;
|
||||
private final String secret;
|
||||
private final String rawResponse;
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
@@ -22,15 +21,9 @@ public class Token implements Serializable
|
||||
* @param secret token secret
|
||||
*/
|
||||
public Token(String token, String secret)
|
||||
{
|
||||
this(token, secret, null);
|
||||
}
|
||||
|
||||
public Token(String token, String secret, String rawResponse)
|
||||
{
|
||||
this.token = token;
|
||||
this.secret = secret;
|
||||
this.rawResponse = rawResponse;
|
||||
}
|
||||
|
||||
public String getToken()
|
||||
@@ -43,36 +36,9 @@ public class Token implements Serializable
|
||||
return secret;
|
||||
}
|
||||
|
||||
public String getRawResponse()
|
||||
{
|
||||
if (rawResponse == null)
|
||||
{
|
||||
throw new IllegalStateException("This token object was not constructed by scribe and does not have a rawResponse");
|
||||
}
|
||||
return rawResponse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return String.format("Token[%s , %s]", token, secret);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the token is empty (token = "", secret = "")
|
||||
*/
|
||||
public boolean isEmpty()
|
||||
{
|
||||
return "".equals(this.token) && "".equals(this.secret);
|
||||
}
|
||||
|
||||
/**
|
||||
* Factory method that returns an empty token (token = "", secret = "").
|
||||
*
|
||||
* Useful for two legged OAuth.
|
||||
*/
|
||||
public static Token empty()
|
||||
{
|
||||
return new Token("","");
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
package org.scribe.model;
|
||||
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
* Represents an OAuth verifier code.
|
||||
*
|
||||
@@ -19,7 +17,9 @@ public class Verifier
|
||||
*/
|
||||
public Verifier(String value)
|
||||
{
|
||||
Preconditions.checkNotNull(value, "Must provide a valid string as verifier");
|
||||
if (value == null) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,26 +1,28 @@
|
||||
package org.scribe.oauth;
|
||||
|
||||
import java.util.*;
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.exceptions.OAuthException;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
* OAuth 1.0a implementation of {@link OAuthService}
|
||||
*
|
||||
*
|
||||
* @author Pablo Fernandez
|
||||
*/
|
||||
public class OAuth10aServiceImpl implements OAuthService
|
||||
{
|
||||
private static final String NO_SCOPE = null;
|
||||
private static final String VERSION = "1.0";
|
||||
|
||||
private OAuthConfig config;
|
||||
private DefaultApi10a api;
|
||||
private String scope;
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*
|
||||
*
|
||||
* @param api OAuth1.0a api information
|
||||
* @param config OAuth 1.0a configuration param object
|
||||
*/
|
||||
@@ -28,6 +30,7 @@ public class OAuth10aServiceImpl implements OAuthService
|
||||
{
|
||||
this.api = api;
|
||||
this.config = config;
|
||||
this.scope = NO_SCOPE;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35,21 +38,16 @@ public class OAuth10aServiceImpl implements OAuthService
|
||||
*/
|
||||
public Token getRequestToken()
|
||||
{
|
||||
config.log("obtaining request token from " + api.getRequestTokenEndpoint());
|
||||
OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint());
|
||||
|
||||
config.log("setting oauth_callback to " + config.getCallback());
|
||||
request.addOAuthParameter(OAuthConstants.CALLBACK, config.getCallback());
|
||||
OAuthRequest request = null;;
|
||||
try {
|
||||
request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint());
|
||||
} catch (MalformedURLException e) {
|
||||
throw new OAuthException("Problems while creating connection", e);
|
||||
}
|
||||
addOAuthParams(request, OAuthConstants.EMPTY_TOKEN);
|
||||
appendSignature(request);
|
||||
|
||||
config.log("sending request...");
|
||||
addOAuthHeader(request);
|
||||
Response response = request.send();
|
||||
String body = response.getBody();
|
||||
|
||||
config.log("response status code: " + response.getCode());
|
||||
config.log("response body: " + body);
|
||||
return api.getRequestTokenExtractor().extract(body);
|
||||
return api.getRequestTokenExtractor().extract(response.getBody());
|
||||
}
|
||||
|
||||
private void addOAuthParams(OAuthRequest request, Token token)
|
||||
@@ -59,10 +57,9 @@ public class OAuth10aServiceImpl implements OAuthService
|
||||
request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, config.getApiKey());
|
||||
request.addOAuthParameter(OAuthConstants.SIGN_METHOD, api.getSignatureService().getSignatureMethod());
|
||||
request.addOAuthParameter(OAuthConstants.VERSION, getVersion());
|
||||
if(config.hasScope()) request.addOAuthParameter(OAuthConstants.SCOPE, config.getScope());
|
||||
request.addOAuthParameter(OAuthConstants.CALLBACK, config.getCallback());
|
||||
if(scope != NO_SCOPE) request.addOAuthParameter(OAuthConstants.SCOPE, scope);
|
||||
request.addOAuthParameter(OAuthConstants.SIGNATURE, getSignature(request, token));
|
||||
|
||||
config.log("appended additional OAuth parameters: " + MapUtils.toString(request.getOauthParameters()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -70,14 +67,16 @@ public class OAuth10aServiceImpl implements OAuthService
|
||||
*/
|
||||
public Token getAccessToken(Token requestToken, Verifier verifier)
|
||||
{
|
||||
config.log("obtaining access token from " + api.getAccessTokenEndpoint());
|
||||
OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint());
|
||||
OAuthRequest request = null;
|
||||
try {
|
||||
request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint());
|
||||
} catch (MalformedURLException e) {
|
||||
throw new OAuthException("Problems while creating connection", e);
|
||||
}
|
||||
request.addOAuthParameter(OAuthConstants.TOKEN, requestToken.getToken());
|
||||
request.addOAuthParameter(OAuthConstants.VERIFIER, verifier.getValue());
|
||||
|
||||
config.log("setting token to: " + requestToken + " and verifier to: " + verifier);
|
||||
addOAuthParams(request, requestToken);
|
||||
appendSignature(request);
|
||||
addOAuthHeader(request);
|
||||
Response response = request.send();
|
||||
return api.getAccessTokenExtractor().extract(response.getBody());
|
||||
}
|
||||
@@ -87,16 +86,9 @@ public class OAuth10aServiceImpl implements OAuthService
|
||||
*/
|
||||
public void signRequest(Token token, OAuthRequest request)
|
||||
{
|
||||
config.log("signing request: " + request.getCompleteUrl());
|
||||
|
||||
// Do not append the token if empty. This is for two legged OAuth calls.
|
||||
if (!token.isEmpty())
|
||||
{
|
||||
request.addOAuthParameter(OAuthConstants.TOKEN, token.getToken());
|
||||
}
|
||||
config.log("setting token to: " + token);
|
||||
request.addOAuthParameter(OAuthConstants.TOKEN, token.getToken());
|
||||
addOAuthParams(request, token);
|
||||
appendSignature(request);
|
||||
addOAuthHeader(request);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -107,6 +99,14 @@ public class OAuth10aServiceImpl implements OAuthService
|
||||
return VERSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public void addScope(String scope)
|
||||
{
|
||||
this.scope = scope;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@@ -114,36 +114,16 @@ public class OAuth10aServiceImpl implements OAuthService
|
||||
{
|
||||
return api.getAuthorizationUrl(requestToken);
|
||||
}
|
||||
|
||||
|
||||
private String getSignature(OAuthRequest request, Token token)
|
||||
{
|
||||
config.log("generating signature...");
|
||||
String baseString = api.getBaseStringExtractor().extract(request);
|
||||
String signature = api.getSignatureService().getSignature(baseString, config.getApiSecret(), token.getSecret());
|
||||
|
||||
config.log("base string is: " + baseString);
|
||||
config.log("signature is: " + signature);
|
||||
return signature;
|
||||
return api.getSignatureService().getSignature(baseString, config.getApiSecret(), token.getSecret());
|
||||
}
|
||||
|
||||
private void appendSignature(OAuthRequest request)
|
||||
private void addOAuthHeader(OAuthRequest request)
|
||||
{
|
||||
switch (config.getSignatureType())
|
||||
{
|
||||
case Header:
|
||||
config.log("using Http Header signature");
|
||||
|
||||
String oauthHeader = api.getHeaderExtractor().extract(request);
|
||||
request.addHeader(OAuthConstants.HEADER, oauthHeader);
|
||||
break;
|
||||
case QueryString:
|
||||
config.log("using Querystring signature");
|
||||
|
||||
for (Map.Entry<String, String> entry : request.getOauthParameters().entrySet())
|
||||
{
|
||||
request.addQuerystringParameter(entry.getKey(), entry.getValue());
|
||||
}
|
||||
break;
|
||||
}
|
||||
String oauthHeader = api.getHeaderExtractor().extract(request);
|
||||
request.addHeader(OAuthConstants.HEADER, oauthHeader);
|
||||
}
|
||||
}
|
||||
@@ -22,19 +22,20 @@ public class OAuth20ServiceImpl implements OAuthService
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public void addScope(String scope)
|
||||
{
|
||||
throw new UnsupportedOperationException("OAuth 2 does not use scopes");
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public Token getAccessToken(Token requestToken, Verifier verifier)
|
||||
{
|
||||
OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint());
|
||||
request.addQuerystringParameter(OAuthConstants.CLIENT_ID, config.getApiKey());
|
||||
request.addQuerystringParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret());
|
||||
request.addQuerystringParameter(OAuthConstants.CODE, verifier.getValue());
|
||||
request.addQuerystringParameter(OAuthConstants.REDIRECT_URI, config.getCallback());
|
||||
if(config.hasScope()) request.addQuerystringParameter(OAuthConstants.SCOPE, config.getScope());
|
||||
Response response = request.send();
|
||||
return api.getAccessTokenExtractor().extract(response.getBody());
|
||||
throw new UnsupportedOperationException("Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -41,6 +41,13 @@ public interface OAuthService
|
||||
* @return oauth version as string
|
||||
*/
|
||||
public String getVersion();
|
||||
|
||||
/**
|
||||
* Adds the 'scope' parameter. This is **not** a default OAuth parameter and the setting is optional.
|
||||
*
|
||||
* @param scope OAuth Api scope (optional)
|
||||
*/
|
||||
public void addScope(String scope);
|
||||
|
||||
/**
|
||||
* Returns the URL where you should redirect your users to authenticate
|
||||
|
||||
@@ -30,7 +30,7 @@ public class HMACSha1SignatureService implements SignatureService
|
||||
{
|
||||
Preconditions.checkEmptyString(baseString, "Base string cant be null or empty string");
|
||||
Preconditions.checkEmptyString(apiSecret, "Api secret cant be null or empty string");
|
||||
return doSign(baseString, OAuthEncoder.encode(apiSecret) + '&' + OAuthEncoder.encode(tokenSecret));
|
||||
return doSign(baseString, URLUtils.percentEncode(apiSecret) + '&' + URLUtils.percentEncode(tokenSecret));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
package org.scribe.services;
|
||||
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
* plaintext implementation of {@SignatureService}
|
||||
*
|
||||
* @author Pablo Fernandez
|
||||
*
|
||||
*/
|
||||
public class PlaintextSignatureService implements SignatureService
|
||||
{
|
||||
private static final String METHOD = "plaintext";
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public String getSignature(String baseString, String apiSecret, String tokenSecret)
|
||||
{
|
||||
try
|
||||
{
|
||||
Preconditions.checkEmptyString(apiSecret, "Api secret cant be null or empty string");
|
||||
return OAuthEncoder.encode(apiSecret) + '&' + OAuthEncoder.encode(tokenSecret);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OAuthSignatureException(baseString, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public String getSignatureMethod()
|
||||
{
|
||||
return METHOD;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
package org.scribe.services;
|
||||
|
||||
import org.apache.commons.codec.binary.*;
|
||||
import org.scribe.exceptions.*;
|
||||
import java.security.*;
|
||||
|
||||
/**
|
||||
* A signature service that uses the RSA-SHA1 algorithm.
|
||||
*/
|
||||
public class RSASha1SignatureService implements SignatureService
|
||||
{
|
||||
private static final String METHOD = "RSA-SHA1";
|
||||
private static final String RSA_SHA1 = "SHA1withRSA";
|
||||
|
||||
private PrivateKey privateKey;
|
||||
|
||||
public RSASha1SignatureService(PrivateKey privateKey)
|
||||
{
|
||||
this.privateKey = privateKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public String getSignature(String baseString, String apiSecret, String tokenSecret)
|
||||
{
|
||||
try
|
||||
{
|
||||
Signature signature = Signature.getInstance(RSA_SHA1);
|
||||
signature.initSign(privateKey);
|
||||
signature.update(baseString.getBytes());
|
||||
return new String(Base64.encodeBase64(signature.sign(), false));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new OAuthSignatureException(baseString, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public String getSignatureMethod()
|
||||
{
|
||||
return METHOD;
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,36 @@
|
||||
package org.scribe.utils;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author: Pablo Fernandez
|
||||
* Utils for {@link Map} manipulation
|
||||
*
|
||||
* @author Pablo Fernandez
|
||||
*/
|
||||
public class MapUtils
|
||||
{
|
||||
public static <K,V> String toString(Map<K,V> map)
|
||||
/**
|
||||
* Sorts a Map
|
||||
*
|
||||
* @param map unsorted map
|
||||
* @return sorted map
|
||||
*/
|
||||
public static final Map<String, String> sort(Map<String, String> map)
|
||||
{
|
||||
if (map == null) return "";
|
||||
if (map.isEmpty()) return "{}";
|
||||
Preconditions.checkNotNull(map, "Cannot sort a null object.");
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
for(Map.Entry<K,V> entry : map.entrySet())
|
||||
Map<String, String> sorted = new LinkedHashMap<String, String>();
|
||||
for (String key : getSortedKeys(map))
|
||||
{
|
||||
result.append(String.format(", %s -> %s ", entry.getKey().toString(), entry.getValue().toString()));
|
||||
sorted.put(key, map.get(key));
|
||||
}
|
||||
return "{" + result.substring(1) + "}";
|
||||
return sorted;
|
||||
}
|
||||
|
||||
private static List<String> getSortedKeys(Map<String, String> map)
|
||||
{
|
||||
List<String> keys = new ArrayList<String>(map.keySet());
|
||||
Collections.sort(keys);
|
||||
return keys;
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
package org.scribe.utils;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import java.util.regex.*;
|
||||
import org.scribe.exceptions.*;
|
||||
|
||||
/**
|
||||
* @author: Pablo Fernandez
|
||||
*/
|
||||
public class OAuthEncoder
|
||||
{
|
||||
private static String CHARSET = "UTF-8";
|
||||
private static final Map<String, String> ENCODING_RULES;
|
||||
|
||||
static
|
||||
{
|
||||
Map<String, String> rules = new HashMap<String, String>();
|
||||
rules.put("*", "%2A");
|
||||
rules.put("+", "%20");
|
||||
rules.put("%7E", "~");
|
||||
ENCODING_RULES = Collections.unmodifiableMap(rules);
|
||||
}
|
||||
|
||||
public static String encode(String plain)
|
||||
{
|
||||
Preconditions.checkNotNull(plain, "Cannot encode null object");
|
||||
String encoded = "";
|
||||
try
|
||||
{
|
||||
encoded = URLEncoder.encode(plain, CHARSET);
|
||||
}
|
||||
catch (UnsupportedEncodingException uee)
|
||||
{
|
||||
throw new OAuthException("Charset not found while encoding string: " + CHARSET, uee);
|
||||
}
|
||||
for(Map.Entry<String, String> rule : ENCODING_RULES.entrySet())
|
||||
{
|
||||
encoded = applyRule(encoded, rule.getKey(), rule.getValue());
|
||||
}
|
||||
return encoded;
|
||||
}
|
||||
|
||||
private static String applyRule(String encoded, String toReplace, String replacement)
|
||||
{
|
||||
return encoded.replaceAll(Pattern.quote(toReplace), replacement);
|
||||
}
|
||||
|
||||
public static String decode(String encoded)
|
||||
{
|
||||
Preconditions.checkNotNull(encoded, "Cannot decode null object");
|
||||
try
|
||||
{
|
||||
return URLDecoder.decode(encoded, CHARSET);
|
||||
}
|
||||
catch(UnsupportedEncodingException uee)
|
||||
{
|
||||
throw new OAuthException("Charset not found while decoding string: " + CHARSET, uee);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,9 +12,7 @@ import org.scribe.model.OAuthConstants;
|
||||
public class Preconditions
|
||||
{
|
||||
private static final String DEFAULT_MESSAGE = "Received an invalid parameter";
|
||||
|
||||
// scheme = alpha *( alpha | digit | "+" | "-" | "." )
|
||||
private static final Pattern URL_PATTERN = Pattern.compile("^[a-zA-Z][a-zA-Z0-9+.-]*://\\S+");
|
||||
private static final Pattern URL_PATTERN = Pattern.compile("[a-zA-Z_-]+://\\S+");
|
||||
|
||||
/**
|
||||
* Checks that an object is not null.
|
||||
|
||||
@@ -0,0 +1,198 @@
|
||||
package org.scribe.utils;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Utils to deal with URL and url-encodings
|
||||
*
|
||||
* @author Pablo Fernandez
|
||||
*/
|
||||
public class URLUtils
|
||||
{
|
||||
private static final String EMPTY_STRING = "";
|
||||
private static final String UTF_8 = "UTF-8";
|
||||
private static final char PAIR_SEPARATOR = '=';
|
||||
private static final char PARAM_SEPARATOR = '&';
|
||||
private static final char QUERY_STRING_SEPARATOR = '?';
|
||||
private static final String HTTP_PROTOCOL = "http";
|
||||
private static final int HTTP_DEFAULT_PORT = 80;
|
||||
private static final String HTTPS_PROTOCOL = "https";
|
||||
private static final int HTTPS_DEFAULT_PORT = 443;
|
||||
|
||||
private static final String ERROR_MSG = String.format("Cannot find specified encoding: %s", UTF_8);
|
||||
|
||||
private static final Set<EncodingRule> ENCODING_RULES;
|
||||
|
||||
static
|
||||
{
|
||||
Set<EncodingRule> rules = new HashSet<EncodingRule>();
|
||||
rules.add(new EncodingRule("*","%2A"));
|
||||
rules.add(new EncodingRule("+","%20"));
|
||||
rules.add(new EncodingRule("%7E", "~"));
|
||||
ENCODING_RULES = Collections.unmodifiableSet(rules);
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns a map into a form-url-encoded string (key=value&key2&key3=value)
|
||||
*
|
||||
* @param map any map
|
||||
* @return form-url-encoded string
|
||||
*/
|
||||
public static String formURLEncodeMap(Map<String, String> map)
|
||||
{
|
||||
Preconditions.checkNotNull(map, "Cannot url-encode a null object");
|
||||
return (map.size() <= 0) ? EMPTY_STRING : doFormUrlEncode(map);
|
||||
}
|
||||
|
||||
private static String doFormUrlEncode(Map<String, String> map)
|
||||
{
|
||||
StringBuffer encodedString = new StringBuffer(map.size() * 20);
|
||||
for (String key : map.keySet())
|
||||
{
|
||||
if(encodedString.length() > 0)
|
||||
{
|
||||
encodedString.append(PARAM_SEPARATOR);
|
||||
}
|
||||
encodedString.append(urlEncodeWrapper(key));
|
||||
if (map.get(key).length() > 0) {
|
||||
encodedString.append(PAIR_SEPARATOR).append(urlEncodeWrapper(map.get(key)));
|
||||
}
|
||||
}
|
||||
return encodedString.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Percent encodes a string
|
||||
*
|
||||
* @param plain
|
||||
* @return percent encoded string
|
||||
*/
|
||||
public static String percentEncode(String string)
|
||||
{
|
||||
Preconditions.checkNotNull(string, "Cannot encode null string");
|
||||
try
|
||||
{
|
||||
String encoded = URLEncoder.encode(string, UTF_8);
|
||||
for(EncodingRule rule : ENCODING_RULES)
|
||||
{
|
||||
encoded = rule.apply(encoded);
|
||||
}
|
||||
return encoded;
|
||||
}
|
||||
catch (UnsupportedEncodingException uee)
|
||||
{
|
||||
throw new IllegalStateException(ERROR_MSG, uee);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* URL encodes a string
|
||||
*
|
||||
* @param plain
|
||||
* @return percent encoded string
|
||||
*/
|
||||
public static String urlEncodeWrapper(String string)
|
||||
{
|
||||
Preconditions.checkNotNull(string, "Cannot encode null string");
|
||||
try
|
||||
{
|
||||
return URLEncoder.encode(string, UTF_8);
|
||||
}
|
||||
catch (UnsupportedEncodingException uee)
|
||||
{
|
||||
throw new IllegalStateException(ERROR_MSG, uee);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* URL decodes a string
|
||||
*
|
||||
* @param string percent encoded string
|
||||
* @return plain string
|
||||
*/
|
||||
public static String urlDecodeWrapper(String string)
|
||||
{
|
||||
Preconditions.checkNotNull(string, "Cannot decode null string");
|
||||
try
|
||||
{
|
||||
return URLDecoder.decode(string, UTF_8);
|
||||
}
|
||||
catch (UnsupportedEncodingException uee)
|
||||
{
|
||||
throw new IllegalStateException(ERROR_MSG, uee);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Append given parameters to the query string of the url
|
||||
*
|
||||
* @param url the url to append parameters to
|
||||
* @param params any map
|
||||
* @return new url with parameters on query string
|
||||
*/
|
||||
public static String appendParametersToQueryString(String url, Map<String, String> params)
|
||||
{
|
||||
Preconditions.checkNotNull(url, "Cannot append to null URL");
|
||||
String queryString = URLUtils.formURLEncodeMap(params);
|
||||
if (queryString.length() == 0) return url;
|
||||
|
||||
// Check if there are parameters in the url already and use '&' instead of '?'
|
||||
url += url.indexOf(QUERY_STRING_SEPARATOR) != -1 ? PARAM_SEPARATOR : QUERY_STRING_SEPARATOR;
|
||||
url += queryString;
|
||||
return url;
|
||||
}
|
||||
|
||||
private static final class EncodingRule
|
||||
{
|
||||
private final String ch;
|
||||
private final String toCh;
|
||||
|
||||
EncodingRule(String ch, String toCh)
|
||||
{
|
||||
this.ch = ch;
|
||||
this.toCh = toCh;
|
||||
}
|
||||
|
||||
String apply(String string) {
|
||||
return string.replace(ch, toCh);
|
||||
}
|
||||
}
|
||||
|
||||
public static String concatSortedPercentEncodedParams(Map<String, String> params) {
|
||||
StringBuilder target = new StringBuilder();
|
||||
for (String key:params.keySet()){
|
||||
target.append(key);
|
||||
target.append(PAIR_SEPARATOR);
|
||||
target.append(params.get(key));
|
||||
target.append(PARAM_SEPARATOR);
|
||||
}
|
||||
return target.deleteCharAt(target.length() - 1).toString();
|
||||
}
|
||||
|
||||
public static String convertUrlToBaseStringURI(URL url){
|
||||
URI uri = null;
|
||||
try {
|
||||
uri = url.toURI();
|
||||
} catch (URISyntaxException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
String scheme = uri.getScheme().toLowerCase();
|
||||
String host = uri.getHost().toLowerCase();
|
||||
int port = uri.getPort();
|
||||
if (
|
||||
(scheme.equals(HTTP_PROTOCOL) && port == HTTP_DEFAULT_PORT)
|
||||
|| (scheme.equals(HTTPS_PROTOCOL) && port == HTTPS_DEFAULT_PORT)
|
||||
){
|
||||
port = -1;
|
||||
}
|
||||
URI baseUri = null;
|
||||
try {
|
||||
baseUri = new URI(scheme,null, host, port, uri.getPath(), null, null);
|
||||
} catch (URISyntaxException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return baseUri.toString();
|
||||
}
|
||||
}
|
||||
@@ -18,13 +18,12 @@ public class ServiceBuilderTest
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnConfigDefaultValues()
|
||||
public void shouldReturnOOBasDefaultCallback()
|
||||
{
|
||||
builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").build();
|
||||
assertEquals(ApiMock.config.getApiKey(), "key");
|
||||
assertEquals(ApiMock.config.getApiSecret(), "secret");
|
||||
assertEquals(ApiMock.config.getCallback(), OAuthConstants.OUT_OF_BAND);
|
||||
assertEquals(ApiMock.config.getSignatureType(), SignatureType.Header);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -36,19 +35,10 @@ public class ServiceBuilderTest
|
||||
assertEquals(ApiMock.config.getCallback(), "http://example.com");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldAcceptASignatureType()
|
||||
{
|
||||
builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").signatureType(SignatureType.QueryString).build();
|
||||
assertEquals(ApiMock.config.getApiKey(), "key");
|
||||
assertEquals(ApiMock.config.getApiSecret(), "secret");
|
||||
assertEquals(ApiMock.config.getSignatureType(), SignatureType.QueryString);
|
||||
}
|
||||
|
||||
@Test(expected=IllegalArgumentException.class)
|
||||
public void shouldNotAcceptNullAsCallback()
|
||||
public void shouldNotAcceptAnInvalidUrlAsCallback()
|
||||
{
|
||||
builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").callback(null).build();
|
||||
builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").callback("example.com").build();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -57,16 +47,19 @@ public class ServiceBuilderTest
|
||||
builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").scope("rss-api").build();
|
||||
assertEquals(ApiMock.config.getApiKey(), "key");
|
||||
assertEquals(ApiMock.config.getApiSecret(), "secret");
|
||||
assertEquals(ApiMock.config.getScope(), "rss-api");
|
||||
assertEquals(ApiMock.scope, "rss-api");
|
||||
}
|
||||
|
||||
public static class ApiMock implements Api
|
||||
{
|
||||
public static OAuthConfig config;
|
||||
|
||||
public OAuthService createService(OAuthConfig config)
|
||||
public static String scope;
|
||||
|
||||
@Override
|
||||
public OAuthService createService(OAuthConfig config, String scope)
|
||||
{
|
||||
ApiMock.config = config;
|
||||
ApiMock.scope = scope;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class DiggExample
|
||||
{
|
||||
private static final String NETWORK_NAME = "Digg";
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://services.digg.com/2.0/comment.digg";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "myKey";
|
||||
String apiSecret = "mySecret";
|
||||
OAuthService service = new ServiceBuilder().provider(DiggApi.class).apiKey(apiKey).apiSecret(apiSecret).build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Request Token
|
||||
System.out.println("Fetching the Request Token...");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got the Request Token!");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(requestToken);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL);
|
||||
request.addBodyParameter("comment_id", "20100729223726:4fef610331ee46a3b5cbd740bf71313e");
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
@@ -11,12 +12,13 @@ public class FacebookExample
|
||||
{
|
||||
private static final String NETWORK_NAME = "Facebook";
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/me";
|
||||
private static final String NO_SECRET_NEEDED = "";
|
||||
private static final Token EMPTY_TOKEN = null;
|
||||
|
||||
public static void main(String[] args)
|
||||
public static void main(String[] args) throws MalformedURLException
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "your_app_id";
|
||||
String apiKey = "your_api_key";
|
||||
String apiSecret = "your_api_secret";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(FacebookApi.class)
|
||||
@@ -35,16 +37,9 @@ public class FacebookExample
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.println("And paste the access token here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
Token accessToken = new Token(in.nextLine(), NO_SECRET_NEEDED);
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class FlickrExample
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.flickr.com/services/rest/";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "your_app_id";
|
||||
String apiSecret = "your_api_secret";
|
||||
OAuthService service = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(apiSecret).build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== Flickr's OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Request Token
|
||||
System.out.println("Fetching the Request Token...");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got the Request Token!");
|
||||
System.out.println();
|
||||
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
String authorizationUrl = service.getAuthorizationUrl(requestToken);
|
||||
System.out.println(authorizationUrl + "&perms=read");
|
||||
System.out.println("And paste the verifier here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
request.addQuerystringParameter("method", "flickr.test.login");
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class Foursquare2Example
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token=";
|
||||
private static final Token EMPTY_TOKEN = null;
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "FEGFXJUFANVVDHVSNUAMUKTTXCP1AJQD53E33XKJ44YP1S4I";
|
||||
String apiSecret = "AYWKUL5SWPNC0CTQ202QXRUG2NLZYXMRA34ZSDW4AUYBG2RC";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(Foursquare2Api.class)
|
||||
.apiKey(apiKey)
|
||||
.apiSecret(apiSecret)
|
||||
.callback("http://localhost:9000/")
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== Foursquare2's OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getToken());
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
@@ -11,7 +12,7 @@ public class FoursquareExample
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.foursquare.com/v1/user";
|
||||
|
||||
public static void main(String[] args)
|
||||
public static void main(String[] args) throws MalformedURLException
|
||||
{
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(FoursquareApi.class)
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.*;
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class FreelancerExample
|
||||
{
|
||||
|
||||
private static final String NETWORK_NAME = "Freelancer";
|
||||
private static final String AUTHORIZE_URL = "http://www.sandbox.freelancer.com/users/api-token/auth.php?oauth_token=";
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.sandbox.freelancer.com/Job/getJobList.json";
|
||||
private static final String SCOPE = "http://api.sandbox.freelancer.com";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(FreelancerApi.Sandbox.class)
|
||||
.signatureType(SignatureType.QueryString)
|
||||
.apiKey("7f5a168a0bfdbd15b4a9ea2a969661c731cdea56")
|
||||
.apiSecret("7bb8961b94873802f1c5344f671a518e087f5785")
|
||||
.scope(SCOPE)
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Request Token
|
||||
System.out.println("Fetching the Request Token...");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got the Request Token!");
|
||||
System.out.println("(if your curious it looks like this: " + requestToken + " )");
|
||||
System.out.println();
|
||||
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(AUTHORIZE_URL + requestToken.getToken());
|
||||
System.out.println("And paste the verifier here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
request.addHeader("GData-Version", "3.0");
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
@@ -14,7 +15,7 @@ public class GoogleExample
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://docs.google.com/feeds/default/private/full/";
|
||||
private static final String SCOPE = "https://docs.google.com/feeds/";
|
||||
|
||||
public static void main(String[] args)
|
||||
public static void main(String[] args) throws MalformedURLException
|
||||
{
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(GoogleApi.class)
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class ImgUrExample
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.imgur.com/2/account.json";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret (you'll need an read/write api key)
|
||||
String apiKey = "your_app_id";
|
||||
String apiSecret = "your_api_secret";
|
||||
OAuthService service = new ServiceBuilder().provider(ImgUrApi.class).apiKey(apiKey).apiSecret(apiSecret).build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== ImgUr's OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Request Token
|
||||
System.out.println("Fetching the Request Token...");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got the Request Token!");
|
||||
System.out.println();
|
||||
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
String authorizationUrl = service.getAuthorizationUrl(requestToken);
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the verifier here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
import java.util.*;
|
||||
|
||||
public class Kaixin20Example
|
||||
{
|
||||
private static final String NETWORK_NAME = "Kaixin";
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://api.kaixin001.com/users/me.json";
|
||||
private static final Token EMPTY_TOKEN = null;
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "your api key";
|
||||
String apiSecret = "your api secret";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(KaixinApi20.class)
|
||||
.apiKey(apiKey)
|
||||
.apiSecret(apiSecret)
|
||||
.callback("http://your.domain.com/handle")
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verifier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
@@ -11,7 +12,7 @@ public class LinkedInExample
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)";
|
||||
|
||||
public static void main(String[] args)
|
||||
public static void main(String[] args) throws MalformedURLException
|
||||
{
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(LinkedInApi.class)
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class LiveExample
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token=";
|
||||
private static final Token EMPTY_TOKEN = null;
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "";
|
||||
String apiSecret = "";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(LiveApi.class)
|
||||
.apiKey(apiKey)
|
||||
.apiSecret(apiSecret)
|
||||
.scope("wl.basic")
|
||||
.callback("http://localhost:9000/")
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== Windows Live's OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getToken());
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class LoveFilmExample
|
||||
{
|
||||
private static final String NETWORK_NAME = "LoveFilm";
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://api.lovefilm.com/users";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "your_key";
|
||||
String apiSecret = "your_secret";
|
||||
OAuthService service = new ServiceBuilder().provider(LoveFilmApi.class).apiKey(apiKey).apiSecret(apiSecret).build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Grab a request token.
|
||||
System.out.println("Fetching request token.");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got it ... ");
|
||||
System.out.println(requestToken.getToken());
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(requestToken);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.scribe.builder.ServiceBuilder;
|
||||
import org.scribe.builder.api.MeetupApi;
|
||||
import org.scribe.model.OAuthRequest;
|
||||
import org.scribe.model.Response;
|
||||
import org.scribe.model.Token;
|
||||
import org.scribe.model.Verb;
|
||||
import org.scribe.model.Verifier;
|
||||
import org.scribe.oauth.OAuthService;
|
||||
|
||||
public class MeetupExample
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.meetup.com/2/member/self";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(MeetupApi.class)
|
||||
.apiKey("j1khkp0dus323ftve0sdcv6ffe")
|
||||
.apiSecret("6s6gt6q59gvfjtsvgcmht62gq4")
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== Meetup's OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Request Token
|
||||
System.out.println("Fetching the Request Token...");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got the Request Token!");
|
||||
System.out.println();
|
||||
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(service.getAuthorizationUrl(requestToken));
|
||||
System.out.println("And paste the verifier here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class NeteaseWeiboExample
|
||||
{
|
||||
private static final String NETWORK_NAME = "NetEase(163.com) Weibo";
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.t.163.com/account/verify_credentials.json";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "your key";
|
||||
String apiSecret = "your secret";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(NeteaseWeibooApi.class)
|
||||
.apiKey(apiKey)
|
||||
.apiSecret(apiSecret)
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Grab a request token.
|
||||
System.out.println("Fetching request token.");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got it ... ");
|
||||
System.out.println(requestToken.getToken());
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(requestToken);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: "
|
||||
+ accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class Px500Example
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://api.500px.com/v1/";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(Px500Api.class)
|
||||
.apiKey("your-api-key")
|
||||
.apiSecret("your-api-secret")
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== 500Px's OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Request Token
|
||||
System.out.println("Fetching the Request Token...");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got the Request Token!");
|
||||
System.out.println();
|
||||
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(service.getAuthorizationUrl(requestToken));
|
||||
System.out.println("And paste the verifier here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,108 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
import java.nio.charset.*;
|
||||
import java.security.*;
|
||||
import java.util.*;
|
||||
|
||||
public class RenrenExample
|
||||
{
|
||||
private static final String NETWORK_NAME = "Renren";
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.renren.com/restserver.do";
|
||||
private static final Token EMPTY_TOKEN = null;
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "your api key";
|
||||
String apiSecret = "your api secret";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(RenrenApi.class)
|
||||
.apiKey(apiKey)
|
||||
.apiSecret(apiSecret)
|
||||
.scope("status_update publish_feed")
|
||||
.callback("http://your.doman.com/oauth/renren")
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL);
|
||||
Map<String, String> parameters = new HashMap<String, String>();
|
||||
parameters.put("method", "users.getInfo");
|
||||
parameters.put("format", "json");
|
||||
parameters.put("v", "1.0");
|
||||
|
||||
List<String> sigString = new ArrayList<String>(parameters.size() + 1);
|
||||
for (Map.Entry<String, String> entry : parameters.entrySet())
|
||||
{
|
||||
request.addQuerystringParameter(entry.getKey(), entry.getValue());
|
||||
sigString.add(String.format("%s=%s", entry.getKey(), entry.getValue()));
|
||||
}
|
||||
sigString.add(String.format("%s=%s", OAuthConstants.ACCESS_TOKEN, accessToken.getToken()));
|
||||
Collections.sort(sigString);
|
||||
StringBuilder b = new StringBuilder();
|
||||
for (String param : sigString)
|
||||
{
|
||||
b.append(param);
|
||||
}
|
||||
b.append(apiSecret);
|
||||
System.out.println("Sig string: " + b.toString());
|
||||
request.addQuerystringParameter("sig", md5(b.toString()));
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
|
||||
}
|
||||
|
||||
public static String md5(String orgString)
|
||||
{
|
||||
try
|
||||
{
|
||||
java.security.MessageDigest md = MessageDigest.getInstance("MD5");
|
||||
byte[] array = md.digest(orgString.getBytes(Charset.forName("UTF-8")));
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i = 0; i < array.length; ++i)
|
||||
{
|
||||
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
catch (NoSuchAlgorithmException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
import java.util.*;
|
||||
|
||||
public class SinaWeibo2Example
|
||||
{
|
||||
private static final String NETWORK_NAME = "SinaWeibo";
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://api.weibo.com/2/account/get_uid.json";
|
||||
private static final Token EMPTY_TOKEN = null;
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "your_api_key";
|
||||
String apiSecret = "your_api_secret";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(SinaWeiboApi20.class)
|
||||
.apiKey(apiKey)
|
||||
.apiSecret(apiSecret)
|
||||
.callback("http://www.dajie.com/oauth/sina")
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verifier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class SinaWeiboExample
|
||||
{
|
||||
private static final String NETWORK_NAME = "SinaWeibo";
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.t.sina.com.cn/account/verify_credentials.json";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "your key";
|
||||
String apiSecret = "your secret";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(SinaWeiboApi.class)
|
||||
.apiKey(apiKey)
|
||||
.apiSecret(apiSecret)
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Grab a request token.
|
||||
System.out.println("Fetching request token.");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got it ... ");
|
||||
System.out.println(requestToken.getToken());
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(requestToken);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: "
|
||||
+ accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class SkyrockExample
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://api.skyrock.com/v2/user/get.json";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(SkyrockApi.class)
|
||||
.apiKey("your-api-key")
|
||||
.apiSecret("your-api-secret")
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== Skyrock's OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Request Token
|
||||
System.out.println("Fetching the Request Token...");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got the Request Token!");
|
||||
System.out.println();
|
||||
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(service.getAuthorizationUrl(requestToken));
|
||||
System.out.println("And paste the verifier here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
public class SohuWeiboExample
|
||||
{
|
||||
private static final String NETWORK_NAME = "SohuWeibo";
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.t.sohu.com/account/verify_credentials.json";
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
String apiKey = "your_key";
|
||||
String apiSecret = "your_secret";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(SohuWeiboApi.class)
|
||||
.apiKey(apiKey)
|
||||
.apiSecret(apiSecret)
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Grab a request token.
|
||||
System.out.println("Fetching request token.");
|
||||
Token requestToken = service.getRequestToken();
|
||||
System.out.println("Got it ... ");
|
||||
System.out.println(requestToken.getToken());
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(requestToken);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(requestToken, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: "
|
||||
+ accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
@@ -9,9 +10,9 @@ import org.scribe.oauth.*;
|
||||
|
||||
public class TwitterExample
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://api.twitter.com/1/statuses/update.json";
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://api.twitter.com/1/account/verify_credentials.xml";
|
||||
|
||||
public static void main(String[] args)
|
||||
public static void main(String[] args) throws MalformedURLException
|
||||
{
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(TwitterApi.class)
|
||||
@@ -45,8 +46,7 @@ public class TwitterExample
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL);
|
||||
request.addBodyParameter("status", "this is sparta! *");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
import org.scribe.builder.api.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author Boris G. Tsirkin <mail@dotbg.name>
|
||||
* @since 20.4.2011
|
||||
*/
|
||||
public class VkontakteExample
|
||||
{
|
||||
private static final String NETWORK_NAME = "Vkontakte.ru";
|
||||
private static final String PROTECTED_RESOURCE_URL = "https://api.vkontakte.ru/method/friends.get";
|
||||
private static final Token EMPTY_TOKEN = null;
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// Replace these with your own api key and secret
|
||||
final String clientId = "your app id";
|
||||
final String apiSecret = "your api secret";
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(VkontakteApi.class)
|
||||
.apiKey(clientId)
|
||||
.apiSecret(apiSecret)
|
||||
.scope("friends,wall,offline") // replace with desired scope
|
||||
.callback("http://your.site.com/callback")
|
||||
.build();
|
||||
Scanner in = new Scanner(System.in);
|
||||
|
||||
System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
|
||||
System.out.println();
|
||||
|
||||
// Obtain the Authorization URL
|
||||
System.out.println("Fetching the Authorization URL...");
|
||||
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
|
||||
System.out.println("Got the Authorization URL!");
|
||||
System.out.println("Now go and authorize Scribe here:");
|
||||
System.out.println(authorizationUrl);
|
||||
System.out.println("And paste the authorization code here");
|
||||
System.out.print(">>");
|
||||
Verifier verifier = new Verifier(in.nextLine());
|
||||
System.out.println();
|
||||
|
||||
// Trade the Request Token and Verfier for the Access Token
|
||||
System.out.println("Trading the Request Token for an Access Token...");
|
||||
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
|
||||
System.out.println("Got the Access Token!");
|
||||
System.out.println("(if your curious it looks like this: " + accessToken + " )");
|
||||
System.out.println();
|
||||
|
||||
// Now let's go and ask for a protected resource!
|
||||
System.out.println("Now we're going to access a protected resource...");
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
|
||||
service.signRequest(accessToken, request);
|
||||
Response response = request.send();
|
||||
System.out.println("Got it! Lets see what we found...");
|
||||
System.out.println();
|
||||
System.out.println(response.getCode());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Thats it man! Go and build something awesome with Scribe! :)");
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.scribe.examples;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.scribe.builder.*;
|
||||
@@ -11,7 +12,7 @@ public class YahooExample
|
||||
{
|
||||
private static final String PROTECTED_RESOURCE_URL = "http://social.yahooapis.com/v1/user/A6ROU63MXWDCW3Y5MGCYWVHDJI/profile/status?format=json";
|
||||
|
||||
public static void main(String[] args)
|
||||
public static void main(String[] args) throws MalformedURLException
|
||||
{
|
||||
OAuthService service = new ServiceBuilder()
|
||||
.provider(YahooApi.class)
|
||||
|
||||
@@ -2,6 +2,8 @@ package org.scribe.extractors;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
import org.junit.*;
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.model.*;
|
||||
@@ -12,12 +14,16 @@ public class BaseStringExtractorTest
|
||||
|
||||
private BaseStringExtractorImpl extractor;
|
||||
private OAuthRequest request;
|
||||
private OAuthRequest request2;
|
||||
|
||||
@Before
|
||||
public void setup()
|
||||
public void setup() throws MalformedURLException
|
||||
{
|
||||
request = ObjectMother.createSampleOAuthRequest();
|
||||
request2 = ObjectMother.createSampleOAuthRequest2();
|
||||
extractor = new BaseStringExtractorImpl();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -27,6 +33,14 @@ public class BaseStringExtractorTest
|
||||
String baseString = extractor.extract(request);
|
||||
assertEquals(expected, baseString);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldExtractBaseStringFromOAuthRequest2()
|
||||
{
|
||||
String expected = "GET&http%3A%2F%2Fexample.com&oauth_callback%3Dhttp%253A%252F%252Fexample%252Fcallback%26oauth_consumer_key%3DAS%2523%2524%255E%252A%2540%2526%26oauth_signature%3DOAuth-Signature%26oauth_timestamp%3D123456";
|
||||
String baseString = extractor.extract(request2);
|
||||
assertEquals(expected, baseString);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void shouldThrowExceptionIfRquestIsNull()
|
||||
@@ -36,12 +50,12 @@ public class BaseStringExtractorTest
|
||||
}
|
||||
|
||||
@Test(expected = OAuthParametersMissingException.class)
|
||||
public void shouldThrowExceptionIfRquestHasNoOAuthParameters()
|
||||
public void shouldThrowExceptionIfRquestHasNoOAuthParameters() throws MalformedURLException
|
||||
{
|
||||
OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com");
|
||||
extractor.extract(request);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void shouldProperlyEncodeSpaces()
|
||||
{
|
||||
|
||||
@@ -2,6 +2,8 @@ package org.scribe.extractors;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
import org.junit.*;
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.model.*;
|
||||
@@ -14,7 +16,7 @@ public class HeaderExtractorTest
|
||||
private OAuthRequest request;
|
||||
|
||||
@Before
|
||||
public void setup()
|
||||
public void setup() throws MalformedURLException
|
||||
{
|
||||
request = ObjectMother.createSampleOAuthRequest();
|
||||
extractor = new HeaderExtractorImpl();
|
||||
@@ -37,7 +39,7 @@ public class HeaderExtractorTest
|
||||
}
|
||||
|
||||
@Test(expected = OAuthParametersMissingException.class)
|
||||
public void shouldExceptionIfRequestHasNoOAuthParams()
|
||||
public void shouldExceptionIfRequestHasNoOAuthParams() throws MalformedURLException
|
||||
{
|
||||
OAuthRequest emptyRequest = new OAuthRequest(Verb.GET, "http://example.com");
|
||||
extractor.extract(emptyRequest);
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
package org.scribe.extractors;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.*;
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class JsonTokenExtractorTest
|
||||
{
|
||||
private String response = "'{ \"access_token\":\"I0122HHJKLEM21F3WLPYHDKGKZULAUO4SGMV3ABKFTDT3T3X\"}'";
|
||||
private JsonTokenExtractor extractor = new JsonTokenExtractor();
|
||||
|
||||
@Test
|
||||
public void shouldParseResponse()
|
||||
{
|
||||
Token token = extractor.extract(response);
|
||||
assertEquals(token.getToken(), "I0122HHJKLEM21F3WLPYHDKGKZULAUO4SGMV3ABKFTDT3T3X");
|
||||
}
|
||||
|
||||
@Test(expected=IllegalArgumentException.class)
|
||||
public void shouldThrowExceptionIfForNullParameters()
|
||||
{
|
||||
extractor.extract(null);
|
||||
}
|
||||
|
||||
@Test(expected=IllegalArgumentException.class)
|
||||
public void shouldThrowExceptionIfForEmptyStrings()
|
||||
{
|
||||
extractor.extract("");
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
package org.scribe.extractors;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.*;
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.model.*;
|
||||
|
||||
public class TokenExtractor20Test
|
||||
{
|
||||
|
||||
private TokenExtractor20Impl extractor;
|
||||
|
||||
@Before
|
||||
public void setup()
|
||||
{
|
||||
extractor = new TokenExtractor20Impl();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldExtractTokenFromOAuthStandardResponse()
|
||||
{
|
||||
String response = "access_token=166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159|RsXNdKrpxg8L6QNLWcs2TVTmcaE";
|
||||
Token extracted = extractor.extract(response);
|
||||
assertEquals("166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159|RsXNdKrpxg8L6QNLWcs2TVTmcaE", extracted.getToken());
|
||||
assertEquals("", extracted.getSecret());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldExtractTokenFromResponseWithExpiresParam()
|
||||
{
|
||||
String response = "access_token=166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159|RsXNdKrpxg8L6QNLWcs2TVTmcaE&expires=5108";
|
||||
Token extracted = extractor.extract(response);
|
||||
assertEquals("166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159|RsXNdKrpxg8L6QNLWcs2TVTmcaE", extracted.getToken());
|
||||
assertEquals("", extracted.getSecret());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldExtractTokenFromResponseWithManyParameters()
|
||||
{
|
||||
String response = "access_token=foo1234&other_stuff=yeah_we_have_this_too&number=42";
|
||||
Token extracted = extractor.extract(response);
|
||||
assertEquals("foo1234", extracted.getToken());
|
||||
assertEquals("", extracted.getSecret());
|
||||
}
|
||||
|
||||
@Test(expected = OAuthException.class)
|
||||
public void shouldThrowExceptionIfTokenIsAbsent()
|
||||
{
|
||||
String response = "&expires=5108";
|
||||
extractor.extract(response);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void shouldThrowExceptionIfResponseIsNull()
|
||||
{
|
||||
String response = null;
|
||||
extractor.extract(response);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void shouldThrowExceptionIfResponseIsEmptyString()
|
||||
{
|
||||
String response = "";
|
||||
extractor.extract(response);
|
||||
}
|
||||
}
|
||||
Loaded 100 of 113 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user