From c422241c76c30dc490a1a940cbc907b0de690917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sat, 8 Jun 2024 14:27:52 +0200 Subject: [PATCH 01/36] add jacoco plugin --- pom.xml | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/pom.xml b/pom.xml index b484b6a71..bc2f98930 100644 --- a/pom.xml +++ b/pom.xml @@ -63,6 +63,11 @@ 4.13.2 test + + com.github.scribejava + scribejava-apis + 8.3.3 + com.squareup.okhttp3 mockwebserver @@ -87,6 +92,64 @@ + + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + default-prepare-agent + + prepare-agent + + + + default-report + + report + + + + default-check + + check + + + + + BUNDLE + + + COMPLEXITY + COVEREDRATIO + 0.60 + + + + + + + + org.apache.maven.plugins maven-jar-plugin From 9aa08413e6c628f07b954698d165f916fef01ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sat, 8 Jun 2024 14:31:59 +0200 Subject: [PATCH 02/36] Create .gitattributes --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..707a20898 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.java text eol=lf \ No newline at end of file From 759e95518941dd2fc35ec5f8ee5e8eb41917fd45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sat, 8 Jun 2024 14:45:37 +0200 Subject: [PATCH 03/36] Normalize all line endings to LF --- .github/FUNDING.yml | 24 +- .gitignore | 30 +- LICENSE.txt | 42 +- README.md | 360 ++++----- changelog | 682 ++++++++-------- checkstyle.xml | 248 +++--- donate.md | 24 +- pmd.xml | 248 +++--- pom.xml | 736 +++++++++--------- scribejava-apis/pom.xml | 146 ++-- scribejava-core/pom.xml | 124 +-- ...ibejava.core.httpclient.HttpClientProvider | 4 +- scribejava-httpclient-ahc/pom.xml | 110 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-httpclient-apache/pom.xml | 108 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-httpclient-armeria/pom.xml | 118 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-httpclient-ning/pom.xml | 110 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-httpclient-okhttp/pom.xml | 98 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-java8/pom.xml | 66 +- v1-changelog | 196 ++--- v2pre-changelog | 114 +-- 25 files changed, 1799 insertions(+), 1799 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 0a2df9277..aec425d05 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,12 +1,12 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: ['https://www.paypal.com/paypalme/algr453'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['https://www.paypal.com/paypalme/algr453'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.gitignore b/.gitignore index 5c3b031d8..0e3e8d35c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,15 @@ -# Eclipse specific settings -.classpath -.project -.settings - -# IntelliJ Idea settings -.idea -*.iml - -# Netbeans settings -nb-configuration.xml -nbproject - -# Binaries -target +# Eclipse specific settings +.classpath +.project +.settings + +# IntelliJ Idea settings +.idea +*.iml + +# Netbeans settings +nb-configuration.xml +nbproject + +# Binaries +target diff --git a/LICENSE.txt b/LICENSE.txt index 6085098bc..598280d59 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,21 +1,21 @@ -The MIT License - -Copyright (c) 2010 Pablo Fernandez - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +The MIT License + +Copyright (c) 2010 Pablo Fernandez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md index b90ef2e5f..c3b034a8d 100644 --- a/README.md +++ b/README.md @@ -1,180 +1,180 @@ -# Welcome to the home of ScribeJava, the simple OAuth client Java lib! - -[![Donate](https://www.paypalobjects.com/en_US/RU/i/btn/btn_donateCC_LG.gif)](https://github.com/scribejava/scribejava/blob/master/donate.md) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava) - - -# Why use ScribeJava? - -### Dead Simple - -Who said OAuth/OAuth2 was difficult? Configuring ScribeJava is __so easy your grandma can do it__! check it out: - -```java -OAuthService service = new ServiceBuilder(YOUR_CLIENT_ID) - .apiSecret(YOUR_CLIENT_SECRET) - .build(LinkedInApi20.instance()); -``` - -That **single line** (added newlines for readability) is the only thing you need to configure ScribeJava with LinkedIn's OAuth API for example. - -Working executable examples are [here](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) -Common usage: [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) - -### Threadsafe - -Hit ScribeJava as hard and with many threads as you like. - -### Java 7 compatible - -That's it. You can use it in old environments and in android apps. -note: To compile from sources you will need Java 9 or newer - -### Async and other HTTP clients - -ScribeJava support out-of-box several HTTP clients: - * ning async http client 1.9.x (maven module scribejava-httpclient-ning) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) - * Async Http Client asynchttpclient 2.x (maven module scribejava-httpclient-ahc) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java) - * OkHttp (maven module scribejava-httpclient-okhttp) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) - * Apache HttpComponents HttpClient (maven module scribejava-httpclient-apache) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java) - * Armeria HTTP client (required >= java 8) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20ArmeriaExample.java) - * any externally created HTTP client [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) - - just add corresponding maven modules to your pom - -### Supports many flows and additional features - - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Authorization Code Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.1), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Resource Owner Password Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.3) - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Client Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.4), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java) - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Refreshing an Access Token](https://tools.ietf.org/html/rfc6749#section-6), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java#L77) - * [RFC 6750](https://tools.ietf.org/html/rfc6750) The OAuth 2.0 Authorization Framework: Bearer Token Usage - * [RFC 7636](https://tools.ietf.org/html/rfc7636) Proof Key for Code Exchange by OAuth Public Clients (PKCE), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) - * [RFC 7009](https://tools.ietf.org/html/rfc7009) OAuth 2.0 Token Revocation, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java) - * [RFC 8628](https://tools.ietf.org/html/rfc8628) OAuth 2.0 Device Authorization Grant [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20DeviceAuthorizationGrantExample.java) - * [RFC 5849](https://tools.ietf.org/html/rfc5849) The OAuth 1.0 Protocol, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) - -### Supports all (50+) major 1.0a and 2.0 OAuth APIs out-of-the-box - -* Asana (https://asana.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AsanaExample.java) -* Automatic (https://www.automatic.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AutomaticExample.java) -* AWeber (http://www.aweber.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java) -* Box (https://www.box.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java) -* Dataporten (https://docs.dataporten.no/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DataportenExample.java) -* Digg (http://digg.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java) -* Discord (https://discordapp.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiscordExample.java) -* Доктор на работе (https://www.doktornarabote.ru/) -* Dropbox (https://www.dropbox.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DropboxExample.java) -* Etsy (https://www.etsy.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/EtsyExample.java) -* Facebook (https://www.facebook.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java), [example with Async Apache HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java), [example with Async Ning HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) -* Fitbit (https://www.fitbit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FitbitApi20Example.java) -* Flickr (https://www.flickr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java) -* Foursquare (https://foursquare.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java) -* Frappe (https://github.com/frappe/frappe) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FrappeExample.java) -* Freelancer (https://www.freelancer.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java) -* Genius (http://genius.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java) -* GitHub (https://github.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java), [example with OkHttp HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) -* Google (https://www.google.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java), [example with Async Http Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java), [example Revoke](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java), [example with PKCEE](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) -* HeadHunter ХэдХантер (https://hh.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java) -* HiOrg-Server (https://www.hiorg-server.de/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HiOrgServerExample.java) -* Imgur (http://imgur.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java) -* Instagram (https://www.instagram.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/InstagramExample.java) -* Kaixin 开心网 (http://www.kaixin001.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java) -* Kakao (https://kakao.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KakaoExample.java) -* Keycloak (https://www.keycloak.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KeycloakExample.java) -* LinkedIn (https://www.linkedin.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java), [example with custom scopes](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java) -* Mail.Ru (https://mail.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java) -* MediaWiki (https://www.mediawiki.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MediaWikiExample.java) -* Meetup (https://www.meetup.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Meetup20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java) -* Microsoft Azure Active Directory (Azure AD) (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectoryExample.java) -* Microsoft Azure Active Directory (Azure AD) 2.0 (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectory20Example.java) -* Microsoft Live (https://login.live.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java) -* Misfit (http://misfit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java) -* NAVER (http://www.naver.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java) -* Odnoklassniki Одноклассники (http://ok.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java) -* Polar (https://www.polar.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PolarAPIExample.java) -* Pinterest (https://www.pinterest.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java) -* 500px (https://500px.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java) -* Renren (http://renren.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java) -* Salesforce (https://www.salesforce.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java) -* Sina (http://www.sina.com.cn/ http://weibo.com/login.php) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java) -* Skyrock (http://skyrock.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java) -* Slack (https://slack.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SlackExample.java) -* StackExchange (http://stackexchange.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java) -* The Things Network (v1-staging and v2-preview) (https://www.thethingsnetwork.org/) [example v1](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java), [example v2 preview](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java) -* Trello (https://trello.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java) -* Tumblr (https://www.tumblr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java) -* TUT.BY (http://www.tut.by/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java) -* Twitter (https://twitter.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) -* uCoz (https://www.ucoz.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/UcozExample.java) -* Viadeo (http://viadeo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java) -* VK ВКонтакте (http://vk.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java), [example Client Credentials Grant](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java), [example with External HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) -* Wunderlist (https://www.wunderlist.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/WunderlistExample.java) -* Xero (https://www.xero.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XeroExample.java) -* XING (https://www.xing.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java) -* Yahoo (https://www.yahoo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Yahoo20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java) -* check the [examples folder](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) - -### Small and modular - -ScribeJava's code is small (about 1k LOC) and simple to understand. No smart-ass or "clever" hacks here. -You can use only 'core' or 'with apis' maven modules - -### Android-Ready - -Works out of the box with android(TM) applications. - -### Stable & bulletproof - -Good test coverage to keep you safe from harm. - -When something bad actually happens, ScribeJava's meaningful error messages will tell you exactly what went wrong, when and where. - -### Pull it from Maven Central! - -You can pull ScribeJava from the central maven repository, just add these to your __pom.xml__ file: - -```xml - - com.github.scribejava - scribejava-apis - 8.3.3 - -``` - -And in case you need just core classes (that's it, without any external API (FB, VK, GitHub, Google etc) specific code), you could pull just 'core' artifact. -```xml - - com.github.scribejava - scribejava-core - 8.3.3 - -``` - -## How can I help ScribeJava - -First of all, Pull Requests are welcome, the second option is [donations](https://github.com/scribejava/scribejava/blob/master/donate.md). - -## When will ScribeJava support XXX (new RFC, custom functionality, new API etc.) - -When you will send the pull request. That's the way for a majority of changes here. -Or you can ask someone to make the paid job for you. -In some cases, when I'm interested in changes (technically or financially), I can implement the request myself. - -## Paid consulting -If you or your business depends on the Scribejava and you need any specific improvement or new feature not currently implemented in the Scribejava, consider contacting me about a paid job. - -## Getting started in less than 2 minutes - -Check the [Getting Started](https://github.com/scribejava/scribejava/wiki/getting-started) page and start rocking! Please Read the [FAQ](https://github.com/scribejava/scribejava/wiki/faq) before creating an issue :) - -Some useful info and answers you can find on the [wiki](https://github.com/scribejava/scribejava/wiki) - -Also, remember to read the [fantastic tutorial](http://akoskm.github.io/2015/07/31/twitter-sign-in-for-web-apps.html) that [@akoskm](https://twitter.com/akoskm) wrote to easily integrate a server side app with an API (twitter in this case). - -## Questions? - -Feel free to drop us an email or create issue right here on github.com - -## Forks - -If you have a useful fork that should be listed there please contact us +# Welcome to the home of ScribeJava, the simple OAuth client Java lib! + +[![Donate](https://www.paypalobjects.com/en_US/RU/i/btn/btn_donateCC_LG.gif)](https://github.com/scribejava/scribejava/blob/master/donate.md) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava) + + +# Why use ScribeJava? + +### Dead Simple + +Who said OAuth/OAuth2 was difficult? Configuring ScribeJava is __so easy your grandma can do it__! check it out: + +```java +OAuthService service = new ServiceBuilder(YOUR_CLIENT_ID) + .apiSecret(YOUR_CLIENT_SECRET) + .build(LinkedInApi20.instance()); +``` + +That **single line** (added newlines for readability) is the only thing you need to configure ScribeJava with LinkedIn's OAuth API for example. + +Working executable examples are [here](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) +Common usage: [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) + +### Threadsafe + +Hit ScribeJava as hard and with many threads as you like. + +### Java 7 compatible + +That's it. You can use it in old environments and in android apps. +note: To compile from sources you will need Java 9 or newer + +### Async and other HTTP clients + +ScribeJava support out-of-box several HTTP clients: + * ning async http client 1.9.x (maven module scribejava-httpclient-ning) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) + * Async Http Client asynchttpclient 2.x (maven module scribejava-httpclient-ahc) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java) + * OkHttp (maven module scribejava-httpclient-okhttp) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) + * Apache HttpComponents HttpClient (maven module scribejava-httpclient-apache) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java) + * Armeria HTTP client (required >= java 8) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20ArmeriaExample.java) + * any externally created HTTP client [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) + + just add corresponding maven modules to your pom + +### Supports many flows and additional features + + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Authorization Code Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.1), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Resource Owner Password Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.3) + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Client Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.4), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java) + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Refreshing an Access Token](https://tools.ietf.org/html/rfc6749#section-6), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java#L77) + * [RFC 6750](https://tools.ietf.org/html/rfc6750) The OAuth 2.0 Authorization Framework: Bearer Token Usage + * [RFC 7636](https://tools.ietf.org/html/rfc7636) Proof Key for Code Exchange by OAuth Public Clients (PKCE), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) + * [RFC 7009](https://tools.ietf.org/html/rfc7009) OAuth 2.0 Token Revocation, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java) + * [RFC 8628](https://tools.ietf.org/html/rfc8628) OAuth 2.0 Device Authorization Grant [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20DeviceAuthorizationGrantExample.java) + * [RFC 5849](https://tools.ietf.org/html/rfc5849) The OAuth 1.0 Protocol, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) + +### Supports all (50+) major 1.0a and 2.0 OAuth APIs out-of-the-box + +* Asana (https://asana.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AsanaExample.java) +* Automatic (https://www.automatic.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AutomaticExample.java) +* AWeber (http://www.aweber.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java) +* Box (https://www.box.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java) +* Dataporten (https://docs.dataporten.no/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DataportenExample.java) +* Digg (http://digg.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java) +* Discord (https://discordapp.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiscordExample.java) +* Доктор на работе (https://www.doktornarabote.ru/) +* Dropbox (https://www.dropbox.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DropboxExample.java) +* Etsy (https://www.etsy.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/EtsyExample.java) +* Facebook (https://www.facebook.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java), [example with Async Apache HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java), [example with Async Ning HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) +* Fitbit (https://www.fitbit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FitbitApi20Example.java) +* Flickr (https://www.flickr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java) +* Foursquare (https://foursquare.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java) +* Frappe (https://github.com/frappe/frappe) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FrappeExample.java) +* Freelancer (https://www.freelancer.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java) +* Genius (http://genius.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java) +* GitHub (https://github.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java), [example with OkHttp HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) +* Google (https://www.google.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java), [example with Async Http Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java), [example Revoke](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java), [example with PKCEE](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) +* HeadHunter ХэдХантер (https://hh.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java) +* HiOrg-Server (https://www.hiorg-server.de/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HiOrgServerExample.java) +* Imgur (http://imgur.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java) +* Instagram (https://www.instagram.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/InstagramExample.java) +* Kaixin 开心网 (http://www.kaixin001.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java) +* Kakao (https://kakao.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KakaoExample.java) +* Keycloak (https://www.keycloak.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KeycloakExample.java) +* LinkedIn (https://www.linkedin.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java), [example with custom scopes](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java) +* Mail.Ru (https://mail.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java) +* MediaWiki (https://www.mediawiki.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MediaWikiExample.java) +* Meetup (https://www.meetup.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Meetup20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java) +* Microsoft Azure Active Directory (Azure AD) (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectoryExample.java) +* Microsoft Azure Active Directory (Azure AD) 2.0 (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectory20Example.java) +* Microsoft Live (https://login.live.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java) +* Misfit (http://misfit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java) +* NAVER (http://www.naver.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java) +* Odnoklassniki Одноклассники (http://ok.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java) +* Polar (https://www.polar.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PolarAPIExample.java) +* Pinterest (https://www.pinterest.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java) +* 500px (https://500px.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java) +* Renren (http://renren.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java) +* Salesforce (https://www.salesforce.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java) +* Sina (http://www.sina.com.cn/ http://weibo.com/login.php) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java) +* Skyrock (http://skyrock.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java) +* Slack (https://slack.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SlackExample.java) +* StackExchange (http://stackexchange.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java) +* The Things Network (v1-staging and v2-preview) (https://www.thethingsnetwork.org/) [example v1](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java), [example v2 preview](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java) +* Trello (https://trello.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java) +* Tumblr (https://www.tumblr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java) +* TUT.BY (http://www.tut.by/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java) +* Twitter (https://twitter.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) +* uCoz (https://www.ucoz.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/UcozExample.java) +* Viadeo (http://viadeo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java) +* VK ВКонтакте (http://vk.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java), [example Client Credentials Grant](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java), [example with External HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) +* Wunderlist (https://www.wunderlist.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/WunderlistExample.java) +* Xero (https://www.xero.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XeroExample.java) +* XING (https://www.xing.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java) +* Yahoo (https://www.yahoo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Yahoo20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java) +* check the [examples folder](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) + +### Small and modular + +ScribeJava's code is small (about 1k LOC) and simple to understand. No smart-ass or "clever" hacks here. +You can use only 'core' or 'with apis' maven modules + +### Android-Ready + +Works out of the box with android(TM) applications. + +### Stable & bulletproof + +Good test coverage to keep you safe from harm. + +When something bad actually happens, ScribeJava's meaningful error messages will tell you exactly what went wrong, when and where. + +### Pull it from Maven Central! + +You can pull ScribeJava from the central maven repository, just add these to your __pom.xml__ file: + +```xml + + com.github.scribejava + scribejava-apis + 8.3.3 + +``` + +And in case you need just core classes (that's it, without any external API (FB, VK, GitHub, Google etc) specific code), you could pull just 'core' artifact. +```xml + + com.github.scribejava + scribejava-core + 8.3.3 + +``` + +## How can I help ScribeJava + +First of all, Pull Requests are welcome, the second option is [donations](https://github.com/scribejava/scribejava/blob/master/donate.md). + +## When will ScribeJava support XXX (new RFC, custom functionality, new API etc.) + +When you will send the pull request. That's the way for a majority of changes here. +Or you can ask someone to make the paid job for you. +In some cases, when I'm interested in changes (technically or financially), I can implement the request myself. + +## Paid consulting +If you or your business depends on the Scribejava and you need any specific improvement or new feature not currently implemented in the Scribejava, consider contacting me about a paid job. + +## Getting started in less than 2 minutes + +Check the [Getting Started](https://github.com/scribejava/scribejava/wiki/getting-started) page and start rocking! Please Read the [FAQ](https://github.com/scribejava/scribejava/wiki/faq) before creating an issue :) + +Some useful info and answers you can find on the [wiki](https://github.com/scribejava/scribejava/wiki) + +Also, remember to read the [fantastic tutorial](http://akoskm.github.io/2015/07/31/twitter-sign-in-for-web-apps.html) that [@akoskm](https://twitter.com/akoskm) wrote to easily integrate a server side app with an API (twitter in this case). + +## Questions? + +Feel free to drop us an email or create issue right here on github.com + +## Forks + +If you have a useful fork that should be listed there please contact us diff --git a/changelog b/changelog index e962e073b..f549fb257 100644 --- a/changelog +++ b/changelog @@ -1,341 +1,341 @@ -[8.3.3] - * update dependencies, including security updates in libraries - -[8.3.2] - * minor fixes and enhances - * update dependencies - * while using async HTTP client, you could miss some Throwables, now they will be thrown - -[8.3.1] - * fix java.lang.NoClassDefFoundError for non-java8 runtimes (e.g. Android 7.1.1) - (thanks to https://github.com/ChristopherGittner) - -[8.3.0] - * add Instagram (https://www.instagram.com/) API (thanks to https://github.com/faent) - * add getErrorMessage method to FacebookAccessTokenErrorResponse. Should be used instead of general getMessage method - from the parent Exception - -[8.2.0] - * add ScopeBuilder to easily specify multiple scopes while requesting OAuth2.0 Access Tokens - * make Base64 en/de-coding not dependent from java8 implementation (use three optional implementation - (internal java 8+, Apache Commons Codec, JAXB) detected in runtime) (thanks to https://github.com/CodingFabian) - * implement possibility to add extra parameters to Access Token Request - (AccessTokenRequestParams#*ExtraParameters methods), https://github.com/scribejava/scribejava/issues/980 - (thanks to https://github.com/pmorch) - -[8.1.0] - * add raw Response (with HTTP response code and body) as member to the OAuth2AccessTokenErrorResponse - * add possibility to set "" (empty string) as apiSecret - * add Slack API (https://slack.com/) (thanks to https://github.com/petrkopotev) - -[8.0.0] - * add Kakao API (https://kakao.com/) (thanks to https://github.com/v0o0v) - * support chunks in JDKHttpClient's Multipart (thanks to https://github.com/eos1d3) - * add support for OAuth 2.0 Device Authorization Grant (RFC 8628) (thanks to https://github.com/rebarbora-mckvak) - * update Google API URLs - -[7.1.1] - * add Proxy support (via config's option) to internal JDKHttpClient (thanks to https://github.com/bjournaud) - * fix typo (change "Verfier" to "Verifier") (thanks to https://github.com/afkbrb) - * fix Multipart support in JDKHttpClient (thanks to https://github.com/eos1d3) - -[7.0.0] - * Add Polar API (https://www.polar.com/) (thanks to https://github.com/vidi42) - * make Response accept resources to autoclose and autoclose it (thanks to https://github.com/drei01) - * fix url encoding in POST payload (it's needed for 'application/x-www-form-urlencoded' Content-Type) - + unit tests (thanks to https://github.com/max904-github) - * Add Armeria HTTP client (thanks to https://github.com/max904-github) - -[6.9.0] - * Add Xero API (https://www.xero.com/) (thanks to https://github.com/SidneyAllen) - -[6.8.1] - * make Response implements Closeable (thanks to https://github.com/omaric) - * fix Type resolution for builder pattern in ServiceBuilderOAuth10a (thanks to https://github.com/mgyucht) - * fix no Content-length errors (thanks to https://github.com/mikita-herasiutsin and https://github.com/iankurverma) - -[6.8.0] - * Add debug output to OAuth2Service (thanks to https://github.com/rbarbey) - * Add Dropbox API (https://www.dropbox.com/) (thanks to https://github.com/petrkopotev) - -[6.7.0] - * Add OAuth2 support for Meetup.com (thanks to https://github.com/stevedes77) - * upgrade okhttp to 4.0.1 and security fix for jackson-databind 2.9.9.1 - -[6.6.3] - * fix NPE for OpenId providers - -[6.6.2] - * add PMD checks on compile - * add all OAuth error codes from supported RFCs (incl. "invalid_token") (thanks to https://github.com/echorebel) - * Update LinkedIn Example to API v2 (thanks to https://github.com/peternees) - * switch to jackson dependency to parse json responses (thanks to https://github.com/galimru) - -[6.5.1] - * cleanup deprecates methods - -[6.5.0] - * separate OAuth1.0a and OAuth2.0 ServiceBuilders, - introduce AuthorizationUrlBuilder (along with deprecation of AuthorizationUrlWithPKCE) - add possibility to provide different scopes for each Access Token request - * upgrade Facebook API from v2.11 to v3.2 - * upgrade VkontakteApi from 5.73 to 5.92 - -[6.4.1] - * support TLS 1.3 in JDK 11 for Salesforce - * fix NPE in Apache HTTP client in case of empty body in HTTP response (e.g. with 204 response code) - (thanks to https://github.com/SainagNeelamPatnaik) - * separate OAuth1.0a and OAuth2.0 classes - -[6.3.0] - * fix Muplipart request model and implement it for a jdk HTTP client (thanks to https://github.com/NTPape) - * remove any Google+ mention (switch to clean Google OAuth2) (thanks to https://github.com/fvasco) - * fix Microsoft Azure AD v1.0 and v2.0 (thanks to https://github.com/kenpusney and https://github.com/oscararias) - * add new API Asana (https://asana.com/) (thanks to https://github.com/joestazak) - * state param should be used only for authorization url generation, for v2 only, for Authorization Code Grant only, - and it should be set per request, not per created OAuthService - -[6.2.0] - * add new API Microsoft Azure Active Directory (Azure AD) 2.0 - (thanks to https://github.com/rzukow and https://github.com/dgrudenic) - -[6.1.0] - * add new API Keycloak (https://www.keycloak.org/) (thanks to https://github.com/JureZelic) - * add new API Discord (https://discordapp.com/) (thanks to https://github.com/Jokuni) - -[6.0.0] - * make redirect_uri optional while Access Token requesting on OAuth 2.0 (thanks to https://github.com/computerlove) - * switch to java 9+ (from java 7 only) for compilation. Runtime is still java 7+. - Complement README with links and RFC descriptions. - * switch OAuth2 Bearer Token Usage from enum OAuth2SignatureType to interface BearerSignature to be extensible - * add new API Wunderlist (https://www.wunderlist.com/) (thanks to https://github.com/M-F-K) - -[5.6.0] - * remove support for obsolete NetEase (http://www.163.com/) and sohu 搜狐 (http://www.sohu.com/) - (thanks to https://github.com/zawn) - * add Multipart functionality to JDK Http Client (thanks to https://github.com/eos1d3) - * switch OAuth2 ClientAuthenticationType from enum to interface ClientAuthentication to be extensible according to - https://tools.ietf.org/html/rfc6749#section-2.3.2 (thanks to https://github.com/zawn) - * add RuntimeException processing in async http clients (delivered to onError callbacks) - (thanks to https://github.com/jochen314) - * check 200 status code from response in OAuth2AccessTokenExtractor (thanks to https://github.com/jochen314) - * fix case sensitive Http Headers comparison and sending Content-Type header along with content-type - (thanks to https://github.com/marnix) - * add HiOrg-Server (https://www.hiorg-server.de/) API (thanks to https://github.com/MartinBoehmer) - -[5.5.0] - * fix error parsing for Fitbit (thanks to https://github.com/danmana) - * optimize debug log performance impact on prod in OAuth1 and fix - NoClassDefFoundError on Android device with SDK 18 and lower (thanks to https://github.com/arcao) - * add new API - MediaWiki (https://www.mediawiki.org/) (thanks to https://github.com/lucaswerkmeister) - -[5.4.0] - * fix missing support for scope for refresh_token grant_type (thanks to https://github.com/tlxtellef) - * add email field to VKOAuth2AccessToken (thanks to https://github.com/grouzen) - * add new API - Automatic (https://www.automatic.com/) (thanks to https://github.com/ramsrib) - * add new API - Fitbit (https://www.fitbit.com/) - (thanks to https://github.com/JustinLawler and https://github.com/alexthered) - * deprecate OAuthConfig - * OAuth1.0: send "oob" instead of null callback while requesting RequestToken (thanks to https://github.com/Rafaelsk) - -[5.3.0] - * fix Salesforce API (thanks to https://github.com/jhorowitz-firedrum) - * remove 'final' from methods in OAuth[10a|20]Service to allow mocking it - * fix Pinterest API (thanks to https://github.com/sschwieb) - * add Yahoo2 API (thanks to https://github.com/javatestcase) - * fix Tumblr urls, convert to https (thanks to https://github.com/highthunder) - * fix: allow spaces in scope param in OAuth2Accesstoken response - * add required param version to VK ВКонтакте (http://vk.com/) urls - -[5.2.0-java7again] - * allow 'null' as callback. It's an optional parameter. Remove "oob" as default - (thanks to https://github.com/massongit) - * java7 compatible again! - -[5.1.0] - * drop optional dependency on Apache commons-codec - * add API - Dataporten (https://docs.dataporten.no/) (thanks to https://github.com/xibriz) - * add API - Microsoft Azure Active Directory (Azure AD) (thanks to https://github.com/kaushalmall) - * fix LinkedInApi20 (thanks to https://github.com/jhorowitz-firedrum) - -[5.0.0] - * drop Java 7 backward compatibility support, become Java 8 only (was reverted in v5.2.0-java7again) - * add JSON token extractor for OAuth 1.0a (thanks to https://github.com/evstropovv) - * add new API - uCoz (https://www.ucoz.com/) (thanks to https://github.com/evstropovv) - * add PKCE (RFC 7636) support (Proof Key for Code Exchange by OAuth Public Clients) - (thanks for suggesting to https://github.com/dieseldjango) - * switch to use HTTP Basic Authorization by default in requests with need of - (2.3. Client Authentication) https://tools.ietf.org/html/rfc6749#section-2.3 Can be overrided in API class - * add support for client_credentials grant type (thanks to https://github.com/vivin) - * add support for RFC 7009 OAuth 2.0 Token Revocation (thanks to https://github.com/vivin) - * add OAuth2Service signRequest method accepting just String, not OAuth2 Access Token Object. - Remove signRequest from abstract OAuthService. 2.0 and 1.0a will be a bit more different now. - * drop toString method from *Tokens to prevent leak of sensible data (token ans secrets) - (thanks to https://github.com/rcaa) - * add Apache HttpComponents HttpClient support in separate module (thanks to https://github.com/sschwieb) - * add support for appsecret_proof in Facebook - * update Facebook v2.8 -> v2.11 - (version can be configured while constructing OAuthService - use FacebookApi.customVersion("2.11")) - -[4.2.0] - * DELETE in JdkClient permits, but not requires payload (thanks to https://github.com/miguelD73) - * add new API - Frappe (https://github.com/frappe/frappe) (thanks to https://github.com/revant) - * add new API - Etsy (https://www.etsy.com/) (thanks to https://github.com/efekocabas) - -[4.1.2] - * LinkedIn use Header to sign OAuth2 requests - * upgrade ServiceBuilder to check apiKey preconditions compile-time (not run-time) - * update Live API (thanks to https://github.com/typhoon17) - -[4.1.1] - * omit the client_secret parameter if it is an empty string while refreshing token - (thanks to https://github.com/KungfuPancake) - * allow perms to be specified in Flickr Api (read, write, or delete) (thanks to https://github.com/rogerhu) - * OdnoklassnikiService should consider params in a body while signing the request - (thanks to https://github.com/MrNeuronix) - * do not open OutputStream for output while sending empty body in HTTP requests in the default JDK Http client - -[4.1.0] - * make client_secret optional in OAuth2 while requesting AccessToken - (if set to null, it's not required by OAuth2 specs) - * move OAuth1 SignatureType from ServiceBuilder to API - * add body for PATCH HTTP method - * make addOAuthParams appendSignature methods protected in OAuth10aService (to override them in case of need) - (thanks to https://github.com/vivin) - -[4.0.0] - * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. - Move default Http engine to JDKHttpClient. - * introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests - * switch Google, GitHub, Facebook OAuth2.0 oauth requests signing to more secured recommended variant - (GET-param -> header Bearer) - * introduce custom nonstandard Facebook AccessTokenErrorResponse - -[3.4.1] - * Drop deprecated methods - * Move doktornarabote.ru urls to https (thanks to https://github.com/ezibrov) - -[3.4.0] - * uncouple OAuthRequest and Service. OAuthRequest shouldn't know anything about OAuthservice. - You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. - * add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) - * add support for HTTP verbs (thanks to https://github.com/keijohyttinen) - * add OkHttp http client support (thanks to https://github.com/arcao) - * add default HTTP client configs - (to use like 'new ServiceBuilder().httpClientConfig(OkHttpHttpClientConfig.defaultConfig())') - * you can use your own impl of AsyncHttpClient - -[3.3.0] - * update Facebook v2.6 -> v2.8 - * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) - * add Box (thanks to https://github.com/MclaughlinSteve) - * fix: OAuth20Service::refreshAccessToken should use RefreshTokenEndpoint, not AccessTokenEndpoint - (thanks to https://github.com/vivin) - * move signRequest method to OAuthService (common for OAuth1 and OAuth2) (thanks to https://github.com/apomelov) - * drop deprecated setConnectionKeepAlive method - -[3.2.0] - * Add Naver API (thanks to chooco) - * handle OAuth2 error response for Issuing an Access Token (thanks to juherr) - -[3.1.0] - * fix OdnoklassnikiServiceImpl signature, params for hash must be sorted in lexicographic order, - see http://new.apiok.ru/dev/methods/ - * add posibility to use externally created http client - * make ScribeJava compilable under jdk7 (checkstyle downgraded for jdk 1.7) - * add travis CI (check [oracle|open]jdk7 oraclejdk8) - -[3.0.0] - * create abstract HTTP Client layer to support different HTTP clients as plugins - (AHC and Ning support becames maven submodules) - * remove changing global JVM property http.keepAlive, deprecate controlling this property inside of ScribeJava - (thanks to wldaunfr and rockihack) - -[2.8.1] - * add Salesforce sandbox API support - -[2.8.0] - * add Salesforce API - * update Linked In API - -[2.7.3] - * FIX: ScribeJava shouldn't require all async http client provider to be on the classpath if using only one of them - -[2.7.2] - * FIX: ScribeJava shouldn't require any async http client provider to be on the classpath (neither ning neither AHC) - -[2.7.1] - * do not hide checked IOException in unchecked IllegalArgumentException - -[2.7.0] - * make http async client implementation be more pluggable - * add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) - * add Misfit (http://misfit.com/) API - * implement async version getting Request Token for OAuth 1.0a - -[2.6.0] - * simplify async/sync usages - * add optional "User-Agent" config option to use while making http calls - * refactor usage of grant_type [authorization_code|refresh_token|password|etc] - * add Genius.com API authentication (OAuth2) - * fix GitHub API - * standardize authorization url generation for OAuth2 - * update Facebook to v2.6 - * cleanup: drop old APIs without Examples and with outdated domains - -[2.5.3] - * fix - do not send two Content-Type header in async requests - * improve OK example - -[2.5.2] - * add Google Async Exmaple (with bugfix for it to work) - * add OSGI manifest metadata - * apiSecret is not mandatory parameter in config - (to use on client sides and other flows without need of the API secret) - * implement OAuth2 Authorization Response parsing in the OAuth20Service - (to extract code and state from url, useful for Android) - * update ok.ru API urls, add 'state' support, add refresh token to the example - -[2.4.0] - * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) - * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException - * make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) - * drop Google OAuth 1.0 support (OAuth 1.0 was officially deprecated by Google) - * add response_type parameter to the ServiceBuilder/OAuthConfig to use not only "code" for authorization code - * remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1 - * default HTTP verb for OAuth 2.0 Access Token EndPoint is POST (http://tools.ietf.org/html/rfc6749#section-3.2) - * send missed headers in async version (as in sync) - * support 'password' grant_type for OAuth 2.0 - -[2.3.0] - * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). - * Support response in gzip. - * differentiate OAuth1 Access token, OAuth 1 Request Token and OAuth 2 Access token, make them conforms RFCs - * OAuth 1 APIs can choose whether to pass empty oauth_token param in requests - * Support refresh tokens for OAuth2 (very thanks to P. Daniel Tyreus https://github.com/pdtyreus) - -[2.2.2] - * make all APIs to be extentable (have protected constructors, useful for testing) - -[2.2.1] - * Update Facebook API v2.2 -> v2.5 - * Update hh.ru urls - -[2.2.0] - * Let GoogleApi20 supports OOB - * Updated Imgur API to OAuth2 - * force not to instantiate stateless APIs. Use provided singletons - * reduce OAuthService abstraction for OAuth1 and OAuth2. Separate OAuth(1|2)Services - -[2.1.0] - * add Pinterest API - -[2.0.1] - * small code enhancements - -[2.0] - * merge back SubScribe fork to the ScribeJava - -for previous changes see -v1-changelog - changelog for 1.x version -v2pre-changelog - changelog for SubScribe fork +[8.3.3] + * update dependencies, including security updates in libraries + +[8.3.2] + * minor fixes and enhances + * update dependencies + * while using async HTTP client, you could miss some Throwables, now they will be thrown + +[8.3.1] + * fix java.lang.NoClassDefFoundError for non-java8 runtimes (e.g. Android 7.1.1) + (thanks to https://github.com/ChristopherGittner) + +[8.3.0] + * add Instagram (https://www.instagram.com/) API (thanks to https://github.com/faent) + * add getErrorMessage method to FacebookAccessTokenErrorResponse. Should be used instead of general getMessage method + from the parent Exception + +[8.2.0] + * add ScopeBuilder to easily specify multiple scopes while requesting OAuth2.0 Access Tokens + * make Base64 en/de-coding not dependent from java8 implementation (use three optional implementation + (internal java 8+, Apache Commons Codec, JAXB) detected in runtime) (thanks to https://github.com/CodingFabian) + * implement possibility to add extra parameters to Access Token Request + (AccessTokenRequestParams#*ExtraParameters methods), https://github.com/scribejava/scribejava/issues/980 + (thanks to https://github.com/pmorch) + +[8.1.0] + * add raw Response (with HTTP response code and body) as member to the OAuth2AccessTokenErrorResponse + * add possibility to set "" (empty string) as apiSecret + * add Slack API (https://slack.com/) (thanks to https://github.com/petrkopotev) + +[8.0.0] + * add Kakao API (https://kakao.com/) (thanks to https://github.com/v0o0v) + * support chunks in JDKHttpClient's Multipart (thanks to https://github.com/eos1d3) + * add support for OAuth 2.0 Device Authorization Grant (RFC 8628) (thanks to https://github.com/rebarbora-mckvak) + * update Google API URLs + +[7.1.1] + * add Proxy support (via config's option) to internal JDKHttpClient (thanks to https://github.com/bjournaud) + * fix typo (change "Verfier" to "Verifier") (thanks to https://github.com/afkbrb) + * fix Multipart support in JDKHttpClient (thanks to https://github.com/eos1d3) + +[7.0.0] + * Add Polar API (https://www.polar.com/) (thanks to https://github.com/vidi42) + * make Response accept resources to autoclose and autoclose it (thanks to https://github.com/drei01) + * fix url encoding in POST payload (it's needed for 'application/x-www-form-urlencoded' Content-Type) + + unit tests (thanks to https://github.com/max904-github) + * Add Armeria HTTP client (thanks to https://github.com/max904-github) + +[6.9.0] + * Add Xero API (https://www.xero.com/) (thanks to https://github.com/SidneyAllen) + +[6.8.1] + * make Response implements Closeable (thanks to https://github.com/omaric) + * fix Type resolution for builder pattern in ServiceBuilderOAuth10a (thanks to https://github.com/mgyucht) + * fix no Content-length errors (thanks to https://github.com/mikita-herasiutsin and https://github.com/iankurverma) + +[6.8.0] + * Add debug output to OAuth2Service (thanks to https://github.com/rbarbey) + * Add Dropbox API (https://www.dropbox.com/) (thanks to https://github.com/petrkopotev) + +[6.7.0] + * Add OAuth2 support for Meetup.com (thanks to https://github.com/stevedes77) + * upgrade okhttp to 4.0.1 and security fix for jackson-databind 2.9.9.1 + +[6.6.3] + * fix NPE for OpenId providers + +[6.6.2] + * add PMD checks on compile + * add all OAuth error codes from supported RFCs (incl. "invalid_token") (thanks to https://github.com/echorebel) + * Update LinkedIn Example to API v2 (thanks to https://github.com/peternees) + * switch to jackson dependency to parse json responses (thanks to https://github.com/galimru) + +[6.5.1] + * cleanup deprecates methods + +[6.5.0] + * separate OAuth1.0a and OAuth2.0 ServiceBuilders, + introduce AuthorizationUrlBuilder (along with deprecation of AuthorizationUrlWithPKCE) + add possibility to provide different scopes for each Access Token request + * upgrade Facebook API from v2.11 to v3.2 + * upgrade VkontakteApi from 5.73 to 5.92 + +[6.4.1] + * support TLS 1.3 in JDK 11 for Salesforce + * fix NPE in Apache HTTP client in case of empty body in HTTP response (e.g. with 204 response code) + (thanks to https://github.com/SainagNeelamPatnaik) + * separate OAuth1.0a and OAuth2.0 classes + +[6.3.0] + * fix Muplipart request model and implement it for a jdk HTTP client (thanks to https://github.com/NTPape) + * remove any Google+ mention (switch to clean Google OAuth2) (thanks to https://github.com/fvasco) + * fix Microsoft Azure AD v1.0 and v2.0 (thanks to https://github.com/kenpusney and https://github.com/oscararias) + * add new API Asana (https://asana.com/) (thanks to https://github.com/joestazak) + * state param should be used only for authorization url generation, for v2 only, for Authorization Code Grant only, + and it should be set per request, not per created OAuthService + +[6.2.0] + * add new API Microsoft Azure Active Directory (Azure AD) 2.0 + (thanks to https://github.com/rzukow and https://github.com/dgrudenic) + +[6.1.0] + * add new API Keycloak (https://www.keycloak.org/) (thanks to https://github.com/JureZelic) + * add new API Discord (https://discordapp.com/) (thanks to https://github.com/Jokuni) + +[6.0.0] + * make redirect_uri optional while Access Token requesting on OAuth 2.0 (thanks to https://github.com/computerlove) + * switch to java 9+ (from java 7 only) for compilation. Runtime is still java 7+. + Complement README with links and RFC descriptions. + * switch OAuth2 Bearer Token Usage from enum OAuth2SignatureType to interface BearerSignature to be extensible + * add new API Wunderlist (https://www.wunderlist.com/) (thanks to https://github.com/M-F-K) + +[5.6.0] + * remove support for obsolete NetEase (http://www.163.com/) and sohu 搜狐 (http://www.sohu.com/) + (thanks to https://github.com/zawn) + * add Multipart functionality to JDK Http Client (thanks to https://github.com/eos1d3) + * switch OAuth2 ClientAuthenticationType from enum to interface ClientAuthentication to be extensible according to + https://tools.ietf.org/html/rfc6749#section-2.3.2 (thanks to https://github.com/zawn) + * add RuntimeException processing in async http clients (delivered to onError callbacks) + (thanks to https://github.com/jochen314) + * check 200 status code from response in OAuth2AccessTokenExtractor (thanks to https://github.com/jochen314) + * fix case sensitive Http Headers comparison and sending Content-Type header along with content-type + (thanks to https://github.com/marnix) + * add HiOrg-Server (https://www.hiorg-server.de/) API (thanks to https://github.com/MartinBoehmer) + +[5.5.0] + * fix error parsing for Fitbit (thanks to https://github.com/danmana) + * optimize debug log performance impact on prod in OAuth1 and fix + NoClassDefFoundError on Android device with SDK 18 and lower (thanks to https://github.com/arcao) + * add new API - MediaWiki (https://www.mediawiki.org/) (thanks to https://github.com/lucaswerkmeister) + +[5.4.0] + * fix missing support for scope for refresh_token grant_type (thanks to https://github.com/tlxtellef) + * add email field to VKOAuth2AccessToken (thanks to https://github.com/grouzen) + * add new API - Automatic (https://www.automatic.com/) (thanks to https://github.com/ramsrib) + * add new API - Fitbit (https://www.fitbit.com/) + (thanks to https://github.com/JustinLawler and https://github.com/alexthered) + * deprecate OAuthConfig + * OAuth1.0: send "oob" instead of null callback while requesting RequestToken (thanks to https://github.com/Rafaelsk) + +[5.3.0] + * fix Salesforce API (thanks to https://github.com/jhorowitz-firedrum) + * remove 'final' from methods in OAuth[10a|20]Service to allow mocking it + * fix Pinterest API (thanks to https://github.com/sschwieb) + * add Yahoo2 API (thanks to https://github.com/javatestcase) + * fix Tumblr urls, convert to https (thanks to https://github.com/highthunder) + * fix: allow spaces in scope param in OAuth2Accesstoken response + * add required param version to VK ВКонтакте (http://vk.com/) urls + +[5.2.0-java7again] + * allow 'null' as callback. It's an optional parameter. Remove "oob" as default + (thanks to https://github.com/massongit) + * java7 compatible again! + +[5.1.0] + * drop optional dependency on Apache commons-codec + * add API - Dataporten (https://docs.dataporten.no/) (thanks to https://github.com/xibriz) + * add API - Microsoft Azure Active Directory (Azure AD) (thanks to https://github.com/kaushalmall) + * fix LinkedInApi20 (thanks to https://github.com/jhorowitz-firedrum) + +[5.0.0] + * drop Java 7 backward compatibility support, become Java 8 only (was reverted in v5.2.0-java7again) + * add JSON token extractor for OAuth 1.0a (thanks to https://github.com/evstropovv) + * add new API - uCoz (https://www.ucoz.com/) (thanks to https://github.com/evstropovv) + * add PKCE (RFC 7636) support (Proof Key for Code Exchange by OAuth Public Clients) + (thanks for suggesting to https://github.com/dieseldjango) + * switch to use HTTP Basic Authorization by default in requests with need of + (2.3. Client Authentication) https://tools.ietf.org/html/rfc6749#section-2.3 Can be overrided in API class + * add support for client_credentials grant type (thanks to https://github.com/vivin) + * add support for RFC 7009 OAuth 2.0 Token Revocation (thanks to https://github.com/vivin) + * add OAuth2Service signRequest method accepting just String, not OAuth2 Access Token Object. + Remove signRequest from abstract OAuthService. 2.0 and 1.0a will be a bit more different now. + * drop toString method from *Tokens to prevent leak of sensible data (token ans secrets) + (thanks to https://github.com/rcaa) + * add Apache HttpComponents HttpClient support in separate module (thanks to https://github.com/sschwieb) + * add support for appsecret_proof in Facebook + * update Facebook v2.8 -> v2.11 + (version can be configured while constructing OAuthService - use FacebookApi.customVersion("2.11")) + +[4.2.0] + * DELETE in JdkClient permits, but not requires payload (thanks to https://github.com/miguelD73) + * add new API - Frappe (https://github.com/frappe/frappe) (thanks to https://github.com/revant) + * add new API - Etsy (https://www.etsy.com/) (thanks to https://github.com/efekocabas) + +[4.1.2] + * LinkedIn use Header to sign OAuth2 requests + * upgrade ServiceBuilder to check apiKey preconditions compile-time (not run-time) + * update Live API (thanks to https://github.com/typhoon17) + +[4.1.1] + * omit the client_secret parameter if it is an empty string while refreshing token + (thanks to https://github.com/KungfuPancake) + * allow perms to be specified in Flickr Api (read, write, or delete) (thanks to https://github.com/rogerhu) + * OdnoklassnikiService should consider params in a body while signing the request + (thanks to https://github.com/MrNeuronix) + * do not open OutputStream for output while sending empty body in HTTP requests in the default JDK Http client + +[4.1.0] + * make client_secret optional in OAuth2 while requesting AccessToken + (if set to null, it's not required by OAuth2 specs) + * move OAuth1 SignatureType from ServiceBuilder to API + * add body for PATCH HTTP method + * make addOAuthParams appendSignature methods protected in OAuth10aService (to override them in case of need) + (thanks to https://github.com/vivin) + +[4.0.0] + * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. + Move default Http engine to JDKHttpClient. + * introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests + * switch Google, GitHub, Facebook OAuth2.0 oauth requests signing to more secured recommended variant + (GET-param -> header Bearer) + * introduce custom nonstandard Facebook AccessTokenErrorResponse + +[3.4.1] + * Drop deprecated methods + * Move doktornarabote.ru urls to https (thanks to https://github.com/ezibrov) + +[3.4.0] + * uncouple OAuthRequest and Service. OAuthRequest shouldn't know anything about OAuthservice. + You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. + * add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) + * add support for HTTP verbs (thanks to https://github.com/keijohyttinen) + * add OkHttp http client support (thanks to https://github.com/arcao) + * add default HTTP client configs + (to use like 'new ServiceBuilder().httpClientConfig(OkHttpHttpClientConfig.defaultConfig())') + * you can use your own impl of AsyncHttpClient + +[3.3.0] + * update Facebook v2.6 -> v2.8 + * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) + * add Box (thanks to https://github.com/MclaughlinSteve) + * fix: OAuth20Service::refreshAccessToken should use RefreshTokenEndpoint, not AccessTokenEndpoint + (thanks to https://github.com/vivin) + * move signRequest method to OAuthService (common for OAuth1 and OAuth2) (thanks to https://github.com/apomelov) + * drop deprecated setConnectionKeepAlive method + +[3.2.0] + * Add Naver API (thanks to chooco) + * handle OAuth2 error response for Issuing an Access Token (thanks to juherr) + +[3.1.0] + * fix OdnoklassnikiServiceImpl signature, params for hash must be sorted in lexicographic order, + see http://new.apiok.ru/dev/methods/ + * add posibility to use externally created http client + * make ScribeJava compilable under jdk7 (checkstyle downgraded for jdk 1.7) + * add travis CI (check [oracle|open]jdk7 oraclejdk8) + +[3.0.0] + * create abstract HTTP Client layer to support different HTTP clients as plugins + (AHC and Ning support becames maven submodules) + * remove changing global JVM property http.keepAlive, deprecate controlling this property inside of ScribeJava + (thanks to wldaunfr and rockihack) + +[2.8.1] + * add Salesforce sandbox API support + +[2.8.0] + * add Salesforce API + * update Linked In API + +[2.7.3] + * FIX: ScribeJava shouldn't require all async http client provider to be on the classpath if using only one of them + +[2.7.2] + * FIX: ScribeJava shouldn't require any async http client provider to be on the classpath (neither ning neither AHC) + +[2.7.1] + * do not hide checked IOException in unchecked IllegalArgumentException + +[2.7.0] + * make http async client implementation be more pluggable + * add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) + * add Misfit (http://misfit.com/) API + * implement async version getting Request Token for OAuth 1.0a + +[2.6.0] + * simplify async/sync usages + * add optional "User-Agent" config option to use while making http calls + * refactor usage of grant_type [authorization_code|refresh_token|password|etc] + * add Genius.com API authentication (OAuth2) + * fix GitHub API + * standardize authorization url generation for OAuth2 + * update Facebook to v2.6 + * cleanup: drop old APIs without Examples and with outdated domains + +[2.5.3] + * fix - do not send two Content-Type header in async requests + * improve OK example + +[2.5.2] + * add Google Async Exmaple (with bugfix for it to work) + * add OSGI manifest metadata + * apiSecret is not mandatory parameter in config + (to use on client sides and other flows without need of the API secret) + * implement OAuth2 Authorization Response parsing in the OAuth20Service + (to extract code and state from url, useful for Android) + * update ok.ru API urls, add 'state' support, add refresh token to the example + +[2.4.0] + * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) + * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException + * make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) + * drop Google OAuth 1.0 support (OAuth 1.0 was officially deprecated by Google) + * add response_type parameter to the ServiceBuilder/OAuthConfig to use not only "code" for authorization code + * remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1 + * default HTTP verb for OAuth 2.0 Access Token EndPoint is POST (http://tools.ietf.org/html/rfc6749#section-3.2) + * send missed headers in async version (as in sync) + * support 'password' grant_type for OAuth 2.0 + +[2.3.0] + * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). + * Support response in gzip. + * differentiate OAuth1 Access token, OAuth 1 Request Token and OAuth 2 Access token, make them conforms RFCs + * OAuth 1 APIs can choose whether to pass empty oauth_token param in requests + * Support refresh tokens for OAuth2 (very thanks to P. Daniel Tyreus https://github.com/pdtyreus) + +[2.2.2] + * make all APIs to be extentable (have protected constructors, useful for testing) + +[2.2.1] + * Update Facebook API v2.2 -> v2.5 + * Update hh.ru urls + +[2.2.0] + * Let GoogleApi20 supports OOB + * Updated Imgur API to OAuth2 + * force not to instantiate stateless APIs. Use provided singletons + * reduce OAuthService abstraction for OAuth1 and OAuth2. Separate OAuth(1|2)Services + +[2.1.0] + * add Pinterest API + +[2.0.1] + * small code enhancements + +[2.0] + * merge back SubScribe fork to the ScribeJava + +for previous changes see +v1-changelog - changelog for 1.x version +v2pre-changelog - changelog for SubScribe fork diff --git a/checkstyle.xml b/checkstyle.xml index f7efbad65..b7e66b023 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -1,124 +1,124 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/donate.md b/donate.md index 99d3686dc..cfe015de7 100644 --- a/donate.md +++ b/donate.md @@ -1,12 +1,12 @@ -You can now help ScribeJava not only by Pull Requests. - -You can use [https://www.paypal.com/paypalme/algr453](https://www.paypal.com/paypalme/algr453) directly. - -Thanks in advance! - -ps.If you can't for any reason use above method, let me know, we will find the way out. - -Hall of fame "Donors" (in alphabetical order, if you don't want to be here, just put a note along with the donation):
-1.Douglas Ross from USA
-2.Ian Strachan
-3.Your name can be here. +You can now help ScribeJava not only by Pull Requests. + +You can use [https://www.paypal.com/paypalme/algr453](https://www.paypal.com/paypalme/algr453) directly. + +Thanks in advance! + +ps.If you can't for any reason use above method, let me know, we will find the way out. + +Hall of fame "Donors" (in alphabetical order, if you don't want to be here, just put a note along with the donation):
+1.Douglas Ross from USA
+2.Ian Strachan
+3.Your name can be here. diff --git a/pmd.xml b/pmd.xml index 5d93d340b..371a06018 100644 --- a/pmd.xml +++ b/pmd.xml @@ -1,124 +1,124 @@ - - - - - This ruleset defines the PMD rules for project "ScribeJava". - - - - - - - true - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + This ruleset defines the PMD rules for project "ScribeJava". + + + + + + + true + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index bc2f98930..65c239029 100644 --- a/pom.xml +++ b/pom.xml @@ -1,368 +1,368 @@ - - 4.0.0 - com.github.scribejava - scribejava - pom - 8.3.4-SNAPSHOT - ScribeJava OAuth Library - The best OAuth library out there - https://github.com/scribejava/scribejava - - - org.sonatype.oss - oss-parent - 9 - - - - scribejava-core - scribejava-java8 - scribejava-apis - scribejava-httpclient-ahc - scribejava-httpclient-ning - scribejava-httpclient-okhttp - scribejava-httpclient-apache - scribejava-httpclient-armeria - - - - - MIT - https://github.com/scribejava/scribejava/blob/master/LICENSE.txt - - - - - scm:git:https://github.com/scribejava/scribejava - scm:git:https://github.com/scribejava/scribejava - https://github.com/scribejava/scribejava - HEAD - - - - - kullfar - Stanislav Gromov - kullfar@gmail.com - - all - - +3 - - - - - - com.fasterxml.jackson.core - jackson-databind - 2.14.0 - - - junit - junit - 4.13.2 - test - - - com.github.scribejava - scribejava-apis - 8.3.3 - - - com.squareup.okhttp3 - mockwebserver - 4.10.0 - test - - - - - - - org.apache.felix - maven-bundle-plugin - 5.1.8 - - - bundle-manifest - process-classes - - manifest - - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - default-prepare-agent - - prepare-agent - - - - default-report - - report - - - - default-check - - check - - - - - BUNDLE - - - COMPLEXITY - COVEREDRATIO - 0.60 - - - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.3.0 - - - ${project.build.outputDirectory}/META-INF/MANIFEST.MF - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.2.0 - - - com.puppycrawl.tools - checkstyle - 10.4 - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - true - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.22.2 - - - org.apache.maven.plugins - maven-clean-plugin - 3.2.0 - - - org.apache.maven.plugins - maven-install-plugin - 3.0.1 - - - - - - maven-compiler-plugin - 3.10.1 - - UTF-8 - ${java.release} - true - - -Xlint:-options - - - - - maven-deploy-plugin - 3.0.0 - - - default-deploy - deploy - - deploy - - - - - - org.apache.maven.plugins - maven-resources-plugin - 3.3.0 - - UTF-8 - - - - org.apache.maven.plugins - maven-source-plugin - 3.2.1 - - - attach-sources - - jar - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.4.1 - - ${java.home}/bin/javadoc - UTF-8 - -html5 - all,-missing - - - - attach-javadoc - - jar - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - validate - validate - - - ${basedir}/src - - checkstyle.xml - UTF-8 - true - - - check - - - - - - org.apache.maven.plugins - maven-pmd-plugin - 3.19.0 - - - net.sourceforge.pmd - pmd-core - ${pmdVersion} - - - net.sourceforge.pmd - pmd-java - ${pmdVersion} - - - net.sourceforge.pmd - pmd-javascript - ${pmdVersion} - - - net.sourceforge.pmd - pmd-jsp - ${pmdVersion} - - - - 1.${java.release} - false - - ../pmd.xml - - true - true - true - - - - - check - - - - - - - - - 7 - 6.51.0 - - - - - release-sign-artifacts - - - performRelease - true - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 3.0.1 - - - sign-artifacts - verify - - sign - - - - - - - - - + + 4.0.0 + com.github.scribejava + scribejava + pom + 8.3.4-SNAPSHOT + ScribeJava OAuth Library + The best OAuth library out there + https://github.com/scribejava/scribejava + + + org.sonatype.oss + oss-parent + 9 + + + + scribejava-core + scribejava-java8 + scribejava-apis + scribejava-httpclient-ahc + scribejava-httpclient-ning + scribejava-httpclient-okhttp + scribejava-httpclient-apache + scribejava-httpclient-armeria + + + + + MIT + https://github.com/scribejava/scribejava/blob/master/LICENSE.txt + + + + + scm:git:https://github.com/scribejava/scribejava + scm:git:https://github.com/scribejava/scribejava + https://github.com/scribejava/scribejava + HEAD + + + + + kullfar + Stanislav Gromov + kullfar@gmail.com + + all + + +3 + + + + + + com.fasterxml.jackson.core + jackson-databind + 2.14.0 + + + junit + junit + 4.13.2 + test + + + com.github.scribejava + scribejava-apis + 8.3.3 + + + com.squareup.okhttp3 + mockwebserver + 4.10.0 + test + + + + + + + org.apache.felix + maven-bundle-plugin + 5.1.8 + + + bundle-manifest + process-classes + + manifest + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + default-prepare-agent + + prepare-agent + + + + default-report + + report + + + + default-check + + check + + + + + BUNDLE + + + COMPLEXITY + COVEREDRATIO + 0.60 + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.2.0 + + + com.puppycrawl.tools + checkstyle + 10.4 + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + true + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + + org.apache.maven.plugins + maven-clean-plugin + 3.2.0 + + + org.apache.maven.plugins + maven-install-plugin + 3.0.1 + + + + + + maven-compiler-plugin + 3.10.1 + + UTF-8 + ${java.release} + true + + -Xlint:-options + + + + + maven-deploy-plugin + 3.0.0 + + + default-deploy + deploy + + deploy + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.3.0 + + UTF-8 + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.4.1 + + ${java.home}/bin/javadoc + UTF-8 + -html5 + all,-missing + + + + attach-javadoc + + jar + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + validate + validate + + + ${basedir}/src + + checkstyle.xml + UTF-8 + true + + + check + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.19.0 + + + net.sourceforge.pmd + pmd-core + ${pmdVersion} + + + net.sourceforge.pmd + pmd-java + ${pmdVersion} + + + net.sourceforge.pmd + pmd-javascript + ${pmdVersion} + + + net.sourceforge.pmd + pmd-jsp + ${pmdVersion} + + + + 1.${java.release} + false + + ../pmd.xml + + true + true + true + + + + + check + + + + + + + + + 7 + 6.51.0 + + + + + release-sign-artifacts + + + performRelease + true + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.0.1 + + + sign-artifacts + verify + + sign + + + + + + + + + diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 4e51bb8b5..deed91a5d 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -1,73 +1,73 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-apis - ScribeJava APIs - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - com.github.scribejava - scribejava-httpclient-ahc - ${project.version} - test - - - com.github.scribejava - scribejava-httpclient-ning - ${project.version} - test - - - com.github.scribejava - scribejava-httpclient-okhttp - ${project.version} - test - - - com.github.scribejava - scribejava-httpclient-apache - ${project.version} - test - - - com.github.scribejava - scribejava-httpclient-armeria - ${project.version} - test - - - io.netty - netty-resolver - 4.1.84.Final - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-apis + ScribeJava APIs + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + com.github.scribejava + scribejava-httpclient-ahc + ${project.version} + test + + + com.github.scribejava + scribejava-httpclient-ning + ${project.version} + test + + + com.github.scribejava + scribejava-httpclient-okhttp + ${project.version} + test + + + com.github.scribejava + scribejava-httpclient-apache + ${project.version} + test + + + com.github.scribejava + scribejava-httpclient-armeria + ${project.version} + test + + + io.netty + netty-resolver + 4.1.84.Final + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index d5fbfc488..e0b019d6f 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -1,62 +1,62 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-core - ScribeJava Core - jar - - - - com.github.scribejava - scribejava-java8 - ${project.version} - - - commons-codec - commons-codec - 1.15 - true - - - jakarta.xml.bind - jakarta.xml.bind-api - 4.0.0 - true - - - javax.xml.bind - jaxb-api - 2.3.0 - true - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-core + ScribeJava Core + jar + + + + com.github.scribejava + scribejava-java8 + ${project.version} + + + commons-codec + commons-codec + 1.15 + true + + + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.0 + true + + + javax.xml.bind + jaxb-api + 2.3.0 + true + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + + diff --git a/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 7df053c24..1090de3ad 100644 --- a/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1,2 +1,2 @@ -com.github.scribejava.core.httpclient.jdk.JDKHttpProvider - +com.github.scribejava.core.httpclient.jdk.JDKHttpProvider + diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index fabd225c3..2d19b10e8 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -1,55 +1,55 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-ahc - ScribeJava Async Http Http Client support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - org.slf4j - slf4j-simple - 2.0.3 - test - - - org.asynchttpclient - async-http-client - 2.12.3 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-ahc + ScribeJava Async Http Http Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + org.slf4j + slf4j-simple + 2.0.3 + test + + + org.asynchttpclient + async-http-client + 2.12.3 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index bbe752ff6..a8c1950b3 100644 --- a/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.ahc.AhcProvider +com.github.scribejava.httpclient.ahc.AhcProvider diff --git a/scribejava-httpclient-apache/pom.xml b/scribejava-httpclient-apache/pom.xml index 1dc9dd53c..446665b15 100644 --- a/scribejava-httpclient-apache/pom.xml +++ b/scribejava-httpclient-apache/pom.xml @@ -1,54 +1,54 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-apache - ScribeJava Apache HttpComponents HttpClient support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - org.apache.httpcomponents - httpclient - 4.5.13 - - - org.apache.httpcomponents - httpasyncclient - 4.1.5 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-apache + ScribeJava Apache HttpComponents HttpClient support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + org.apache.httpcomponents + httpasyncclient + 4.1.5 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-apache/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-apache/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 651910028..165fa93ea 100644 --- a/scribejava-httpclient-apache/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-apache/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.apache.ApacheProvider +com.github.scribejava.httpclient.apache.ApacheProvider diff --git a/scribejava-httpclient-armeria/pom.xml b/scribejava-httpclient-armeria/pom.xml index 54e58c619..193dc56cd 100644 --- a/scribejava-httpclient-armeria/pom.xml +++ b/scribejava-httpclient-armeria/pom.xml @@ -1,59 +1,59 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-armeria - ScribeJava Async Armeria Client support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - org.slf4j - slf4j-simple - 2.0.3 - test - - - com.linecorp.armeria - armeria - 1.20.2 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - - - 8 - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-armeria + ScribeJava Async Armeria Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + org.slf4j + slf4j-simple + 2.0.3 + test + + + com.linecorp.armeria + armeria + 1.20.2 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + + + 8 + + diff --git a/scribejava-httpclient-armeria/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-armeria/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index bba338db5..827a34788 100644 --- a/scribejava-httpclient-armeria/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-armeria/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.armeria.ArmeriaProvider +com.github.scribejava.httpclient.armeria.ArmeriaProvider diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 39696d698..9942a096f 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -1,55 +1,55 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-ning - ScribeJava Ning Async Http Client support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - org.slf4j - slf4j-simple - 2.0.3 - test - - - com.ning - async-http-client - 1.9.40 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-ning + ScribeJava Ning Async Http Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + org.slf4j + slf4j-simple + 2.0.3 + test + + + com.ning + async-http-client + 1.9.40 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 9f6843994..772a6e2a0 100644 --- a/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.ning.NingProvider +com.github.scribejava.httpclient.ning.NingProvider diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 59bc2bffc..0d798e0d9 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -1,49 +1,49 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-okhttp - ScribeJava Async OkHttp Client support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - com.squareup.okhttp3 - okhttp - 4.10.0 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-okhttp + ScribeJava Async OkHttp Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + com.squareup.okhttp3 + okhttp + 4.10.0 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 46afa18ed..dce51a387 100644 --- a/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.okhttp.OkHttpProvider +com.github.scribejava.httpclient.okhttp.OkHttpProvider diff --git a/scribejava-java8/pom.xml b/scribejava-java8/pom.xml index b75f6d2de..0c7407688 100644 --- a/scribejava-java8/pom.xml +++ b/scribejava-java8/pom.xml @@ -1,33 +1,33 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-java8 - ScribeJava Java 8+ compatibility stuff - jar - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - - - 8 - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-java8 + ScribeJava Java 8+ compatibility stuff + jar + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + + + 8 + + diff --git a/v1-changelog b/v1-changelog index 5423c6237..b1de15e7c 100644 --- a/v1-changelog +++ b/v1-changelog @@ -1,98 +1,98 @@ -[1.0.6] - - * FEATURE: Available in maven central repositories. - -[1.0.7] - - * FEATURE: Added support for Yammer and Evernote ( thanks oparrsih ) - * FIX: Fixed bug that preventing setting the scope param on Google Api - -[1.0.8] - - * FEATURE: Added setConnectTimeout and setReadTimeout for the Request Object - * FIX: Fixed Evernote Api (uses GET for request and access tokens) - * REFACTOR: URLEncoding stuff. LinkedIn specific decoder is no longer needed - * FEATURE: Added Google example - -[1.0.9] - - * FEATURE: Token made Serializable - * FIX: Google Api encoding issues (thanks @roger and @klakegg) - -[1.1.0] - - * FEATURE: OAuth 2.0 Support and Facebook support out of the box (thanks Diego Silveira) - * REFACTOR: Api creation and OAuthService refactors - * REFACTOR: Connections are created lazily (just before sending the request) - -[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 - * FEATURE: Digg and Skyrock Apis - -[1.3.2] - * FIX: Don't include oauth_token in 2legged calls. - * FEATURE: RSA-SHA1 Signatures. - * FEATURE: equals & hashcode on Token object. - * FEATURE: ConstantContact Api - -[1.3.3] - * FEATURE: accessToken and requestToken timeouts default to 2 seconds and can be specified. - * FEATURE: New Apis. +[1.0.6] + + * FEATURE: Available in maven central repositories. + +[1.0.7] + + * FEATURE: Added support for Yammer and Evernote ( thanks oparrsih ) + * FIX: Fixed bug that preventing setting the scope param on Google Api + +[1.0.8] + + * FEATURE: Added setConnectTimeout and setReadTimeout for the Request Object + * FIX: Fixed Evernote Api (uses GET for request and access tokens) + * REFACTOR: URLEncoding stuff. LinkedIn specific decoder is no longer needed + * FEATURE: Added Google example + +[1.0.9] + + * FEATURE: Token made Serializable + * FIX: Google Api encoding issues (thanks @roger and @klakegg) + +[1.1.0] + + * FEATURE: OAuth 2.0 Support and Facebook support out of the box (thanks Diego Silveira) + * REFACTOR: Api creation and OAuthService refactors + * REFACTOR: Connections are created lazily (just before sending the request) + +[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 + * FEATURE: Digg and Skyrock Apis + +[1.3.2] + * FIX: Don't include oauth_token in 2legged calls. + * FEATURE: RSA-SHA1 Signatures. + * FEATURE: equals & hashcode on Token object. + * FEATURE: ConstantContact Api + +[1.3.3] + * FEATURE: accessToken and requestToken timeouts default to 2 seconds and can be specified. + * FEATURE: New Apis. diff --git a/v2pre-changelog b/v2pre-changelog index 6f456136e..1a128b98e 100644 --- a/v2pre-changelog +++ b/v2pre-changelog @@ -1,57 +1,57 @@ -[SNAPSHOT] - * prepare to merge back to the ScribeJava - * backport 'news' from scribejava - -[3.4] - * add doktornarabote.ru API support - -[3.3] - * upgrade ning async http client 1.9.20 -> 1.9.26 - * add possibility to use ProxyServer per-request (async only) - * rename maven modules, add "subscribe-" prefix - * backport anything new from scribe-java - -[3.2] - * add possibility to set non-default httpProvider Class Name for ning async http client - -[3.1] - * update FaceBook API version from 2.0 to 2.2 - * update ning dependency for async functionality - * allow 'realm' parameter in OAuthParameters - -[3.0] - * make compilable with OpenJDK8 - * add async functionality - * add GitHub API - * split on two maven modules (+repackaging) - -[2.3] - - * add state parameter in LinkedInAPI 2.0 - * update FB Graph API to version 2.0 - * add tut.by OAuth API - * add default parameter grant_type for Google, LinkedIn and Mail.ru - * update host for requests in VkontakteExample - * add Yinxiang Biji endpoint in EvernoteApi - * switch Flickr and Twitter to https - * update domain for LiveAPI - * add support for the Authorization parameter 'realm' - * add TumblrExample - * update TwitterExample to v1.1 - * merge Request class in OAuthRequest. No need in separate Request class. - No planned usages of 'clean' http requests. - * add required OAuthService parameter in constructor for OAuthRequest, - so it can use OAuthConfig always (Default timeouts for all OAuthRequests - per OAuthService instance are now possible 'from-the-box'). - * remove messy RequestTuner. Use OAuthConfig instead of it. - -[2.1] - - * add OpenID id_token parsing from response to GoogleAPI 2.0 - * add optional OAuth 'state' request parameter - * Add hh api support - * fix Mailru API - -[2.0] - - * New release. First release. Formalizations of new project. +[SNAPSHOT] + * prepare to merge back to the ScribeJava + * backport 'news' from scribejava + +[3.4] + * add doktornarabote.ru API support + +[3.3] + * upgrade ning async http client 1.9.20 -> 1.9.26 + * add possibility to use ProxyServer per-request (async only) + * rename maven modules, add "subscribe-" prefix + * backport anything new from scribe-java + +[3.2] + * add possibility to set non-default httpProvider Class Name for ning async http client + +[3.1] + * update FaceBook API version from 2.0 to 2.2 + * update ning dependency for async functionality + * allow 'realm' parameter in OAuthParameters + +[3.0] + * make compilable with OpenJDK8 + * add async functionality + * add GitHub API + * split on two maven modules (+repackaging) + +[2.3] + + * add state parameter in LinkedInAPI 2.0 + * update FB Graph API to version 2.0 + * add tut.by OAuth API + * add default parameter grant_type for Google, LinkedIn and Mail.ru + * update host for requests in VkontakteExample + * add Yinxiang Biji endpoint in EvernoteApi + * switch Flickr and Twitter to https + * update domain for LiveAPI + * add support for the Authorization parameter 'realm' + * add TumblrExample + * update TwitterExample to v1.1 + * merge Request class in OAuthRequest. No need in separate Request class. + No planned usages of 'clean' http requests. + * add required OAuthService parameter in constructor for OAuthRequest, + so it can use OAuthConfig always (Default timeouts for all OAuthRequests + per OAuthService instance are now possible 'from-the-box'). + * remove messy RequestTuner. Use OAuthConfig instead of it. + +[2.1] + + * add OpenID id_token parsing from response to GoogleAPI 2.0 + * add optional OAuth 'state' request parameter + * Add hh api support + * fix Mailru API + +[2.0] + + * New release. First release. Formalizations of new project. From 56f0a960f6185527fa6558552fc90287f8351b6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sat, 8 Jun 2024 14:51:18 +0200 Subject: [PATCH 04/36] Normalize all line endings to LF --- .../src/main/java/com/github/scribejava/apis/XingApi.java | 0 .../java/com/github/scribejava/apis/examples/XingExample.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/XingApi.java mode change 100755 => 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/XingApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/XingApi.java old mode 100755 new mode 100644 diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java old mode 100755 new mode 100644 From f389b084f9ee305c94ff8deff6b30c706588ee74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sat, 8 Jun 2024 14:52:30 +0200 Subject: [PATCH 05/36] Revert "Normalize all line endings to LF" This reverts commit 759e95518941dd2fc35ec5f8ee5e8eb41917fd45. --- .github/FUNDING.yml | 24 +- .gitignore | 30 +- LICENSE.txt | 42 +- README.md | 360 ++++----- changelog | 682 ++++++++-------- checkstyle.xml | 248 +++--- donate.md | 24 +- pmd.xml | 248 +++--- pom.xml | 736 +++++++++--------- scribejava-apis/pom.xml | 146 ++-- scribejava-core/pom.xml | 124 +-- ...ibejava.core.httpclient.HttpClientProvider | 4 +- scribejava-httpclient-ahc/pom.xml | 110 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-httpclient-apache/pom.xml | 108 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-httpclient-armeria/pom.xml | 118 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-httpclient-ning/pom.xml | 110 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-httpclient-okhttp/pom.xml | 98 +-- ...ibejava.core.httpclient.HttpClientProvider | 2 +- scribejava-java8/pom.xml | 66 +- v1-changelog | 196 ++--- v2pre-changelog | 114 +-- 25 files changed, 1799 insertions(+), 1799 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index aec425d05..0a2df9277 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,12 +1,12 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: ['https://www.paypal.com/paypalme/algr453'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['https://www.paypal.com/paypalme/algr453'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.gitignore b/.gitignore index 0e3e8d35c..5c3b031d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,15 @@ -# Eclipse specific settings -.classpath -.project -.settings - -# IntelliJ Idea settings -.idea -*.iml - -# Netbeans settings -nb-configuration.xml -nbproject - -# Binaries -target +# Eclipse specific settings +.classpath +.project +.settings + +# IntelliJ Idea settings +.idea +*.iml + +# Netbeans settings +nb-configuration.xml +nbproject + +# Binaries +target diff --git a/LICENSE.txt b/LICENSE.txt index 598280d59..6085098bc 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,21 +1,21 @@ -The MIT License - -Copyright (c) 2010 Pablo Fernandez - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +The MIT License + +Copyright (c) 2010 Pablo Fernandez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md index c3b034a8d..b90ef2e5f 100644 --- a/README.md +++ b/README.md @@ -1,180 +1,180 @@ -# Welcome to the home of ScribeJava, the simple OAuth client Java lib! - -[![Donate](https://www.paypalobjects.com/en_US/RU/i/btn/btn_donateCC_LG.gif)](https://github.com/scribejava/scribejava/blob/master/donate.md) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava) - - -# Why use ScribeJava? - -### Dead Simple - -Who said OAuth/OAuth2 was difficult? Configuring ScribeJava is __so easy your grandma can do it__! check it out: - -```java -OAuthService service = new ServiceBuilder(YOUR_CLIENT_ID) - .apiSecret(YOUR_CLIENT_SECRET) - .build(LinkedInApi20.instance()); -``` - -That **single line** (added newlines for readability) is the only thing you need to configure ScribeJava with LinkedIn's OAuth API for example. - -Working executable examples are [here](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) -Common usage: [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) - -### Threadsafe - -Hit ScribeJava as hard and with many threads as you like. - -### Java 7 compatible - -That's it. You can use it in old environments and in android apps. -note: To compile from sources you will need Java 9 or newer - -### Async and other HTTP clients - -ScribeJava support out-of-box several HTTP clients: - * ning async http client 1.9.x (maven module scribejava-httpclient-ning) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) - * Async Http Client asynchttpclient 2.x (maven module scribejava-httpclient-ahc) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java) - * OkHttp (maven module scribejava-httpclient-okhttp) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) - * Apache HttpComponents HttpClient (maven module scribejava-httpclient-apache) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java) - * Armeria HTTP client (required >= java 8) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20ArmeriaExample.java) - * any externally created HTTP client [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) - - just add corresponding maven modules to your pom - -### Supports many flows and additional features - - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Authorization Code Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.1), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Resource Owner Password Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.3) - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Client Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.4), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java) - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Refreshing an Access Token](https://tools.ietf.org/html/rfc6749#section-6), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java#L77) - * [RFC 6750](https://tools.ietf.org/html/rfc6750) The OAuth 2.0 Authorization Framework: Bearer Token Usage - * [RFC 7636](https://tools.ietf.org/html/rfc7636) Proof Key for Code Exchange by OAuth Public Clients (PKCE), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) - * [RFC 7009](https://tools.ietf.org/html/rfc7009) OAuth 2.0 Token Revocation, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java) - * [RFC 8628](https://tools.ietf.org/html/rfc8628) OAuth 2.0 Device Authorization Grant [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20DeviceAuthorizationGrantExample.java) - * [RFC 5849](https://tools.ietf.org/html/rfc5849) The OAuth 1.0 Protocol, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) - -### Supports all (50+) major 1.0a and 2.0 OAuth APIs out-of-the-box - -* Asana (https://asana.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AsanaExample.java) -* Automatic (https://www.automatic.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AutomaticExample.java) -* AWeber (http://www.aweber.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java) -* Box (https://www.box.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java) -* Dataporten (https://docs.dataporten.no/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DataportenExample.java) -* Digg (http://digg.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java) -* Discord (https://discordapp.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiscordExample.java) -* Доктор на работе (https://www.doktornarabote.ru/) -* Dropbox (https://www.dropbox.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DropboxExample.java) -* Etsy (https://www.etsy.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/EtsyExample.java) -* Facebook (https://www.facebook.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java), [example with Async Apache HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java), [example with Async Ning HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) -* Fitbit (https://www.fitbit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FitbitApi20Example.java) -* Flickr (https://www.flickr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java) -* Foursquare (https://foursquare.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java) -* Frappe (https://github.com/frappe/frappe) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FrappeExample.java) -* Freelancer (https://www.freelancer.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java) -* Genius (http://genius.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java) -* GitHub (https://github.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java), [example with OkHttp HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) -* Google (https://www.google.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java), [example with Async Http Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java), [example Revoke](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java), [example with PKCEE](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) -* HeadHunter ХэдХантер (https://hh.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java) -* HiOrg-Server (https://www.hiorg-server.de/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HiOrgServerExample.java) -* Imgur (http://imgur.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java) -* Instagram (https://www.instagram.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/InstagramExample.java) -* Kaixin 开心网 (http://www.kaixin001.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java) -* Kakao (https://kakao.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KakaoExample.java) -* Keycloak (https://www.keycloak.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KeycloakExample.java) -* LinkedIn (https://www.linkedin.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java), [example with custom scopes](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java) -* Mail.Ru (https://mail.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java) -* MediaWiki (https://www.mediawiki.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MediaWikiExample.java) -* Meetup (https://www.meetup.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Meetup20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java) -* Microsoft Azure Active Directory (Azure AD) (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectoryExample.java) -* Microsoft Azure Active Directory (Azure AD) 2.0 (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectory20Example.java) -* Microsoft Live (https://login.live.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java) -* Misfit (http://misfit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java) -* NAVER (http://www.naver.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java) -* Odnoklassniki Одноклассники (http://ok.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java) -* Polar (https://www.polar.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PolarAPIExample.java) -* Pinterest (https://www.pinterest.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java) -* 500px (https://500px.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java) -* Renren (http://renren.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java) -* Salesforce (https://www.salesforce.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java) -* Sina (http://www.sina.com.cn/ http://weibo.com/login.php) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java) -* Skyrock (http://skyrock.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java) -* Slack (https://slack.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SlackExample.java) -* StackExchange (http://stackexchange.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java) -* The Things Network (v1-staging and v2-preview) (https://www.thethingsnetwork.org/) [example v1](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java), [example v2 preview](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java) -* Trello (https://trello.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java) -* Tumblr (https://www.tumblr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java) -* TUT.BY (http://www.tut.by/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java) -* Twitter (https://twitter.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) -* uCoz (https://www.ucoz.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/UcozExample.java) -* Viadeo (http://viadeo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java) -* VK ВКонтакте (http://vk.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java), [example Client Credentials Grant](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java), [example with External HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) -* Wunderlist (https://www.wunderlist.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/WunderlistExample.java) -* Xero (https://www.xero.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XeroExample.java) -* XING (https://www.xing.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java) -* Yahoo (https://www.yahoo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Yahoo20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java) -* check the [examples folder](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) - -### Small and modular - -ScribeJava's code is small (about 1k LOC) and simple to understand. No smart-ass or "clever" hacks here. -You can use only 'core' or 'with apis' maven modules - -### Android-Ready - -Works out of the box with android(TM) applications. - -### Stable & bulletproof - -Good test coverage to keep you safe from harm. - -When something bad actually happens, ScribeJava's meaningful error messages will tell you exactly what went wrong, when and where. - -### Pull it from Maven Central! - -You can pull ScribeJava from the central maven repository, just add these to your __pom.xml__ file: - -```xml - - com.github.scribejava - scribejava-apis - 8.3.3 - -``` - -And in case you need just core classes (that's it, without any external API (FB, VK, GitHub, Google etc) specific code), you could pull just 'core' artifact. -```xml - - com.github.scribejava - scribejava-core - 8.3.3 - -``` - -## How can I help ScribeJava - -First of all, Pull Requests are welcome, the second option is [donations](https://github.com/scribejava/scribejava/blob/master/donate.md). - -## When will ScribeJava support XXX (new RFC, custom functionality, new API etc.) - -When you will send the pull request. That's the way for a majority of changes here. -Or you can ask someone to make the paid job for you. -In some cases, when I'm interested in changes (technically or financially), I can implement the request myself. - -## Paid consulting -If you or your business depends on the Scribejava and you need any specific improvement or new feature not currently implemented in the Scribejava, consider contacting me about a paid job. - -## Getting started in less than 2 minutes - -Check the [Getting Started](https://github.com/scribejava/scribejava/wiki/getting-started) page and start rocking! Please Read the [FAQ](https://github.com/scribejava/scribejava/wiki/faq) before creating an issue :) - -Some useful info and answers you can find on the [wiki](https://github.com/scribejava/scribejava/wiki) - -Also, remember to read the [fantastic tutorial](http://akoskm.github.io/2015/07/31/twitter-sign-in-for-web-apps.html) that [@akoskm](https://twitter.com/akoskm) wrote to easily integrate a server side app with an API (twitter in this case). - -## Questions? - -Feel free to drop us an email or create issue right here on github.com - -## Forks - -If you have a useful fork that should be listed there please contact us +# Welcome to the home of ScribeJava, the simple OAuth client Java lib! + +[![Donate](https://www.paypalobjects.com/en_US/RU/i/btn/btn_donateCC_LG.gif)](https://github.com/scribejava/scribejava/blob/master/donate.md) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava) + + +# Why use ScribeJava? + +### Dead Simple + +Who said OAuth/OAuth2 was difficult? Configuring ScribeJava is __so easy your grandma can do it__! check it out: + +```java +OAuthService service = new ServiceBuilder(YOUR_CLIENT_ID) + .apiSecret(YOUR_CLIENT_SECRET) + .build(LinkedInApi20.instance()); +``` + +That **single line** (added newlines for readability) is the only thing you need to configure ScribeJava with LinkedIn's OAuth API for example. + +Working executable examples are [here](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) +Common usage: [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) + +### Threadsafe + +Hit ScribeJava as hard and with many threads as you like. + +### Java 7 compatible + +That's it. You can use it in old environments and in android apps. +note: To compile from sources you will need Java 9 or newer + +### Async and other HTTP clients + +ScribeJava support out-of-box several HTTP clients: + * ning async http client 1.9.x (maven module scribejava-httpclient-ning) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) + * Async Http Client asynchttpclient 2.x (maven module scribejava-httpclient-ahc) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java) + * OkHttp (maven module scribejava-httpclient-okhttp) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) + * Apache HttpComponents HttpClient (maven module scribejava-httpclient-apache) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java) + * Armeria HTTP client (required >= java 8) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20ArmeriaExample.java) + * any externally created HTTP client [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) + + just add corresponding maven modules to your pom + +### Supports many flows and additional features + + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Authorization Code Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.1), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Resource Owner Password Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.3) + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Client Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.4), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java) + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Refreshing an Access Token](https://tools.ietf.org/html/rfc6749#section-6), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java#L77) + * [RFC 6750](https://tools.ietf.org/html/rfc6750) The OAuth 2.0 Authorization Framework: Bearer Token Usage + * [RFC 7636](https://tools.ietf.org/html/rfc7636) Proof Key for Code Exchange by OAuth Public Clients (PKCE), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) + * [RFC 7009](https://tools.ietf.org/html/rfc7009) OAuth 2.0 Token Revocation, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java) + * [RFC 8628](https://tools.ietf.org/html/rfc8628) OAuth 2.0 Device Authorization Grant [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20DeviceAuthorizationGrantExample.java) + * [RFC 5849](https://tools.ietf.org/html/rfc5849) The OAuth 1.0 Protocol, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) + +### Supports all (50+) major 1.0a and 2.0 OAuth APIs out-of-the-box + +* Asana (https://asana.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AsanaExample.java) +* Automatic (https://www.automatic.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AutomaticExample.java) +* AWeber (http://www.aweber.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java) +* Box (https://www.box.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java) +* Dataporten (https://docs.dataporten.no/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DataportenExample.java) +* Digg (http://digg.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java) +* Discord (https://discordapp.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiscordExample.java) +* Доктор на работе (https://www.doktornarabote.ru/) +* Dropbox (https://www.dropbox.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DropboxExample.java) +* Etsy (https://www.etsy.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/EtsyExample.java) +* Facebook (https://www.facebook.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java), [example with Async Apache HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java), [example with Async Ning HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) +* Fitbit (https://www.fitbit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FitbitApi20Example.java) +* Flickr (https://www.flickr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java) +* Foursquare (https://foursquare.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java) +* Frappe (https://github.com/frappe/frappe) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FrappeExample.java) +* Freelancer (https://www.freelancer.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java) +* Genius (http://genius.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java) +* GitHub (https://github.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java), [example with OkHttp HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) +* Google (https://www.google.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java), [example with Async Http Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java), [example Revoke](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java), [example with PKCEE](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) +* HeadHunter ХэдХантер (https://hh.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java) +* HiOrg-Server (https://www.hiorg-server.de/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HiOrgServerExample.java) +* Imgur (http://imgur.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java) +* Instagram (https://www.instagram.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/InstagramExample.java) +* Kaixin 开心网 (http://www.kaixin001.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java) +* Kakao (https://kakao.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KakaoExample.java) +* Keycloak (https://www.keycloak.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KeycloakExample.java) +* LinkedIn (https://www.linkedin.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java), [example with custom scopes](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java) +* Mail.Ru (https://mail.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java) +* MediaWiki (https://www.mediawiki.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MediaWikiExample.java) +* Meetup (https://www.meetup.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Meetup20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java) +* Microsoft Azure Active Directory (Azure AD) (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectoryExample.java) +* Microsoft Azure Active Directory (Azure AD) 2.0 (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectory20Example.java) +* Microsoft Live (https://login.live.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java) +* Misfit (http://misfit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java) +* NAVER (http://www.naver.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java) +* Odnoklassniki Одноклассники (http://ok.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java) +* Polar (https://www.polar.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PolarAPIExample.java) +* Pinterest (https://www.pinterest.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java) +* 500px (https://500px.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java) +* Renren (http://renren.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java) +* Salesforce (https://www.salesforce.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java) +* Sina (http://www.sina.com.cn/ http://weibo.com/login.php) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java) +* Skyrock (http://skyrock.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java) +* Slack (https://slack.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SlackExample.java) +* StackExchange (http://stackexchange.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java) +* The Things Network (v1-staging and v2-preview) (https://www.thethingsnetwork.org/) [example v1](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java), [example v2 preview](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java) +* Trello (https://trello.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java) +* Tumblr (https://www.tumblr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java) +* TUT.BY (http://www.tut.by/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java) +* Twitter (https://twitter.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) +* uCoz (https://www.ucoz.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/UcozExample.java) +* Viadeo (http://viadeo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java) +* VK ВКонтакте (http://vk.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java), [example Client Credentials Grant](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java), [example with External HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) +* Wunderlist (https://www.wunderlist.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/WunderlistExample.java) +* Xero (https://www.xero.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XeroExample.java) +* XING (https://www.xing.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java) +* Yahoo (https://www.yahoo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Yahoo20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java) +* check the [examples folder](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) + +### Small and modular + +ScribeJava's code is small (about 1k LOC) and simple to understand. No smart-ass or "clever" hacks here. +You can use only 'core' or 'with apis' maven modules + +### Android-Ready + +Works out of the box with android(TM) applications. + +### Stable & bulletproof + +Good test coverage to keep you safe from harm. + +When something bad actually happens, ScribeJava's meaningful error messages will tell you exactly what went wrong, when and where. + +### Pull it from Maven Central! + +You can pull ScribeJava from the central maven repository, just add these to your __pom.xml__ file: + +```xml + + com.github.scribejava + scribejava-apis + 8.3.3 + +``` + +And in case you need just core classes (that's it, without any external API (FB, VK, GitHub, Google etc) specific code), you could pull just 'core' artifact. +```xml + + com.github.scribejava + scribejava-core + 8.3.3 + +``` + +## How can I help ScribeJava + +First of all, Pull Requests are welcome, the second option is [donations](https://github.com/scribejava/scribejava/blob/master/donate.md). + +## When will ScribeJava support XXX (new RFC, custom functionality, new API etc.) + +When you will send the pull request. That's the way for a majority of changes here. +Or you can ask someone to make the paid job for you. +In some cases, when I'm interested in changes (technically or financially), I can implement the request myself. + +## Paid consulting +If you or your business depends on the Scribejava and you need any specific improvement or new feature not currently implemented in the Scribejava, consider contacting me about a paid job. + +## Getting started in less than 2 minutes + +Check the [Getting Started](https://github.com/scribejava/scribejava/wiki/getting-started) page and start rocking! Please Read the [FAQ](https://github.com/scribejava/scribejava/wiki/faq) before creating an issue :) + +Some useful info and answers you can find on the [wiki](https://github.com/scribejava/scribejava/wiki) + +Also, remember to read the [fantastic tutorial](http://akoskm.github.io/2015/07/31/twitter-sign-in-for-web-apps.html) that [@akoskm](https://twitter.com/akoskm) wrote to easily integrate a server side app with an API (twitter in this case). + +## Questions? + +Feel free to drop us an email or create issue right here on github.com + +## Forks + +If you have a useful fork that should be listed there please contact us diff --git a/changelog b/changelog index f549fb257..e962e073b 100644 --- a/changelog +++ b/changelog @@ -1,341 +1,341 @@ -[8.3.3] - * update dependencies, including security updates in libraries - -[8.3.2] - * minor fixes and enhances - * update dependencies - * while using async HTTP client, you could miss some Throwables, now they will be thrown - -[8.3.1] - * fix java.lang.NoClassDefFoundError for non-java8 runtimes (e.g. Android 7.1.1) - (thanks to https://github.com/ChristopherGittner) - -[8.3.0] - * add Instagram (https://www.instagram.com/) API (thanks to https://github.com/faent) - * add getErrorMessage method to FacebookAccessTokenErrorResponse. Should be used instead of general getMessage method - from the parent Exception - -[8.2.0] - * add ScopeBuilder to easily specify multiple scopes while requesting OAuth2.0 Access Tokens - * make Base64 en/de-coding not dependent from java8 implementation (use three optional implementation - (internal java 8+, Apache Commons Codec, JAXB) detected in runtime) (thanks to https://github.com/CodingFabian) - * implement possibility to add extra parameters to Access Token Request - (AccessTokenRequestParams#*ExtraParameters methods), https://github.com/scribejava/scribejava/issues/980 - (thanks to https://github.com/pmorch) - -[8.1.0] - * add raw Response (with HTTP response code and body) as member to the OAuth2AccessTokenErrorResponse - * add possibility to set "" (empty string) as apiSecret - * add Slack API (https://slack.com/) (thanks to https://github.com/petrkopotev) - -[8.0.0] - * add Kakao API (https://kakao.com/) (thanks to https://github.com/v0o0v) - * support chunks in JDKHttpClient's Multipart (thanks to https://github.com/eos1d3) - * add support for OAuth 2.0 Device Authorization Grant (RFC 8628) (thanks to https://github.com/rebarbora-mckvak) - * update Google API URLs - -[7.1.1] - * add Proxy support (via config's option) to internal JDKHttpClient (thanks to https://github.com/bjournaud) - * fix typo (change "Verfier" to "Verifier") (thanks to https://github.com/afkbrb) - * fix Multipart support in JDKHttpClient (thanks to https://github.com/eos1d3) - -[7.0.0] - * Add Polar API (https://www.polar.com/) (thanks to https://github.com/vidi42) - * make Response accept resources to autoclose and autoclose it (thanks to https://github.com/drei01) - * fix url encoding in POST payload (it's needed for 'application/x-www-form-urlencoded' Content-Type) - + unit tests (thanks to https://github.com/max904-github) - * Add Armeria HTTP client (thanks to https://github.com/max904-github) - -[6.9.0] - * Add Xero API (https://www.xero.com/) (thanks to https://github.com/SidneyAllen) - -[6.8.1] - * make Response implements Closeable (thanks to https://github.com/omaric) - * fix Type resolution for builder pattern in ServiceBuilderOAuth10a (thanks to https://github.com/mgyucht) - * fix no Content-length errors (thanks to https://github.com/mikita-herasiutsin and https://github.com/iankurverma) - -[6.8.0] - * Add debug output to OAuth2Service (thanks to https://github.com/rbarbey) - * Add Dropbox API (https://www.dropbox.com/) (thanks to https://github.com/petrkopotev) - -[6.7.0] - * Add OAuth2 support for Meetup.com (thanks to https://github.com/stevedes77) - * upgrade okhttp to 4.0.1 and security fix for jackson-databind 2.9.9.1 - -[6.6.3] - * fix NPE for OpenId providers - -[6.6.2] - * add PMD checks on compile - * add all OAuth error codes from supported RFCs (incl. "invalid_token") (thanks to https://github.com/echorebel) - * Update LinkedIn Example to API v2 (thanks to https://github.com/peternees) - * switch to jackson dependency to parse json responses (thanks to https://github.com/galimru) - -[6.5.1] - * cleanup deprecates methods - -[6.5.0] - * separate OAuth1.0a and OAuth2.0 ServiceBuilders, - introduce AuthorizationUrlBuilder (along with deprecation of AuthorizationUrlWithPKCE) - add possibility to provide different scopes for each Access Token request - * upgrade Facebook API from v2.11 to v3.2 - * upgrade VkontakteApi from 5.73 to 5.92 - -[6.4.1] - * support TLS 1.3 in JDK 11 for Salesforce - * fix NPE in Apache HTTP client in case of empty body in HTTP response (e.g. with 204 response code) - (thanks to https://github.com/SainagNeelamPatnaik) - * separate OAuth1.0a and OAuth2.0 classes - -[6.3.0] - * fix Muplipart request model and implement it for a jdk HTTP client (thanks to https://github.com/NTPape) - * remove any Google+ mention (switch to clean Google OAuth2) (thanks to https://github.com/fvasco) - * fix Microsoft Azure AD v1.0 and v2.0 (thanks to https://github.com/kenpusney and https://github.com/oscararias) - * add new API Asana (https://asana.com/) (thanks to https://github.com/joestazak) - * state param should be used only for authorization url generation, for v2 only, for Authorization Code Grant only, - and it should be set per request, not per created OAuthService - -[6.2.0] - * add new API Microsoft Azure Active Directory (Azure AD) 2.0 - (thanks to https://github.com/rzukow and https://github.com/dgrudenic) - -[6.1.0] - * add new API Keycloak (https://www.keycloak.org/) (thanks to https://github.com/JureZelic) - * add new API Discord (https://discordapp.com/) (thanks to https://github.com/Jokuni) - -[6.0.0] - * make redirect_uri optional while Access Token requesting on OAuth 2.0 (thanks to https://github.com/computerlove) - * switch to java 9+ (from java 7 only) for compilation. Runtime is still java 7+. - Complement README with links and RFC descriptions. - * switch OAuth2 Bearer Token Usage from enum OAuth2SignatureType to interface BearerSignature to be extensible - * add new API Wunderlist (https://www.wunderlist.com/) (thanks to https://github.com/M-F-K) - -[5.6.0] - * remove support for obsolete NetEase (http://www.163.com/) and sohu 搜狐 (http://www.sohu.com/) - (thanks to https://github.com/zawn) - * add Multipart functionality to JDK Http Client (thanks to https://github.com/eos1d3) - * switch OAuth2 ClientAuthenticationType from enum to interface ClientAuthentication to be extensible according to - https://tools.ietf.org/html/rfc6749#section-2.3.2 (thanks to https://github.com/zawn) - * add RuntimeException processing in async http clients (delivered to onError callbacks) - (thanks to https://github.com/jochen314) - * check 200 status code from response in OAuth2AccessTokenExtractor (thanks to https://github.com/jochen314) - * fix case sensitive Http Headers comparison and sending Content-Type header along with content-type - (thanks to https://github.com/marnix) - * add HiOrg-Server (https://www.hiorg-server.de/) API (thanks to https://github.com/MartinBoehmer) - -[5.5.0] - * fix error parsing for Fitbit (thanks to https://github.com/danmana) - * optimize debug log performance impact on prod in OAuth1 and fix - NoClassDefFoundError on Android device with SDK 18 and lower (thanks to https://github.com/arcao) - * add new API - MediaWiki (https://www.mediawiki.org/) (thanks to https://github.com/lucaswerkmeister) - -[5.4.0] - * fix missing support for scope for refresh_token grant_type (thanks to https://github.com/tlxtellef) - * add email field to VKOAuth2AccessToken (thanks to https://github.com/grouzen) - * add new API - Automatic (https://www.automatic.com/) (thanks to https://github.com/ramsrib) - * add new API - Fitbit (https://www.fitbit.com/) - (thanks to https://github.com/JustinLawler and https://github.com/alexthered) - * deprecate OAuthConfig - * OAuth1.0: send "oob" instead of null callback while requesting RequestToken (thanks to https://github.com/Rafaelsk) - -[5.3.0] - * fix Salesforce API (thanks to https://github.com/jhorowitz-firedrum) - * remove 'final' from methods in OAuth[10a|20]Service to allow mocking it - * fix Pinterest API (thanks to https://github.com/sschwieb) - * add Yahoo2 API (thanks to https://github.com/javatestcase) - * fix Tumblr urls, convert to https (thanks to https://github.com/highthunder) - * fix: allow spaces in scope param in OAuth2Accesstoken response - * add required param version to VK ВКонтакте (http://vk.com/) urls - -[5.2.0-java7again] - * allow 'null' as callback. It's an optional parameter. Remove "oob" as default - (thanks to https://github.com/massongit) - * java7 compatible again! - -[5.1.0] - * drop optional dependency on Apache commons-codec - * add API - Dataporten (https://docs.dataporten.no/) (thanks to https://github.com/xibriz) - * add API - Microsoft Azure Active Directory (Azure AD) (thanks to https://github.com/kaushalmall) - * fix LinkedInApi20 (thanks to https://github.com/jhorowitz-firedrum) - -[5.0.0] - * drop Java 7 backward compatibility support, become Java 8 only (was reverted in v5.2.0-java7again) - * add JSON token extractor for OAuth 1.0a (thanks to https://github.com/evstropovv) - * add new API - uCoz (https://www.ucoz.com/) (thanks to https://github.com/evstropovv) - * add PKCE (RFC 7636) support (Proof Key for Code Exchange by OAuth Public Clients) - (thanks for suggesting to https://github.com/dieseldjango) - * switch to use HTTP Basic Authorization by default in requests with need of - (2.3. Client Authentication) https://tools.ietf.org/html/rfc6749#section-2.3 Can be overrided in API class - * add support for client_credentials grant type (thanks to https://github.com/vivin) - * add support for RFC 7009 OAuth 2.0 Token Revocation (thanks to https://github.com/vivin) - * add OAuth2Service signRequest method accepting just String, not OAuth2 Access Token Object. - Remove signRequest from abstract OAuthService. 2.0 and 1.0a will be a bit more different now. - * drop toString method from *Tokens to prevent leak of sensible data (token ans secrets) - (thanks to https://github.com/rcaa) - * add Apache HttpComponents HttpClient support in separate module (thanks to https://github.com/sschwieb) - * add support for appsecret_proof in Facebook - * update Facebook v2.8 -> v2.11 - (version can be configured while constructing OAuthService - use FacebookApi.customVersion("2.11")) - -[4.2.0] - * DELETE in JdkClient permits, but not requires payload (thanks to https://github.com/miguelD73) - * add new API - Frappe (https://github.com/frappe/frappe) (thanks to https://github.com/revant) - * add new API - Etsy (https://www.etsy.com/) (thanks to https://github.com/efekocabas) - -[4.1.2] - * LinkedIn use Header to sign OAuth2 requests - * upgrade ServiceBuilder to check apiKey preconditions compile-time (not run-time) - * update Live API (thanks to https://github.com/typhoon17) - -[4.1.1] - * omit the client_secret parameter if it is an empty string while refreshing token - (thanks to https://github.com/KungfuPancake) - * allow perms to be specified in Flickr Api (read, write, or delete) (thanks to https://github.com/rogerhu) - * OdnoklassnikiService should consider params in a body while signing the request - (thanks to https://github.com/MrNeuronix) - * do not open OutputStream for output while sending empty body in HTTP requests in the default JDK Http client - -[4.1.0] - * make client_secret optional in OAuth2 while requesting AccessToken - (if set to null, it's not required by OAuth2 specs) - * move OAuth1 SignatureType from ServiceBuilder to API - * add body for PATCH HTTP method - * make addOAuthParams appendSignature methods protected in OAuth10aService (to override them in case of need) - (thanks to https://github.com/vivin) - -[4.0.0] - * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. - Move default Http engine to JDKHttpClient. - * introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests - * switch Google, GitHub, Facebook OAuth2.0 oauth requests signing to more secured recommended variant - (GET-param -> header Bearer) - * introduce custom nonstandard Facebook AccessTokenErrorResponse - -[3.4.1] - * Drop deprecated methods - * Move doktornarabote.ru urls to https (thanks to https://github.com/ezibrov) - -[3.4.0] - * uncouple OAuthRequest and Service. OAuthRequest shouldn't know anything about OAuthservice. - You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. - * add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) - * add support for HTTP verbs (thanks to https://github.com/keijohyttinen) - * add OkHttp http client support (thanks to https://github.com/arcao) - * add default HTTP client configs - (to use like 'new ServiceBuilder().httpClientConfig(OkHttpHttpClientConfig.defaultConfig())') - * you can use your own impl of AsyncHttpClient - -[3.3.0] - * update Facebook v2.6 -> v2.8 - * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) - * add Box (thanks to https://github.com/MclaughlinSteve) - * fix: OAuth20Service::refreshAccessToken should use RefreshTokenEndpoint, not AccessTokenEndpoint - (thanks to https://github.com/vivin) - * move signRequest method to OAuthService (common for OAuth1 and OAuth2) (thanks to https://github.com/apomelov) - * drop deprecated setConnectionKeepAlive method - -[3.2.0] - * Add Naver API (thanks to chooco) - * handle OAuth2 error response for Issuing an Access Token (thanks to juherr) - -[3.1.0] - * fix OdnoklassnikiServiceImpl signature, params for hash must be sorted in lexicographic order, - see http://new.apiok.ru/dev/methods/ - * add posibility to use externally created http client - * make ScribeJava compilable under jdk7 (checkstyle downgraded for jdk 1.7) - * add travis CI (check [oracle|open]jdk7 oraclejdk8) - -[3.0.0] - * create abstract HTTP Client layer to support different HTTP clients as plugins - (AHC and Ning support becames maven submodules) - * remove changing global JVM property http.keepAlive, deprecate controlling this property inside of ScribeJava - (thanks to wldaunfr and rockihack) - -[2.8.1] - * add Salesforce sandbox API support - -[2.8.0] - * add Salesforce API - * update Linked In API - -[2.7.3] - * FIX: ScribeJava shouldn't require all async http client provider to be on the classpath if using only one of them - -[2.7.2] - * FIX: ScribeJava shouldn't require any async http client provider to be on the classpath (neither ning neither AHC) - -[2.7.1] - * do not hide checked IOException in unchecked IllegalArgumentException - -[2.7.0] - * make http async client implementation be more pluggable - * add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) - * add Misfit (http://misfit.com/) API - * implement async version getting Request Token for OAuth 1.0a - -[2.6.0] - * simplify async/sync usages - * add optional "User-Agent" config option to use while making http calls - * refactor usage of grant_type [authorization_code|refresh_token|password|etc] - * add Genius.com API authentication (OAuth2) - * fix GitHub API - * standardize authorization url generation for OAuth2 - * update Facebook to v2.6 - * cleanup: drop old APIs without Examples and with outdated domains - -[2.5.3] - * fix - do not send two Content-Type header in async requests - * improve OK example - -[2.5.2] - * add Google Async Exmaple (with bugfix for it to work) - * add OSGI manifest metadata - * apiSecret is not mandatory parameter in config - (to use on client sides and other flows without need of the API secret) - * implement OAuth2 Authorization Response parsing in the OAuth20Service - (to extract code and state from url, useful for Android) - * update ok.ru API urls, add 'state' support, add refresh token to the example - -[2.4.0] - * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) - * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException - * make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) - * drop Google OAuth 1.0 support (OAuth 1.0 was officially deprecated by Google) - * add response_type parameter to the ServiceBuilder/OAuthConfig to use not only "code" for authorization code - * remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1 - * default HTTP verb for OAuth 2.0 Access Token EndPoint is POST (http://tools.ietf.org/html/rfc6749#section-3.2) - * send missed headers in async version (as in sync) - * support 'password' grant_type for OAuth 2.0 - -[2.3.0] - * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). - * Support response in gzip. - * differentiate OAuth1 Access token, OAuth 1 Request Token and OAuth 2 Access token, make them conforms RFCs - * OAuth 1 APIs can choose whether to pass empty oauth_token param in requests - * Support refresh tokens for OAuth2 (very thanks to P. Daniel Tyreus https://github.com/pdtyreus) - -[2.2.2] - * make all APIs to be extentable (have protected constructors, useful for testing) - -[2.2.1] - * Update Facebook API v2.2 -> v2.5 - * Update hh.ru urls - -[2.2.0] - * Let GoogleApi20 supports OOB - * Updated Imgur API to OAuth2 - * force not to instantiate stateless APIs. Use provided singletons - * reduce OAuthService abstraction for OAuth1 and OAuth2. Separate OAuth(1|2)Services - -[2.1.0] - * add Pinterest API - -[2.0.1] - * small code enhancements - -[2.0] - * merge back SubScribe fork to the ScribeJava - -for previous changes see -v1-changelog - changelog for 1.x version -v2pre-changelog - changelog for SubScribe fork +[8.3.3] + * update dependencies, including security updates in libraries + +[8.3.2] + * minor fixes and enhances + * update dependencies + * while using async HTTP client, you could miss some Throwables, now they will be thrown + +[8.3.1] + * fix java.lang.NoClassDefFoundError for non-java8 runtimes (e.g. Android 7.1.1) + (thanks to https://github.com/ChristopherGittner) + +[8.3.0] + * add Instagram (https://www.instagram.com/) API (thanks to https://github.com/faent) + * add getErrorMessage method to FacebookAccessTokenErrorResponse. Should be used instead of general getMessage method + from the parent Exception + +[8.2.0] + * add ScopeBuilder to easily specify multiple scopes while requesting OAuth2.0 Access Tokens + * make Base64 en/de-coding not dependent from java8 implementation (use three optional implementation + (internal java 8+, Apache Commons Codec, JAXB) detected in runtime) (thanks to https://github.com/CodingFabian) + * implement possibility to add extra parameters to Access Token Request + (AccessTokenRequestParams#*ExtraParameters methods), https://github.com/scribejava/scribejava/issues/980 + (thanks to https://github.com/pmorch) + +[8.1.0] + * add raw Response (with HTTP response code and body) as member to the OAuth2AccessTokenErrorResponse + * add possibility to set "" (empty string) as apiSecret + * add Slack API (https://slack.com/) (thanks to https://github.com/petrkopotev) + +[8.0.0] + * add Kakao API (https://kakao.com/) (thanks to https://github.com/v0o0v) + * support chunks in JDKHttpClient's Multipart (thanks to https://github.com/eos1d3) + * add support for OAuth 2.0 Device Authorization Grant (RFC 8628) (thanks to https://github.com/rebarbora-mckvak) + * update Google API URLs + +[7.1.1] + * add Proxy support (via config's option) to internal JDKHttpClient (thanks to https://github.com/bjournaud) + * fix typo (change "Verfier" to "Verifier") (thanks to https://github.com/afkbrb) + * fix Multipart support in JDKHttpClient (thanks to https://github.com/eos1d3) + +[7.0.0] + * Add Polar API (https://www.polar.com/) (thanks to https://github.com/vidi42) + * make Response accept resources to autoclose and autoclose it (thanks to https://github.com/drei01) + * fix url encoding in POST payload (it's needed for 'application/x-www-form-urlencoded' Content-Type) + + unit tests (thanks to https://github.com/max904-github) + * Add Armeria HTTP client (thanks to https://github.com/max904-github) + +[6.9.0] + * Add Xero API (https://www.xero.com/) (thanks to https://github.com/SidneyAllen) + +[6.8.1] + * make Response implements Closeable (thanks to https://github.com/omaric) + * fix Type resolution for builder pattern in ServiceBuilderOAuth10a (thanks to https://github.com/mgyucht) + * fix no Content-length errors (thanks to https://github.com/mikita-herasiutsin and https://github.com/iankurverma) + +[6.8.0] + * Add debug output to OAuth2Service (thanks to https://github.com/rbarbey) + * Add Dropbox API (https://www.dropbox.com/) (thanks to https://github.com/petrkopotev) + +[6.7.0] + * Add OAuth2 support for Meetup.com (thanks to https://github.com/stevedes77) + * upgrade okhttp to 4.0.1 and security fix for jackson-databind 2.9.9.1 + +[6.6.3] + * fix NPE for OpenId providers + +[6.6.2] + * add PMD checks on compile + * add all OAuth error codes from supported RFCs (incl. "invalid_token") (thanks to https://github.com/echorebel) + * Update LinkedIn Example to API v2 (thanks to https://github.com/peternees) + * switch to jackson dependency to parse json responses (thanks to https://github.com/galimru) + +[6.5.1] + * cleanup deprecates methods + +[6.5.0] + * separate OAuth1.0a and OAuth2.0 ServiceBuilders, + introduce AuthorizationUrlBuilder (along with deprecation of AuthorizationUrlWithPKCE) + add possibility to provide different scopes for each Access Token request + * upgrade Facebook API from v2.11 to v3.2 + * upgrade VkontakteApi from 5.73 to 5.92 + +[6.4.1] + * support TLS 1.3 in JDK 11 for Salesforce + * fix NPE in Apache HTTP client in case of empty body in HTTP response (e.g. with 204 response code) + (thanks to https://github.com/SainagNeelamPatnaik) + * separate OAuth1.0a and OAuth2.0 classes + +[6.3.0] + * fix Muplipart request model and implement it for a jdk HTTP client (thanks to https://github.com/NTPape) + * remove any Google+ mention (switch to clean Google OAuth2) (thanks to https://github.com/fvasco) + * fix Microsoft Azure AD v1.0 and v2.0 (thanks to https://github.com/kenpusney and https://github.com/oscararias) + * add new API Asana (https://asana.com/) (thanks to https://github.com/joestazak) + * state param should be used only for authorization url generation, for v2 only, for Authorization Code Grant only, + and it should be set per request, not per created OAuthService + +[6.2.0] + * add new API Microsoft Azure Active Directory (Azure AD) 2.0 + (thanks to https://github.com/rzukow and https://github.com/dgrudenic) + +[6.1.0] + * add new API Keycloak (https://www.keycloak.org/) (thanks to https://github.com/JureZelic) + * add new API Discord (https://discordapp.com/) (thanks to https://github.com/Jokuni) + +[6.0.0] + * make redirect_uri optional while Access Token requesting on OAuth 2.0 (thanks to https://github.com/computerlove) + * switch to java 9+ (from java 7 only) for compilation. Runtime is still java 7+. + Complement README with links and RFC descriptions. + * switch OAuth2 Bearer Token Usage from enum OAuth2SignatureType to interface BearerSignature to be extensible + * add new API Wunderlist (https://www.wunderlist.com/) (thanks to https://github.com/M-F-K) + +[5.6.0] + * remove support for obsolete NetEase (http://www.163.com/) and sohu 搜狐 (http://www.sohu.com/) + (thanks to https://github.com/zawn) + * add Multipart functionality to JDK Http Client (thanks to https://github.com/eos1d3) + * switch OAuth2 ClientAuthenticationType from enum to interface ClientAuthentication to be extensible according to + https://tools.ietf.org/html/rfc6749#section-2.3.2 (thanks to https://github.com/zawn) + * add RuntimeException processing in async http clients (delivered to onError callbacks) + (thanks to https://github.com/jochen314) + * check 200 status code from response in OAuth2AccessTokenExtractor (thanks to https://github.com/jochen314) + * fix case sensitive Http Headers comparison and sending Content-Type header along with content-type + (thanks to https://github.com/marnix) + * add HiOrg-Server (https://www.hiorg-server.de/) API (thanks to https://github.com/MartinBoehmer) + +[5.5.0] + * fix error parsing for Fitbit (thanks to https://github.com/danmana) + * optimize debug log performance impact on prod in OAuth1 and fix + NoClassDefFoundError on Android device with SDK 18 and lower (thanks to https://github.com/arcao) + * add new API - MediaWiki (https://www.mediawiki.org/) (thanks to https://github.com/lucaswerkmeister) + +[5.4.0] + * fix missing support for scope for refresh_token grant_type (thanks to https://github.com/tlxtellef) + * add email field to VKOAuth2AccessToken (thanks to https://github.com/grouzen) + * add new API - Automatic (https://www.automatic.com/) (thanks to https://github.com/ramsrib) + * add new API - Fitbit (https://www.fitbit.com/) + (thanks to https://github.com/JustinLawler and https://github.com/alexthered) + * deprecate OAuthConfig + * OAuth1.0: send "oob" instead of null callback while requesting RequestToken (thanks to https://github.com/Rafaelsk) + +[5.3.0] + * fix Salesforce API (thanks to https://github.com/jhorowitz-firedrum) + * remove 'final' from methods in OAuth[10a|20]Service to allow mocking it + * fix Pinterest API (thanks to https://github.com/sschwieb) + * add Yahoo2 API (thanks to https://github.com/javatestcase) + * fix Tumblr urls, convert to https (thanks to https://github.com/highthunder) + * fix: allow spaces in scope param in OAuth2Accesstoken response + * add required param version to VK ВКонтакте (http://vk.com/) urls + +[5.2.0-java7again] + * allow 'null' as callback. It's an optional parameter. Remove "oob" as default + (thanks to https://github.com/massongit) + * java7 compatible again! + +[5.1.0] + * drop optional dependency on Apache commons-codec + * add API - Dataporten (https://docs.dataporten.no/) (thanks to https://github.com/xibriz) + * add API - Microsoft Azure Active Directory (Azure AD) (thanks to https://github.com/kaushalmall) + * fix LinkedInApi20 (thanks to https://github.com/jhorowitz-firedrum) + +[5.0.0] + * drop Java 7 backward compatibility support, become Java 8 only (was reverted in v5.2.0-java7again) + * add JSON token extractor for OAuth 1.0a (thanks to https://github.com/evstropovv) + * add new API - uCoz (https://www.ucoz.com/) (thanks to https://github.com/evstropovv) + * add PKCE (RFC 7636) support (Proof Key for Code Exchange by OAuth Public Clients) + (thanks for suggesting to https://github.com/dieseldjango) + * switch to use HTTP Basic Authorization by default in requests with need of + (2.3. Client Authentication) https://tools.ietf.org/html/rfc6749#section-2.3 Can be overrided in API class + * add support for client_credentials grant type (thanks to https://github.com/vivin) + * add support for RFC 7009 OAuth 2.0 Token Revocation (thanks to https://github.com/vivin) + * add OAuth2Service signRequest method accepting just String, not OAuth2 Access Token Object. + Remove signRequest from abstract OAuthService. 2.0 and 1.0a will be a bit more different now. + * drop toString method from *Tokens to prevent leak of sensible data (token ans secrets) + (thanks to https://github.com/rcaa) + * add Apache HttpComponents HttpClient support in separate module (thanks to https://github.com/sschwieb) + * add support for appsecret_proof in Facebook + * update Facebook v2.8 -> v2.11 + (version can be configured while constructing OAuthService - use FacebookApi.customVersion("2.11")) + +[4.2.0] + * DELETE in JdkClient permits, but not requires payload (thanks to https://github.com/miguelD73) + * add new API - Frappe (https://github.com/frappe/frappe) (thanks to https://github.com/revant) + * add new API - Etsy (https://www.etsy.com/) (thanks to https://github.com/efekocabas) + +[4.1.2] + * LinkedIn use Header to sign OAuth2 requests + * upgrade ServiceBuilder to check apiKey preconditions compile-time (not run-time) + * update Live API (thanks to https://github.com/typhoon17) + +[4.1.1] + * omit the client_secret parameter if it is an empty string while refreshing token + (thanks to https://github.com/KungfuPancake) + * allow perms to be specified in Flickr Api (read, write, or delete) (thanks to https://github.com/rogerhu) + * OdnoklassnikiService should consider params in a body while signing the request + (thanks to https://github.com/MrNeuronix) + * do not open OutputStream for output while sending empty body in HTTP requests in the default JDK Http client + +[4.1.0] + * make client_secret optional in OAuth2 while requesting AccessToken + (if set to null, it's not required by OAuth2 specs) + * move OAuth1 SignatureType from ServiceBuilder to API + * add body for PATCH HTTP method + * make addOAuthParams appendSignature methods protected in OAuth10aService (to override them in case of need) + (thanks to https://github.com/vivin) + +[4.0.0] + * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. + Move default Http engine to JDKHttpClient. + * introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests + * switch Google, GitHub, Facebook OAuth2.0 oauth requests signing to more secured recommended variant + (GET-param -> header Bearer) + * introduce custom nonstandard Facebook AccessTokenErrorResponse + +[3.4.1] + * Drop deprecated methods + * Move doktornarabote.ru urls to https (thanks to https://github.com/ezibrov) + +[3.4.0] + * uncouple OAuthRequest and Service. OAuthRequest shouldn't know anything about OAuthservice. + You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. + * add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) + * add support for HTTP verbs (thanks to https://github.com/keijohyttinen) + * add OkHttp http client support (thanks to https://github.com/arcao) + * add default HTTP client configs + (to use like 'new ServiceBuilder().httpClientConfig(OkHttpHttpClientConfig.defaultConfig())') + * you can use your own impl of AsyncHttpClient + +[3.3.0] + * update Facebook v2.6 -> v2.8 + * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) + * add Box (thanks to https://github.com/MclaughlinSteve) + * fix: OAuth20Service::refreshAccessToken should use RefreshTokenEndpoint, not AccessTokenEndpoint + (thanks to https://github.com/vivin) + * move signRequest method to OAuthService (common for OAuth1 and OAuth2) (thanks to https://github.com/apomelov) + * drop deprecated setConnectionKeepAlive method + +[3.2.0] + * Add Naver API (thanks to chooco) + * handle OAuth2 error response for Issuing an Access Token (thanks to juherr) + +[3.1.0] + * fix OdnoklassnikiServiceImpl signature, params for hash must be sorted in lexicographic order, + see http://new.apiok.ru/dev/methods/ + * add posibility to use externally created http client + * make ScribeJava compilable under jdk7 (checkstyle downgraded for jdk 1.7) + * add travis CI (check [oracle|open]jdk7 oraclejdk8) + +[3.0.0] + * create abstract HTTP Client layer to support different HTTP clients as plugins + (AHC and Ning support becames maven submodules) + * remove changing global JVM property http.keepAlive, deprecate controlling this property inside of ScribeJava + (thanks to wldaunfr and rockihack) + +[2.8.1] + * add Salesforce sandbox API support + +[2.8.0] + * add Salesforce API + * update Linked In API + +[2.7.3] + * FIX: ScribeJava shouldn't require all async http client provider to be on the classpath if using only one of them + +[2.7.2] + * FIX: ScribeJava shouldn't require any async http client provider to be on the classpath (neither ning neither AHC) + +[2.7.1] + * do not hide checked IOException in unchecked IllegalArgumentException + +[2.7.0] + * make http async client implementation be more pluggable + * add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) + * add Misfit (http://misfit.com/) API + * implement async version getting Request Token for OAuth 1.0a + +[2.6.0] + * simplify async/sync usages + * add optional "User-Agent" config option to use while making http calls + * refactor usage of grant_type [authorization_code|refresh_token|password|etc] + * add Genius.com API authentication (OAuth2) + * fix GitHub API + * standardize authorization url generation for OAuth2 + * update Facebook to v2.6 + * cleanup: drop old APIs without Examples and with outdated domains + +[2.5.3] + * fix - do not send two Content-Type header in async requests + * improve OK example + +[2.5.2] + * add Google Async Exmaple (with bugfix for it to work) + * add OSGI manifest metadata + * apiSecret is not mandatory parameter in config + (to use on client sides and other flows without need of the API secret) + * implement OAuth2 Authorization Response parsing in the OAuth20Service + (to extract code and state from url, useful for Android) + * update ok.ru API urls, add 'state' support, add refresh token to the example + +[2.4.0] + * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) + * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException + * make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) + * drop Google OAuth 1.0 support (OAuth 1.0 was officially deprecated by Google) + * add response_type parameter to the ServiceBuilder/OAuthConfig to use not only "code" for authorization code + * remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1 + * default HTTP verb for OAuth 2.0 Access Token EndPoint is POST (http://tools.ietf.org/html/rfc6749#section-3.2) + * send missed headers in async version (as in sync) + * support 'password' grant_type for OAuth 2.0 + +[2.3.0] + * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). + * Support response in gzip. + * differentiate OAuth1 Access token, OAuth 1 Request Token and OAuth 2 Access token, make them conforms RFCs + * OAuth 1 APIs can choose whether to pass empty oauth_token param in requests + * Support refresh tokens for OAuth2 (very thanks to P. Daniel Tyreus https://github.com/pdtyreus) + +[2.2.2] + * make all APIs to be extentable (have protected constructors, useful for testing) + +[2.2.1] + * Update Facebook API v2.2 -> v2.5 + * Update hh.ru urls + +[2.2.0] + * Let GoogleApi20 supports OOB + * Updated Imgur API to OAuth2 + * force not to instantiate stateless APIs. Use provided singletons + * reduce OAuthService abstraction for OAuth1 and OAuth2. Separate OAuth(1|2)Services + +[2.1.0] + * add Pinterest API + +[2.0.1] + * small code enhancements + +[2.0] + * merge back SubScribe fork to the ScribeJava + +for previous changes see +v1-changelog - changelog for 1.x version +v2pre-changelog - changelog for SubScribe fork diff --git a/checkstyle.xml b/checkstyle.xml index b7e66b023..f7efbad65 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -1,124 +1,124 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/donate.md b/donate.md index cfe015de7..99d3686dc 100644 --- a/donate.md +++ b/donate.md @@ -1,12 +1,12 @@ -You can now help ScribeJava not only by Pull Requests. - -You can use [https://www.paypal.com/paypalme/algr453](https://www.paypal.com/paypalme/algr453) directly. - -Thanks in advance! - -ps.If you can't for any reason use above method, let me know, we will find the way out. - -Hall of fame "Donors" (in alphabetical order, if you don't want to be here, just put a note along with the donation):
-1.Douglas Ross from USA
-2.Ian Strachan
-3.Your name can be here. +You can now help ScribeJava not only by Pull Requests. + +You can use [https://www.paypal.com/paypalme/algr453](https://www.paypal.com/paypalme/algr453) directly. + +Thanks in advance! + +ps.If you can't for any reason use above method, let me know, we will find the way out. + +Hall of fame "Donors" (in alphabetical order, if you don't want to be here, just put a note along with the donation):
+1.Douglas Ross from USA
+2.Ian Strachan
+3.Your name can be here. diff --git a/pmd.xml b/pmd.xml index 371a06018..5d93d340b 100644 --- a/pmd.xml +++ b/pmd.xml @@ -1,124 +1,124 @@ - - - - - This ruleset defines the PMD rules for project "ScribeJava". - - - - - - - true - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + This ruleset defines the PMD rules for project "ScribeJava". + + + + + + + true + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 65c239029..bc2f98930 100644 --- a/pom.xml +++ b/pom.xml @@ -1,368 +1,368 @@ - - 4.0.0 - com.github.scribejava - scribejava - pom - 8.3.4-SNAPSHOT - ScribeJava OAuth Library - The best OAuth library out there - https://github.com/scribejava/scribejava - - - org.sonatype.oss - oss-parent - 9 - - - - scribejava-core - scribejava-java8 - scribejava-apis - scribejava-httpclient-ahc - scribejava-httpclient-ning - scribejava-httpclient-okhttp - scribejava-httpclient-apache - scribejava-httpclient-armeria - - - - - MIT - https://github.com/scribejava/scribejava/blob/master/LICENSE.txt - - - - - scm:git:https://github.com/scribejava/scribejava - scm:git:https://github.com/scribejava/scribejava - https://github.com/scribejava/scribejava - HEAD - - - - - kullfar - Stanislav Gromov - kullfar@gmail.com - - all - - +3 - - - - - - com.fasterxml.jackson.core - jackson-databind - 2.14.0 - - - junit - junit - 4.13.2 - test - - - com.github.scribejava - scribejava-apis - 8.3.3 - - - com.squareup.okhttp3 - mockwebserver - 4.10.0 - test - - - - - - - org.apache.felix - maven-bundle-plugin - 5.1.8 - - - bundle-manifest - process-classes - - manifest - - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - default-prepare-agent - - prepare-agent - - - - default-report - - report - - - - default-check - - check - - - - - BUNDLE - - - COMPLEXITY - COVEREDRATIO - 0.60 - - - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.3.0 - - - ${project.build.outputDirectory}/META-INF/MANIFEST.MF - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.2.0 - - - com.puppycrawl.tools - checkstyle - 10.4 - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - true - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.22.2 - - - org.apache.maven.plugins - maven-clean-plugin - 3.2.0 - - - org.apache.maven.plugins - maven-install-plugin - 3.0.1 - - - - - - maven-compiler-plugin - 3.10.1 - - UTF-8 - ${java.release} - true - - -Xlint:-options - - - - - maven-deploy-plugin - 3.0.0 - - - default-deploy - deploy - - deploy - - - - - - org.apache.maven.plugins - maven-resources-plugin - 3.3.0 - - UTF-8 - - - - org.apache.maven.plugins - maven-source-plugin - 3.2.1 - - - attach-sources - - jar - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.4.1 - - ${java.home}/bin/javadoc - UTF-8 - -html5 - all,-missing - - - - attach-javadoc - - jar - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - validate - validate - - - ${basedir}/src - - checkstyle.xml - UTF-8 - true - - - check - - - - - - org.apache.maven.plugins - maven-pmd-plugin - 3.19.0 - - - net.sourceforge.pmd - pmd-core - ${pmdVersion} - - - net.sourceforge.pmd - pmd-java - ${pmdVersion} - - - net.sourceforge.pmd - pmd-javascript - ${pmdVersion} - - - net.sourceforge.pmd - pmd-jsp - ${pmdVersion} - - - - 1.${java.release} - false - - ../pmd.xml - - true - true - true - - - - - check - - - - - - - - - 7 - 6.51.0 - - - - - release-sign-artifacts - - - performRelease - true - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 3.0.1 - - - sign-artifacts - verify - - sign - - - - - - - - - + + 4.0.0 + com.github.scribejava + scribejava + pom + 8.3.4-SNAPSHOT + ScribeJava OAuth Library + The best OAuth library out there + https://github.com/scribejava/scribejava + + + org.sonatype.oss + oss-parent + 9 + + + + scribejava-core + scribejava-java8 + scribejava-apis + scribejava-httpclient-ahc + scribejava-httpclient-ning + scribejava-httpclient-okhttp + scribejava-httpclient-apache + scribejava-httpclient-armeria + + + + + MIT + https://github.com/scribejava/scribejava/blob/master/LICENSE.txt + + + + + scm:git:https://github.com/scribejava/scribejava + scm:git:https://github.com/scribejava/scribejava + https://github.com/scribejava/scribejava + HEAD + + + + + kullfar + Stanislav Gromov + kullfar@gmail.com + + all + + +3 + + + + + + com.fasterxml.jackson.core + jackson-databind + 2.14.0 + + + junit + junit + 4.13.2 + test + + + com.github.scribejava + scribejava-apis + 8.3.3 + + + com.squareup.okhttp3 + mockwebserver + 4.10.0 + test + + + + + + + org.apache.felix + maven-bundle-plugin + 5.1.8 + + + bundle-manifest + process-classes + + manifest + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + default-prepare-agent + + prepare-agent + + + + default-report + + report + + + + default-check + + check + + + + + BUNDLE + + + COMPLEXITY + COVEREDRATIO + 0.60 + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.2.0 + + + com.puppycrawl.tools + checkstyle + 10.4 + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + true + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + + org.apache.maven.plugins + maven-clean-plugin + 3.2.0 + + + org.apache.maven.plugins + maven-install-plugin + 3.0.1 + + + + + + maven-compiler-plugin + 3.10.1 + + UTF-8 + ${java.release} + true + + -Xlint:-options + + + + + maven-deploy-plugin + 3.0.0 + + + default-deploy + deploy + + deploy + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.3.0 + + UTF-8 + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.4.1 + + ${java.home}/bin/javadoc + UTF-8 + -html5 + all,-missing + + + + attach-javadoc + + jar + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + validate + validate + + + ${basedir}/src + + checkstyle.xml + UTF-8 + true + + + check + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.19.0 + + + net.sourceforge.pmd + pmd-core + ${pmdVersion} + + + net.sourceforge.pmd + pmd-java + ${pmdVersion} + + + net.sourceforge.pmd + pmd-javascript + ${pmdVersion} + + + net.sourceforge.pmd + pmd-jsp + ${pmdVersion} + + + + 1.${java.release} + false + + ../pmd.xml + + true + true + true + + + + + check + + + + + + + + + 7 + 6.51.0 + + + + + release-sign-artifacts + + + performRelease + true + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.0.1 + + + sign-artifacts + verify + + sign + + + + + + + + + diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index deed91a5d..4e51bb8b5 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -1,73 +1,73 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-apis - ScribeJava APIs - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - com.github.scribejava - scribejava-httpclient-ahc - ${project.version} - test - - - com.github.scribejava - scribejava-httpclient-ning - ${project.version} - test - - - com.github.scribejava - scribejava-httpclient-okhttp - ${project.version} - test - - - com.github.scribejava - scribejava-httpclient-apache - ${project.version} - test - - - com.github.scribejava - scribejava-httpclient-armeria - ${project.version} - test - - - io.netty - netty-resolver - 4.1.84.Final - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-apis + ScribeJava APIs + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + com.github.scribejava + scribejava-httpclient-ahc + ${project.version} + test + + + com.github.scribejava + scribejava-httpclient-ning + ${project.version} + test + + + com.github.scribejava + scribejava-httpclient-okhttp + ${project.version} + test + + + com.github.scribejava + scribejava-httpclient-apache + ${project.version} + test + + + com.github.scribejava + scribejava-httpclient-armeria + ${project.version} + test + + + io.netty + netty-resolver + 4.1.84.Final + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index e0b019d6f..d5fbfc488 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -1,62 +1,62 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-core - ScribeJava Core - jar - - - - com.github.scribejava - scribejava-java8 - ${project.version} - - - commons-codec - commons-codec - 1.15 - true - - - jakarta.xml.bind - jakarta.xml.bind-api - 4.0.0 - true - - - javax.xml.bind - jaxb-api - 2.3.0 - true - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-core + ScribeJava Core + jar + + + + com.github.scribejava + scribejava-java8 + ${project.version} + + + commons-codec + commons-codec + 1.15 + true + + + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.0 + true + + + javax.xml.bind + jaxb-api + 2.3.0 + true + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + + diff --git a/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 1090de3ad..7df053c24 100644 --- a/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1,2 +1,2 @@ -com.github.scribejava.core.httpclient.jdk.JDKHttpProvider - +com.github.scribejava.core.httpclient.jdk.JDKHttpProvider + diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 2d19b10e8..fabd225c3 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -1,55 +1,55 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-ahc - ScribeJava Async Http Http Client support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - org.slf4j - slf4j-simple - 2.0.3 - test - - - org.asynchttpclient - async-http-client - 2.12.3 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-ahc + ScribeJava Async Http Http Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + org.slf4j + slf4j-simple + 2.0.3 + test + + + org.asynchttpclient + async-http-client + 2.12.3 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index a8c1950b3..bbe752ff6 100644 --- a/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.ahc.AhcProvider +com.github.scribejava.httpclient.ahc.AhcProvider diff --git a/scribejava-httpclient-apache/pom.xml b/scribejava-httpclient-apache/pom.xml index 446665b15..1dc9dd53c 100644 --- a/scribejava-httpclient-apache/pom.xml +++ b/scribejava-httpclient-apache/pom.xml @@ -1,54 +1,54 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-apache - ScribeJava Apache HttpComponents HttpClient support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - org.apache.httpcomponents - httpclient - 4.5.13 - - - org.apache.httpcomponents - httpasyncclient - 4.1.5 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-apache + ScribeJava Apache HttpComponents HttpClient support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + org.apache.httpcomponents + httpasyncclient + 4.1.5 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-apache/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-apache/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 165fa93ea..651910028 100644 --- a/scribejava-httpclient-apache/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-apache/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.apache.ApacheProvider +com.github.scribejava.httpclient.apache.ApacheProvider diff --git a/scribejava-httpclient-armeria/pom.xml b/scribejava-httpclient-armeria/pom.xml index 193dc56cd..54e58c619 100644 --- a/scribejava-httpclient-armeria/pom.xml +++ b/scribejava-httpclient-armeria/pom.xml @@ -1,59 +1,59 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-armeria - ScribeJava Async Armeria Client support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - org.slf4j - slf4j-simple - 2.0.3 - test - - - com.linecorp.armeria - armeria - 1.20.2 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - - - 8 - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-armeria + ScribeJava Async Armeria Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + org.slf4j + slf4j-simple + 2.0.3 + test + + + com.linecorp.armeria + armeria + 1.20.2 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + + + 8 + + diff --git a/scribejava-httpclient-armeria/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-armeria/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 827a34788..bba338db5 100644 --- a/scribejava-httpclient-armeria/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-armeria/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.armeria.ArmeriaProvider +com.github.scribejava.httpclient.armeria.ArmeriaProvider diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 9942a096f..39696d698 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -1,55 +1,55 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-ning - ScribeJava Ning Async Http Client support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - org.slf4j - slf4j-simple - 2.0.3 - test - - - com.ning - async-http-client - 1.9.40 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-ning + ScribeJava Ning Async Http Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + org.slf4j + slf4j-simple + 2.0.3 + test + + + com.ning + async-http-client + 1.9.40 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 772a6e2a0..9f6843994 100644 --- a/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.ning.NingProvider +com.github.scribejava.httpclient.ning.NingProvider diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 0d798e0d9..59bc2bffc 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -1,49 +1,49 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-httpclient-okhttp - ScribeJava Async OkHttp Client support - jar - - - - com.github.scribejava - scribejava-core - ${project.version} - - - com.squareup.okhttp3 - okhttp - 4.10.0 - - - com.github.scribejava - scribejava-core - ${project.version} - test-jar - test - - - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-okhttp + ScribeJava Async OkHttp Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + com.squareup.okhttp3 + okhttp + 4.10.0 + + + com.github.scribejava + scribejava-core + ${project.version} + test-jar + test + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index dce51a387..46afa18ed 100644 --- a/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.okhttp.OkHttpProvider +com.github.scribejava.httpclient.okhttp.OkHttpProvider diff --git a/scribejava-java8/pom.xml b/scribejava-java8/pom.xml index 0c7407688..b75f6d2de 100644 --- a/scribejava-java8/pom.xml +++ b/scribejava-java8/pom.xml @@ -1,33 +1,33 @@ - - - 4.0.0 - - - com.github.scribejava - scribejava - 8.3.4-SNAPSHOT - ../pom.xml - - - com.github.scribejava - scribejava-java8 - ScribeJava Java 8+ compatibility stuff - jar - - - - - org.apache.felix - maven-bundle-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - - - - 8 - - + + + 4.0.0 + + + com.github.scribejava + scribejava + 8.3.4-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-java8 + ScribeJava Java 8+ compatibility stuff + jar + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + + + 8 + + diff --git a/v1-changelog b/v1-changelog index b1de15e7c..5423c6237 100644 --- a/v1-changelog +++ b/v1-changelog @@ -1,98 +1,98 @@ -[1.0.6] - - * FEATURE: Available in maven central repositories. - -[1.0.7] - - * FEATURE: Added support for Yammer and Evernote ( thanks oparrsih ) - * FIX: Fixed bug that preventing setting the scope param on Google Api - -[1.0.8] - - * FEATURE: Added setConnectTimeout and setReadTimeout for the Request Object - * FIX: Fixed Evernote Api (uses GET for request and access tokens) - * REFACTOR: URLEncoding stuff. LinkedIn specific decoder is no longer needed - * FEATURE: Added Google example - -[1.0.9] - - * FEATURE: Token made Serializable - * FIX: Google Api encoding issues (thanks @roger and @klakegg) - -[1.1.0] - - * FEATURE: OAuth 2.0 Support and Facebook support out of the box (thanks Diego Silveira) - * REFACTOR: Api creation and OAuthService refactors - * REFACTOR: Connections are created lazily (just before sending the request) - -[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 - * FEATURE: Digg and Skyrock Apis - -[1.3.2] - * FIX: Don't include oauth_token in 2legged calls. - * FEATURE: RSA-SHA1 Signatures. - * FEATURE: equals & hashcode on Token object. - * FEATURE: ConstantContact Api - -[1.3.3] - * FEATURE: accessToken and requestToken timeouts default to 2 seconds and can be specified. - * FEATURE: New Apis. +[1.0.6] + + * FEATURE: Available in maven central repositories. + +[1.0.7] + + * FEATURE: Added support for Yammer and Evernote ( thanks oparrsih ) + * FIX: Fixed bug that preventing setting the scope param on Google Api + +[1.0.8] + + * FEATURE: Added setConnectTimeout and setReadTimeout for the Request Object + * FIX: Fixed Evernote Api (uses GET for request and access tokens) + * REFACTOR: URLEncoding stuff. LinkedIn specific decoder is no longer needed + * FEATURE: Added Google example + +[1.0.9] + + * FEATURE: Token made Serializable + * FIX: Google Api encoding issues (thanks @roger and @klakegg) + +[1.1.0] + + * FEATURE: OAuth 2.0 Support and Facebook support out of the box (thanks Diego Silveira) + * REFACTOR: Api creation and OAuthService refactors + * REFACTOR: Connections are created lazily (just before sending the request) + +[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 + * FEATURE: Digg and Skyrock Apis + +[1.3.2] + * FIX: Don't include oauth_token in 2legged calls. + * FEATURE: RSA-SHA1 Signatures. + * FEATURE: equals & hashcode on Token object. + * FEATURE: ConstantContact Api + +[1.3.3] + * FEATURE: accessToken and requestToken timeouts default to 2 seconds and can be specified. + * FEATURE: New Apis. diff --git a/v2pre-changelog b/v2pre-changelog index 1a128b98e..6f456136e 100644 --- a/v2pre-changelog +++ b/v2pre-changelog @@ -1,57 +1,57 @@ -[SNAPSHOT] - * prepare to merge back to the ScribeJava - * backport 'news' from scribejava - -[3.4] - * add doktornarabote.ru API support - -[3.3] - * upgrade ning async http client 1.9.20 -> 1.9.26 - * add possibility to use ProxyServer per-request (async only) - * rename maven modules, add "subscribe-" prefix - * backport anything new from scribe-java - -[3.2] - * add possibility to set non-default httpProvider Class Name for ning async http client - -[3.1] - * update FaceBook API version from 2.0 to 2.2 - * update ning dependency for async functionality - * allow 'realm' parameter in OAuthParameters - -[3.0] - * make compilable with OpenJDK8 - * add async functionality - * add GitHub API - * split on two maven modules (+repackaging) - -[2.3] - - * add state parameter in LinkedInAPI 2.0 - * update FB Graph API to version 2.0 - * add tut.by OAuth API - * add default parameter grant_type for Google, LinkedIn and Mail.ru - * update host for requests in VkontakteExample - * add Yinxiang Biji endpoint in EvernoteApi - * switch Flickr and Twitter to https - * update domain for LiveAPI - * add support for the Authorization parameter 'realm' - * add TumblrExample - * update TwitterExample to v1.1 - * merge Request class in OAuthRequest. No need in separate Request class. - No planned usages of 'clean' http requests. - * add required OAuthService parameter in constructor for OAuthRequest, - so it can use OAuthConfig always (Default timeouts for all OAuthRequests - per OAuthService instance are now possible 'from-the-box'). - * remove messy RequestTuner. Use OAuthConfig instead of it. - -[2.1] - - * add OpenID id_token parsing from response to GoogleAPI 2.0 - * add optional OAuth 'state' request parameter - * Add hh api support - * fix Mailru API - -[2.0] - - * New release. First release. Formalizations of new project. +[SNAPSHOT] + * prepare to merge back to the ScribeJava + * backport 'news' from scribejava + +[3.4] + * add doktornarabote.ru API support + +[3.3] + * upgrade ning async http client 1.9.20 -> 1.9.26 + * add possibility to use ProxyServer per-request (async only) + * rename maven modules, add "subscribe-" prefix + * backport anything new from scribe-java + +[3.2] + * add possibility to set non-default httpProvider Class Name for ning async http client + +[3.1] + * update FaceBook API version from 2.0 to 2.2 + * update ning dependency for async functionality + * allow 'realm' parameter in OAuthParameters + +[3.0] + * make compilable with OpenJDK8 + * add async functionality + * add GitHub API + * split on two maven modules (+repackaging) + +[2.3] + + * add state parameter in LinkedInAPI 2.0 + * update FB Graph API to version 2.0 + * add tut.by OAuth API + * add default parameter grant_type for Google, LinkedIn and Mail.ru + * update host for requests in VkontakteExample + * add Yinxiang Biji endpoint in EvernoteApi + * switch Flickr and Twitter to https + * update domain for LiveAPI + * add support for the Authorization parameter 'realm' + * add TumblrExample + * update TwitterExample to v1.1 + * merge Request class in OAuthRequest. No need in separate Request class. + No planned usages of 'clean' http requests. + * add required OAuthService parameter in constructor for OAuthRequest, + so it can use OAuthConfig always (Default timeouts for all OAuthRequests + per OAuthService instance are now possible 'from-the-box'). + * remove messy RequestTuner. Use OAuthConfig instead of it. + +[2.1] + + * add OpenID id_token parsing from response to GoogleAPI 2.0 + * add optional OAuth 'state' request parameter + * Add hh api support + * fix Mailru API + +[2.0] + + * New release. First release. Formalizations of new project. From e84040a068cbea25debd185863827fe16bd9f88e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sat, 8 Jun 2024 14:52:33 +0200 Subject: [PATCH 06/36] Revert "Normalize all line endings to LF" This reverts commit 56f0a960f6185527fa6558552fc90287f8351b6b. --- .../src/main/java/com/github/scribejava/apis/XingApi.java | 0 .../java/com/github/scribejava/apis/examples/XingExample.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scribejava-apis/src/main/java/com/github/scribejava/apis/XingApi.java mode change 100644 => 100755 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/XingApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/XingApi.java old mode 100644 new mode 100755 diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java old mode 100644 new mode 100755 From 49d6ffe93d42b3abb96acc8704ddf2300b6f7db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sun, 9 Jun 2024 10:18:53 +0200 Subject: [PATCH 07/36] .picked functions to cover --- .../github/scribejava/httpclient/apache/ApacheHttpClient.java | 3 ++- .../httpclient/apache/OAuthAsyncCompletionHandler.java | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/scribejava-httpclient-apache/src/main/java/com/github/scribejava/httpclient/apache/ApacheHttpClient.java b/scribejava-httpclient-apache/src/main/java/com/github/scribejava/httpclient/apache/ApacheHttpClient.java index 8c204e67b..0ad637914 100644 --- a/scribejava-httpclient-apache/src/main/java/com/github/scribejava/httpclient/apache/ApacheHttpClient.java +++ b/scribejava-httpclient-apache/src/main/java/com/github/scribejava/httpclient/apache/ApacheHttpClient.java @@ -100,7 +100,8 @@ private Future doExecuteAsync(String userAgent, Map heade final Future future = client.execute(builder.build(), handler); return new ApacheHttpFuture<>(future, handler); } - + + //branch coverage: Tomas private static RequestBuilder getRequestBuilder(Verb httpVerb) { switch (httpVerb) { case GET: diff --git a/scribejava-httpclient-apache/src/main/java/com/github/scribejava/httpclient/apache/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-apache/src/main/java/com/github/scribejava/httpclient/apache/OAuthAsyncCompletionHandler.java index 7779b83e7..d2f90ac09 100644 --- a/scribejava-httpclient-apache/src/main/java/com/github/scribejava/httpclient/apache/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-apache/src/main/java/com/github/scribejava/httpclient/apache/OAuthAsyncCompletionHandler.java @@ -34,6 +34,7 @@ public OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, Respon this.latch = new CountDownLatch(1); } + //branch coverage Tomas @Override public void completed(HttpResponse httpResponse) { try { From ac025a4088967c8c7e3ae0aab0a30d89018ef385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sun, 9 Jun 2024 10:20:35 +0200 Subject: [PATCH 08/36] added readme which we should use for the report of our assignment --- README.md | 180 --------------------------------------------- README_original.md | 180 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+), 180 deletions(-) create mode 100644 README_original.md diff --git a/README.md b/README.md index b90ef2e5f..e69de29bb 100644 --- a/README.md +++ b/README.md @@ -1,180 +0,0 @@ -# Welcome to the home of ScribeJava, the simple OAuth client Java lib! - -[![Donate](https://www.paypalobjects.com/en_US/RU/i/btn/btn_donateCC_LG.gif)](https://github.com/scribejava/scribejava/blob/master/donate.md) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava) - - -# Why use ScribeJava? - -### Dead Simple - -Who said OAuth/OAuth2 was difficult? Configuring ScribeJava is __so easy your grandma can do it__! check it out: - -```java -OAuthService service = new ServiceBuilder(YOUR_CLIENT_ID) - .apiSecret(YOUR_CLIENT_SECRET) - .build(LinkedInApi20.instance()); -``` - -That **single line** (added newlines for readability) is the only thing you need to configure ScribeJava with LinkedIn's OAuth API for example. - -Working executable examples are [here](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) -Common usage: [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) - -### Threadsafe - -Hit ScribeJava as hard and with many threads as you like. - -### Java 7 compatible - -That's it. You can use it in old environments and in android apps. -note: To compile from sources you will need Java 9 or newer - -### Async and other HTTP clients - -ScribeJava support out-of-box several HTTP clients: - * ning async http client 1.9.x (maven module scribejava-httpclient-ning) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) - * Async Http Client asynchttpclient 2.x (maven module scribejava-httpclient-ahc) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java) - * OkHttp (maven module scribejava-httpclient-okhttp) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) - * Apache HttpComponents HttpClient (maven module scribejava-httpclient-apache) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java) - * Armeria HTTP client (required >= java 8) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20ArmeriaExample.java) - * any externally created HTTP client [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) - - just add corresponding maven modules to your pom - -### Supports many flows and additional features - - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Authorization Code Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.1), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Resource Owner Password Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.3) - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Client Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.4), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java) - * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Refreshing an Access Token](https://tools.ietf.org/html/rfc6749#section-6), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java#L77) - * [RFC 6750](https://tools.ietf.org/html/rfc6750) The OAuth 2.0 Authorization Framework: Bearer Token Usage - * [RFC 7636](https://tools.ietf.org/html/rfc7636) Proof Key for Code Exchange by OAuth Public Clients (PKCE), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) - * [RFC 7009](https://tools.ietf.org/html/rfc7009) OAuth 2.0 Token Revocation, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java) - * [RFC 8628](https://tools.ietf.org/html/rfc8628) OAuth 2.0 Device Authorization Grant [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20DeviceAuthorizationGrantExample.java) - * [RFC 5849](https://tools.ietf.org/html/rfc5849) The OAuth 1.0 Protocol, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) - -### Supports all (50+) major 1.0a and 2.0 OAuth APIs out-of-the-box - -* Asana (https://asana.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AsanaExample.java) -* Automatic (https://www.automatic.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AutomaticExample.java) -* AWeber (http://www.aweber.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java) -* Box (https://www.box.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java) -* Dataporten (https://docs.dataporten.no/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DataportenExample.java) -* Digg (http://digg.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java) -* Discord (https://discordapp.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiscordExample.java) -* Доктор на работе (https://www.doktornarabote.ru/) -* Dropbox (https://www.dropbox.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DropboxExample.java) -* Etsy (https://www.etsy.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/EtsyExample.java) -* Facebook (https://www.facebook.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java), [example with Async Apache HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java), [example with Async Ning HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) -* Fitbit (https://www.fitbit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FitbitApi20Example.java) -* Flickr (https://www.flickr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java) -* Foursquare (https://foursquare.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java) -* Frappe (https://github.com/frappe/frappe) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FrappeExample.java) -* Freelancer (https://www.freelancer.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java) -* Genius (http://genius.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java) -* GitHub (https://github.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java), [example with OkHttp HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) -* Google (https://www.google.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java), [example with Async Http Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java), [example Revoke](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java), [example with PKCEE](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) -* HeadHunter ХэдХантер (https://hh.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java) -* HiOrg-Server (https://www.hiorg-server.de/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HiOrgServerExample.java) -* Imgur (http://imgur.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java) -* Instagram (https://www.instagram.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/InstagramExample.java) -* Kaixin 开心网 (http://www.kaixin001.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java) -* Kakao (https://kakao.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KakaoExample.java) -* Keycloak (https://www.keycloak.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KeycloakExample.java) -* LinkedIn (https://www.linkedin.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java), [example with custom scopes](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java) -* Mail.Ru (https://mail.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java) -* MediaWiki (https://www.mediawiki.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MediaWikiExample.java) -* Meetup (https://www.meetup.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Meetup20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java) -* Microsoft Azure Active Directory (Azure AD) (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectoryExample.java) -* Microsoft Azure Active Directory (Azure AD) 2.0 (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectory20Example.java) -* Microsoft Live (https://login.live.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java) -* Misfit (http://misfit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java) -* NAVER (http://www.naver.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java) -* Odnoklassniki Одноклассники (http://ok.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java) -* Polar (https://www.polar.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PolarAPIExample.java) -* Pinterest (https://www.pinterest.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java) -* 500px (https://500px.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java) -* Renren (http://renren.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java) -* Salesforce (https://www.salesforce.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java) -* Sina (http://www.sina.com.cn/ http://weibo.com/login.php) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java) -* Skyrock (http://skyrock.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java) -* Slack (https://slack.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SlackExample.java) -* StackExchange (http://stackexchange.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java) -* The Things Network (v1-staging and v2-preview) (https://www.thethingsnetwork.org/) [example v1](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java), [example v2 preview](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java) -* Trello (https://trello.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java) -* Tumblr (https://www.tumblr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java) -* TUT.BY (http://www.tut.by/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java) -* Twitter (https://twitter.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) -* uCoz (https://www.ucoz.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/UcozExample.java) -* Viadeo (http://viadeo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java) -* VK ВКонтакте (http://vk.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java), [example Client Credentials Grant](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java), [example with External HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) -* Wunderlist (https://www.wunderlist.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/WunderlistExample.java) -* Xero (https://www.xero.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XeroExample.java) -* XING (https://www.xing.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java) -* Yahoo (https://www.yahoo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Yahoo20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java) -* check the [examples folder](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) - -### Small and modular - -ScribeJava's code is small (about 1k LOC) and simple to understand. No smart-ass or "clever" hacks here. -You can use only 'core' or 'with apis' maven modules - -### Android-Ready - -Works out of the box with android(TM) applications. - -### Stable & bulletproof - -Good test coverage to keep you safe from harm. - -When something bad actually happens, ScribeJava's meaningful error messages will tell you exactly what went wrong, when and where. - -### Pull it from Maven Central! - -You can pull ScribeJava from the central maven repository, just add these to your __pom.xml__ file: - -```xml - - com.github.scribejava - scribejava-apis - 8.3.3 - -``` - -And in case you need just core classes (that's it, without any external API (FB, VK, GitHub, Google etc) specific code), you could pull just 'core' artifact. -```xml - - com.github.scribejava - scribejava-core - 8.3.3 - -``` - -## How can I help ScribeJava - -First of all, Pull Requests are welcome, the second option is [donations](https://github.com/scribejava/scribejava/blob/master/donate.md). - -## When will ScribeJava support XXX (new RFC, custom functionality, new API etc.) - -When you will send the pull request. That's the way for a majority of changes here. -Or you can ask someone to make the paid job for you. -In some cases, when I'm interested in changes (technically or financially), I can implement the request myself. - -## Paid consulting -If you or your business depends on the Scribejava and you need any specific improvement or new feature not currently implemented in the Scribejava, consider contacting me about a paid job. - -## Getting started in less than 2 minutes - -Check the [Getting Started](https://github.com/scribejava/scribejava/wiki/getting-started) page and start rocking! Please Read the [FAQ](https://github.com/scribejava/scribejava/wiki/faq) before creating an issue :) - -Some useful info and answers you can find on the [wiki](https://github.com/scribejava/scribejava/wiki) - -Also, remember to read the [fantastic tutorial](http://akoskm.github.io/2015/07/31/twitter-sign-in-for-web-apps.html) that [@akoskm](https://twitter.com/akoskm) wrote to easily integrate a server side app with an API (twitter in this case). - -## Questions? - -Feel free to drop us an email or create issue right here on github.com - -## Forks - -If you have a useful fork that should be listed there please contact us diff --git a/README_original.md b/README_original.md new file mode 100644 index 000000000..b90ef2e5f --- /dev/null +++ b/README_original.md @@ -0,0 +1,180 @@ +# Welcome to the home of ScribeJava, the simple OAuth client Java lib! + +[![Donate](https://www.paypalobjects.com/en_US/RU/i/btn/btn_donateCC_LG.gif)](https://github.com/scribejava/scribejava/blob/master/donate.md) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava) + + +# Why use ScribeJava? + +### Dead Simple + +Who said OAuth/OAuth2 was difficult? Configuring ScribeJava is __so easy your grandma can do it__! check it out: + +```java +OAuthService service = new ServiceBuilder(YOUR_CLIENT_ID) + .apiSecret(YOUR_CLIENT_SECRET) + .build(LinkedInApi20.instance()); +``` + +That **single line** (added newlines for readability) is the only thing you need to configure ScribeJava with LinkedIn's OAuth API for example. + +Working executable examples are [here](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) +Common usage: [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) + +### Threadsafe + +Hit ScribeJava as hard and with many threads as you like. + +### Java 7 compatible + +That's it. You can use it in old environments and in android apps. +note: To compile from sources you will need Java 9 or newer + +### Async and other HTTP clients + +ScribeJava support out-of-box several HTTP clients: + * ning async http client 1.9.x (maven module scribejava-httpclient-ning) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) + * Async Http Client asynchttpclient 2.x (maven module scribejava-httpclient-ahc) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java) + * OkHttp (maven module scribejava-httpclient-okhttp) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) + * Apache HttpComponents HttpClient (maven module scribejava-httpclient-apache) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java) + * Armeria HTTP client (required >= java 8) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20ArmeriaExample.java) + * any externally created HTTP client [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) + + just add corresponding maven modules to your pom + +### Supports many flows and additional features + + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Authorization Code Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.1), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java) + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Resource Owner Password Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.3) + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Client Credentials Authorization Grant](https://tools.ietf.org/html/rfc6749#section-4.4), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java) + * [RFC 6749](https://tools.ietf.org/html/rfc6749) The OAuth 2.0 Authorization Framework, [Refreshing an Access Token](https://tools.ietf.org/html/rfc6749#section-6), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java#L77) + * [RFC 6750](https://tools.ietf.org/html/rfc6750) The OAuth 2.0 Authorization Framework: Bearer Token Usage + * [RFC 7636](https://tools.ietf.org/html/rfc7636) Proof Key for Code Exchange by OAuth Public Clients (PKCE), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) + * [RFC 7009](https://tools.ietf.org/html/rfc7009) OAuth 2.0 Token Revocation, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java) + * [RFC 8628](https://tools.ietf.org/html/rfc8628) OAuth 2.0 Device Authorization Grant [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20DeviceAuthorizationGrantExample.java) + * [RFC 5849](https://tools.ietf.org/html/rfc5849) The OAuth 1.0 Protocol, [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) + +### Supports all (50+) major 1.0a and 2.0 OAuth APIs out-of-the-box + +* Asana (https://asana.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AsanaExample.java) +* Automatic (https://www.automatic.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AutomaticExample.java) +* AWeber (http://www.aweber.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java) +* Box (https://www.box.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java) +* Dataporten (https://docs.dataporten.no/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DataportenExample.java) +* Digg (http://digg.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java) +* Discord (https://discordapp.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiscordExample.java) +* Доктор на работе (https://www.doktornarabote.ru/) +* Dropbox (https://www.dropbox.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DropboxExample.java) +* Etsy (https://www.etsy.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/EtsyExample.java) +* Facebook (https://www.facebook.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java), [example with Async Apache HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncApacheExample.java), [example with Async Ning HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java) +* Fitbit (https://www.fitbit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FitbitApi20Example.java) +* Flickr (https://www.flickr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java) +* Foursquare (https://foursquare.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java) +* Frappe (https://github.com/frappe/frappe) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FrappeExample.java) +* Freelancer (https://www.freelancer.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java) +* Genius (http://genius.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java) +* GitHub (https://github.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java), [example with OkHttp HTTP client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java) +* Google (https://www.google.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java), [example with Async Http Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java), [example Revoke](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20RevokeExample.java), [example with PKCEE](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20WithPKCEExample.java) +* HeadHunter ХэдХантер (https://hh.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java) +* HiOrg-Server (https://www.hiorg-server.de/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HiOrgServerExample.java) +* Imgur (http://imgur.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java) +* Instagram (https://www.instagram.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/InstagramExample.java) +* Kaixin 开心网 (http://www.kaixin001.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java) +* Kakao (https://kakao.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KakaoExample.java) +* Keycloak (https://www.keycloak.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/KeycloakExample.java) +* LinkedIn (https://www.linkedin.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java), [example with custom scopes](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java) +* Mail.Ru (https://mail.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java) +* MediaWiki (https://www.mediawiki.org/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MediaWikiExample.java) +* Meetup (https://www.meetup.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Meetup20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java) +* Microsoft Azure Active Directory (Azure AD) (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectoryExample.java) +* Microsoft Azure Active Directory (Azure AD) 2.0 (http://azure.microsoft.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MicrosoftAzureActiveDirectory20Example.java) +* Microsoft Live (https://login.live.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java) +* Misfit (http://misfit.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java) +* NAVER (http://www.naver.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java) +* Odnoklassniki Одноклассники (http://ok.ru/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java) +* Polar (https://www.polar.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PolarAPIExample.java) +* Pinterest (https://www.pinterest.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java) +* 500px (https://500px.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java) +* Renren (http://renren.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java) +* Salesforce (https://www.salesforce.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java), [example with Async Ning HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java) +* Sina (http://www.sina.com.cn/ http://weibo.com/login.php) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java) +* Skyrock (http://skyrock.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java) +* Slack (https://slack.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SlackExample.java) +* StackExchange (http://stackexchange.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java) +* The Things Network (v1-staging and v2-preview) (https://www.thethingsnetwork.org/) [example v1](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java), [example v2 preview](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java) +* Trello (https://trello.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java) +* Tumblr (https://www.tumblr.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java) +* TUT.BY (http://www.tut.by/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java) +* Twitter (https://twitter.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java) +* uCoz (https://www.ucoz.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/UcozExample.java) +* Viadeo (http://viadeo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java) +* VK ВКонтакте (http://vk.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java), [example Client Credentials Grant](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteClientCredentialsGrantExample.java), [example with External HTTP Client](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java) +* Wunderlist (https://www.wunderlist.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/WunderlistExample.java) +* Xero (https://www.xero.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XeroExample.java) +* XING (https://www.xing.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java) +* Yahoo (https://www.yahoo.com/) [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Yahoo20Example.java), [example](https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java) +* check the [examples folder](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) + +### Small and modular + +ScribeJava's code is small (about 1k LOC) and simple to understand. No smart-ass or "clever" hacks here. +You can use only 'core' or 'with apis' maven modules + +### Android-Ready + +Works out of the box with android(TM) applications. + +### Stable & bulletproof + +Good test coverage to keep you safe from harm. + +When something bad actually happens, ScribeJava's meaningful error messages will tell you exactly what went wrong, when and where. + +### Pull it from Maven Central! + +You can pull ScribeJava from the central maven repository, just add these to your __pom.xml__ file: + +```xml + + com.github.scribejava + scribejava-apis + 8.3.3 + +``` + +And in case you need just core classes (that's it, without any external API (FB, VK, GitHub, Google etc) specific code), you could pull just 'core' artifact. +```xml + + com.github.scribejava + scribejava-core + 8.3.3 + +``` + +## How can I help ScribeJava + +First of all, Pull Requests are welcome, the second option is [donations](https://github.com/scribejava/scribejava/blob/master/donate.md). + +## When will ScribeJava support XXX (new RFC, custom functionality, new API etc.) + +When you will send the pull request. That's the way for a majority of changes here. +Or you can ask someone to make the paid job for you. +In some cases, when I'm interested in changes (technically or financially), I can implement the request myself. + +## Paid consulting +If you or your business depends on the Scribejava and you need any specific improvement or new feature not currently implemented in the Scribejava, consider contacting me about a paid job. + +## Getting started in less than 2 minutes + +Check the [Getting Started](https://github.com/scribejava/scribejava/wiki/getting-started) page and start rocking! Please Read the [FAQ](https://github.com/scribejava/scribejava/wiki/faq) before creating an issue :) + +Some useful info and answers you can find on the [wiki](https://github.com/scribejava/scribejava/wiki) + +Also, remember to read the [fantastic tutorial](http://akoskm.github.io/2015/07/31/twitter-sign-in-for-web-apps.html) that [@akoskm](https://twitter.com/akoskm) wrote to easily integrate a server side app with an API (twitter in this case). + +## Questions? + +Feel free to drop us an email or create issue right here on github.com + +## Forks + +If you have a useful fork that should be listed there please contact us From 22ff53166fe77d1dfd991062618de3294dbbba78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sun, 9 Jun 2024 10:26:57 +0200 Subject: [PATCH 09/36] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index e69de29bb..ef89cfd81 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,6 @@ +# Report for Assignment 1 +## Project chosen +Name: cribeJava +URL: https://github.com/scribejava/scribejava +Number of lines of code and tool used to count it: 17332, lizard +Programming language: Java From 30ddaf09de5684d34cb7bcb0731c2403bba68ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sun, 9 Jun 2024 17:32:06 +0200 Subject: [PATCH 10/36] .added my 2 methods that I covered into the report --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index ef89cfd81..333b9fe5a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,27 @@ # Report for Assignment 1 + ## Project chosen Name: cribeJava URL: https://github.com/scribejava/scribejava Number of lines of code and tool used to count it: 17332, lizard Programming language: Java + +## Coverage measurement +### Existing tool +Name of the existing tool used was Jacoco. It was executed by adding a Jacoco plugin into the pom.xml file and then executing maven. (Add some details) +(Provide screenshot, there is a problem that it only creates reports for specific parts such as scribejava-core, figure out a way to put it all in one report) +![ScreenShot of coverage results](image.png) + +### Our own coverage tool +Tomas Busa +Function 1: com.github.scribejava.httpclient.apache.ApacheHttpClient.getRequestBuilder + +![Data Structure to hold coverage information, write all information about the branches taken to a console](image-1.png) +![Set a flag if the branch is reached](image-2.png) +![Coverage results output](image-3.png) + +Function 2: com.github.scribejava.httpclient.apache.OAuthAsyncCompletionHandler.completed +![Data Structure to hold coverage information, write all information about the branches taken to a console](image-4.png) +![Set a flag if the branch is reached](image-5.png) +![Coverage results output](image-6.png) + From 8385a7b307f4ff388b9cb82a6faf0b8a6c0c3a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Sun, 9 Jun 2024 17:37:17 +0200 Subject: [PATCH 11/36] .disabled checkstyles so its easier to code without having to worry about these tests --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index bc2f98930..119ad6f4b 100644 --- a/pom.xml +++ b/pom.xml @@ -160,7 +160,7 @@
- + org.apache.maven.plugins maven-release-plugin @@ -263,7 +263,7 @@ - + org.apache.maven.plugins maven-pmd-plugin From 99b6a14a53e758689d248050471b453fcd4490a1 Mon Sep 17 00:00:00 2001 From: jayran-d <122268318+jayran-d@users.noreply.github.com> Date: Sun, 9 Jun 2024 23:27:51 +0200 Subject: [PATCH 12/36] Update README.md - Jayran 2 functions --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 333b9fe5a..bb048b4a0 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,8 @@ Function 2: com.github.scribejava.httpclient.apache.OAuthAsyncCompletionHandler. ![Set a flag if the branch is reached](image-5.png) ![Coverage results output](image-6.png) +Jayran Duggins +Function 1: scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java (getHttpMethod) + +Function 2: scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaWebClientBuilder.java (newWebClient) + From d865301d95bc307e64ba6ecc0b5e4512ed62191e Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 00:03:20 +0200 Subject: [PATCH 13/36] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index bb048b4a0..3e6705f78 100644 --- a/README.md +++ b/README.md @@ -30,3 +30,10 @@ Function 1: scribejava-httpclient-armeria/src/main/java/com/github/scribejava/ht Function 2: scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaWebClientBuilder.java (newWebClient) + + +Nikola Bakalinov +Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning +/NingHttpClient.java (doExecuteAsync) + + From 0983313902af7b9cefcfa0a03d64ec72caee8cb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Mon, 10 Jun 2024 11:47:42 +0200 Subject: [PATCH 14/36] .disable programming mistake detector --- .vscode/settings.json | 3 +++ pom.xml | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..2b4f8cd99 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 119ad6f4b..10bf82abd 100644 --- a/pom.xml +++ b/pom.xml @@ -284,7 +284,7 @@ --> - + From c97456e30ab24acd44d1ea8f0861661cd98dffd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Bu=C5=A1a?= <79701209+YBushi@users.noreply.github.com> Date: Mon, 10 Jun 2024 11:56:08 +0200 Subject: [PATCH 15/36] .added before/after coverage --- README.md | 3 +++ image-1.png | Bin 0 -> 21438 bytes image.png | Bin 0 -> 21013 bytes 3 files changed, 3 insertions(+) create mode 100644 image-1.png create mode 100644 image.png diff --git a/README.md b/README.md index 3e6705f78..46dfa9a8e 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,9 @@ Function 2: com.github.scribejava.httpclient.apache.OAuthAsyncCompletionHandler. ![Set a flag if the branch is reached](image-5.png) ![Coverage results output](image-6.png) +![Before adding coverage](image.png) +![After adding coverage](image-1.png) + Jayran Duggins Function 1: scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java (getHttpMethod) diff --git a/image-1.png b/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..330cfee648152584a7dcd0e9027a3f013dd99299 GIT binary patch literal 21438 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 literal 0 HcmV?d00001 diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..30df2f243ca6ee6b68e1191f543151c6db03cdfc GIT binary patch literal 21013 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 avTvl`h_Y1OR=s!txGXOq%&JY$asL9p+bsbA literal 0 HcmV?d00001 From 8fa3da59bb2ada4babc4655a960cf38f3d4024ec Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 13:46:07 +0200 Subject: [PATCH 16/36] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 46dfa9a8e..39cae9be1 100644 --- a/README.md +++ b/README.md @@ -38,5 +38,9 @@ Function 2: scribejava-httpclient-armeria/src/main/java/com/github/scribejava/ht Nikola Bakalinov Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning /NingHttpClient.java (doExecuteAsync) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/26649e11-0fd3-40c6-af43-37aa0dab19fc) + + + From 0976235bc3c93d199efe2e4377673bc06a322d74 Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 13:55:23 +0200 Subject: [PATCH 17/36] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 39cae9be1..73cde45e5 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,10 @@ Function 2: scribejava-httpclient-armeria/src/main/java/com/github/scribejava/ht Nikola Bakalinov Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning /NingHttpClient.java (doExecuteAsync) -![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/26649e11-0fd3-40c6-af43-37aa0dab19fc) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/af7aefc7-8db2-422b-8420-7760e43b8191) + +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/a6e8a221-e663-4eea-bd1b-6951f74454d0) + From 3884fad38b19a09d8cb2ff6f6624144560a3d8d5 Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 13:56:31 +0200 Subject: [PATCH 18/36] Update README.md --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 73cde45e5..e5579dfd0 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,13 @@ Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scrib /NingHttpClient.java (doExecuteAsync) ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/af7aefc7-8db2-422b-8420-7760e43b8191) -![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/a6e8a221-e663-4eea-bd1b-6951f74454d0) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/f45a7c09-47b2-4142-9d92-223d0b758001) + +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/cda0b2e0-cef0-499d-a484-cdcdab1d1985) + + + + From f959b0391603263f42daa72f1b49102fb43bc6c0 Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 13:58:29 +0200 Subject: [PATCH 19/36] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e5579dfd0..30cc548a4 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scrib ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/cda0b2e0-cef0-499d-a484-cdcdab1d1985) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/38aada3b-daf4-4391-b616-281aa152fefa) From 322bdc743ad3fa78e799d0e24d1f9f22de1041c5 Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 14:38:53 +0200 Subject: [PATCH 20/36] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 30cc548a4..59d417a29 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,9 @@ Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scrib ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/38aada3b-daf4-4391-b616-281aa152fefa) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/90e3d968-0e97-4785-b3fa-c4aa001ff250) + + From 95bd2b62a0b31804dc9fb6697e39ab708b96238f Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 15:38:56 +0200 Subject: [PATCH 21/36] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 59d417a29..0cc02108f 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,9 @@ Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scrib ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/90e3d968-0e97-4785-b3fa-c4aa001ff250) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/4a1a351c-74b5-4c46-b95c-2eb499a9e776) + + From 900eed371013ad2b928af85d2c83ff8f1179551f Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:21:20 +0200 Subject: [PATCH 22/36] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 0cc02108f..cf355a3f5 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,9 @@ Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scrib ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/4a1a351c-74b5-4c46-b95c-2eb499a9e776) +Function 2: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning +/NingHttpClient.java (doExecuteAsync) + From b0a2945d8bdbf0c3eae52e3857108dc63f87775c Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:22:41 +0200 Subject: [PATCH 23/36] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cf355a3f5..c660d25b8 100644 --- a/README.md +++ b/README.md @@ -51,8 +51,10 @@ Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scrib ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/4a1a351c-74b5-4c46-b95c-2eb499a9e776) -Function 2: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning -/NingHttpClient.java (doExecuteAsync) +Function 2: SEP-Assingment1/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria +/ArmeriaHttpClient.java (doExecuteAsync) + + From e5e333d6817e74b52b22b78e665def88e5e7246c Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:29:16 +0200 Subject: [PATCH 24/36] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index c660d25b8..3be697597 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,12 @@ Function 2: SEP-Assingment1/scribejava-httpclient-armeria/src/main/java/com/gith +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/9f7c108a-fc45-4466-bbae-f72f10861526) + + + + + From 8d78943a27d1c3eacb8eb51ed6658bf81bc0bcfb Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:31:02 +0200 Subject: [PATCH 25/36] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 3be697597..8ee8c7be8 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,10 @@ Function 1: scribejava/scribejava-httpclient-ning/src/main/java/com/github/scrib Function 2: SEP-Assingment1/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria /ArmeriaHttpClient.java (doExecuteAsync) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/bae2c17f-828d-434f-8796-7e5f7ce05b5d) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/e469bb70-d3d3-4f0d-963f-b0e480117631) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/28f7488b-f7ec-4a88-a94c-4f0d5708106c) + From 95aa70dbb736791ee1b8c07757ad56cf6a6e9a66 Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:33:30 +0200 Subject: [PATCH 26/36] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8ee8c7be8..d1ee882f3 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,8 @@ Function 2: SEP-Assingment1/scribejava-httpclient-armeria/src/main/java/com/gith ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/bae2c17f-828d-434f-8796-7e5f7ce05b5d) ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/e469bb70-d3d3-4f0d-963f-b0e480117631) ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/28f7488b-f7ec-4a88-a94c-4f0d5708106c) +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/c6833583-ac0e-41b8-bfb4-397fc7d102d8) + From 9758f32611e3fc5dbf814a06ca2fb4beadec516d Mon Sep 17 00:00:00 2001 From: nikola20145 <113595455+nikola20145@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:41:43 +0200 Subject: [PATCH 27/36] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d1ee882f3..e81b3c078 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Function 2: SEP-Assingment1/scribejava-httpclient-armeria/src/main/java/com/gith ![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/9f7c108a-fc45-4466-bbae-f72f10861526) - +![image](https://github.com/YBushi/SEP-Assingment1/assets/113595455/8a842731-beec-4bc9-957b-c7b0be9ca350) From 2b635b168a72b3c5e810125752f972b92ebac8f3 Mon Sep 17 00:00:00 2001 From: jayran Date: Mon, 10 Jun 2024 21:25:04 +0200 Subject: [PATCH 28/36] added my branch coverage instrument for getHttpRequest --- .../httpclient/armeria/ArmeriaHttpClient.java | 64 +++++++++++++++---- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java index 982ddc63a..07d793f31 100644 --- a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java +++ b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java @@ -28,6 +28,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Future; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -44,7 +45,8 @@ public class ArmeriaHttpClient extends AbstractAsyncOnlyHttpClient { */ private final ArmeriaWebClientBuilder clientBuilder; /** - * A list of cached Endpoints. It helps avoiding building a new Endpoint per each request. + * A list of cached Endpoints. It helps avoiding building a new Endpoint per + * each request. */ private final Map httpClients = new HashMap<>(); /** @@ -149,7 +151,8 @@ private CompletableFuture doExecuteAsync(String userAgent, Map converter {@link OAuthRequest.ResponseConverter} specific type or {@link Response} - * @return either instance of {@link Response} or converted result based on {@link OAuthRequest.ResponseConverter} + * @param converter {@link OAuthRequest.ResponseConverter} + * specific type or {@link Response} + * @return either instance of {@link Response} or converted result based on + * {@link OAuthRequest.ResponseConverter} */ private T whenResponseComplete(OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter, AggregatedHttpResponse aggregatedResponse) { @@ -292,9 +328,11 @@ private T whenResponseComplete(OAuthAsyncRequestCallback callback, /** * Invokes {@link OAuthAsyncRequestCallback} upon {@link Throwable} error result * - * @param callback a {@link OAuthAsyncRequestCallback} callback to invoke upon response completion + * @param callback a {@link OAuthAsyncRequestCallback} callback to invoke upon + * response completion * @param throwable a {@link Throwable} error result - * @param converter {@link OAuthRequest.ResponseConverter} specific type or {@link Response} + * @param converter {@link OAuthRequest.ResponseConverter} specific + * type or {@link Response} * @return null */ private T completeExceptionally(OAuthAsyncRequestCallback callback, Throwable throwable) { From 9eab4c37ce64f94dd2d0bd7161b276caad84d499 Mon Sep 17 00:00:00 2001 From: jayran Date: Mon, 10 Jun 2024 22:27:36 +0200 Subject: [PATCH 29/36] implemented the coverage for the 2nd function --- .../httpclient/armeria/ArmeriaHttpClient.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java index 07d793f31..68c9a3201 100644 --- a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java +++ b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java @@ -202,6 +202,8 @@ private static String getEndPoint(URI uri) { return requireNonNull(uri.getScheme(), "scheme") + "://" + requireNonNull(uri.getAuthority(), "authority"); } + private static boolean[] getServiceCaseCoverage = new boolean[2]; + /** * Extracts {@code path}, {@code query} and {@code fragment} portion of the * {@link URI}. @@ -214,10 +216,12 @@ private static String getServicePath(URI uri) { .append(requireNonNull(uri.getPath(), "path")); final String query = uri.getQuery(); if (query != null) { + getServiceCaseCoverage[0] = true; // branch 0 builder.append('?').append(query); } final String fragment = uri.getFragment(); if (fragment != null) { + getServiceCaseCoverage[1] = true; // branch 1 builder.append('#').append(fragment); } return builder.toString(); @@ -230,13 +234,18 @@ private static String getServicePath(URI uri) { * @return {@link HttpMethod} corresponding to the parameter */ - private static boolean[] caseCoverage = new boolean[8]; + private static boolean[] getHttpCaseCoverage = new boolean[8]; private static final String[] methods = { "GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE", "PATCH" }; private static void printCoverage() { - System.out.println("Coverage report:"); - for (int i = 0; i < caseCoverage.length; i++) { - System.out.println("Branch " + i + ": " + methods[i] + " case executed: " + caseCoverage[i]); + System.out.println("GetHttpMethod Coverage report:"); + for (int i = 0; i < getHttpCaseCoverage.length; i++) { + System.out.println("Branch " + i + ": " + methods[i] + " case executed: " + getHttpCaseCoverage[i]); + } + + System.out.println("GetService Coverage report:"); + for (int i = 0; i < getServiceCaseCoverage.length; i++) { + System.out.println("Branch " + i + ": " + getServiceCaseCoverage[i]); } } @@ -248,28 +257,28 @@ private static void printCoverage() { private static HttpMethod getHttpMethod(Verb httpVerb) { switch (httpVerb) { case GET: - caseCoverage[0] = true; + getHttpCaseCoverage[0] = true; return HttpMethod.GET; case POST: - caseCoverage[1] = true; + getHttpCaseCoverage[1] = true; return HttpMethod.POST; case PUT: - caseCoverage[2] = true; + getHttpCaseCoverage[2] = true; return HttpMethod.PUT; case DELETE: - caseCoverage[3] = true; + getHttpCaseCoverage[3] = true; return HttpMethod.DELETE; case HEAD: - caseCoverage[4] = true; + getHttpCaseCoverage[4] = true; return HttpMethod.HEAD; case OPTIONS: - caseCoverage[5] = true; + getHttpCaseCoverage[5] = true; return HttpMethod.OPTIONS; case TRACE: - caseCoverage[6] = true; + getHttpCaseCoverage[6] = true; return HttpMethod.TRACE; case PATCH: - caseCoverage[7] = true; + getHttpCaseCoverage[7] = true; return HttpMethod.PATCH; default: throw new IllegalArgumentException( From 3719a1d231ea6b621f5d8bfe4bbd58a3ef8c17d7 Mon Sep 17 00:00:00 2001 From: jayran Date: Mon, 10 Jun 2024 22:41:35 +0200 Subject: [PATCH 30/36] Applied changes to second function and updated somethings --- .../httpclient/armeria/ArmeriaHttpClient.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java index 68c9a3201..f20223ef2 100644 --- a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java +++ b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java @@ -202,7 +202,7 @@ private static String getEndPoint(URI uri) { return requireNonNull(uri.getScheme(), "scheme") + "://" + requireNonNull(uri.getAuthority(), "authority"); } - private static boolean[] getServiceCaseCoverage = new boolean[2]; + private static boolean[] getServiceCaseCoverage = new boolean[2]; //Datas structure /** * Extracts {@code path}, {@code query} and {@code fragment} portion of the @@ -227,16 +227,6 @@ private static String getServicePath(URI uri) { return builder.toString(); } - /** - * Maps {@link Verb} to {@link HttpMethod} - * - * @param httpVerb a {@link Verb} to match with {@link HttpMethod} - * @return {@link HttpMethod} corresponding to the parameter - */ - - private static boolean[] getHttpCaseCoverage = new boolean[8]; - private static final String[] methods = { "GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE", "PATCH" }; - private static void printCoverage() { System.out.println("GetHttpMethod Coverage report:"); for (int i = 0; i < getHttpCaseCoverage.length; i++) { @@ -254,6 +244,16 @@ private static void printCoverage() { Runtime.getRuntime().addShutdownHook(new Thread(ArmeriaHttpClient::printCoverage)); } + /** + * Maps {@link Verb} to {@link HttpMethod} + * + * @param httpVerb a {@link Verb} to match with {@link HttpMethod} + * @return {@link HttpMethod} corresponding to the parameter + */ + + private static boolean[] getHttpCaseCoverage = new boolean[8]; + private static final String[] methods = { "GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE", "PATCH" }; + private static HttpMethod getHttpMethod(Verb httpVerb) { switch (httpVerb) { case GET: From d56a2ccff9434d623855b7e127966d697ab4c4eb Mon Sep 17 00:00:00 2001 From: jayran Date: Wed, 12 Jun 2024 19:42:52 +0200 Subject: [PATCH 31/36] fixed my ID's and made it cleaner --- .../httpclient/armeria/ArmeriaHttpClient.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java index f20223ef2..8f940bf07 100644 --- a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java +++ b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java @@ -202,7 +202,7 @@ private static String getEndPoint(URI uri) { return requireNonNull(uri.getScheme(), "scheme") + "://" + requireNonNull(uri.getAuthority(), "authority"); } - private static boolean[] getServiceCaseCoverage = new boolean[2]; //Datas structure + private static boolean[] getServiceCaseCoverage = new boolean[2]; // Data structure /** * Extracts {@code path}, {@code query} and {@code fragment} portion of the @@ -216,12 +216,13 @@ private static String getServicePath(URI uri) { .append(requireNonNull(uri.getPath(), "path")); final String query = uri.getQuery(); if (query != null) { - getServiceCaseCoverage[0] = true; // branch 0 + getServiceCaseCoverage[0] = true; // ID: ArmeriaHttpClient.getServicePath.branch_1 + builder.append('?').append(query); } final String fragment = uri.getFragment(); if (fragment != null) { - getServiceCaseCoverage[1] = true; // branch 1 + getServiceCaseCoverage[1] = true; // ID: ArmeriaHttpClient.getServicePath.branch_2 builder.append('#').append(fragment); } return builder.toString(); @@ -230,12 +231,12 @@ private static String getServicePath(URI uri) { private static void printCoverage() { System.out.println("GetHttpMethod Coverage report:"); for (int i = 0; i < getHttpCaseCoverage.length; i++) { - System.out.println("Branch " + i + ": " + methods[i] + " case executed: " + getHttpCaseCoverage[i]); + System.out.println("ArmeriaHttpClient.getHttpMethod.branch_" + (i + 1) + ": " + getHttpCaseCoverage[i]); } System.out.println("GetService Coverage report:"); for (int i = 0; i < getServiceCaseCoverage.length; i++) { - System.out.println("Branch " + i + ": " + getServiceCaseCoverage[i]); + System.out.println("ArmeriaHttpClient.getServicePath.branch_" + (i + 1) + ": " + getServiceCaseCoverage[i]); } } @@ -251,36 +252,44 @@ private static void printCoverage() { * @return {@link HttpMethod} corresponding to the parameter */ - private static boolean[] getHttpCaseCoverage = new boolean[8]; - private static final String[] methods = { "GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE", "PATCH" }; - + private static boolean[] getHttpCaseCoverage = new boolean[9]; + private static HttpMethod getHttpMethod(Verb httpVerb) { switch (httpVerb) { case GET: + // ID: ArmeriaHttpClient.getHttpMethod.branch_1 getHttpCaseCoverage[0] = true; return HttpMethod.GET; case POST: + // ID: ArmeriaHttpClient.getHttpMethod.branch_2 getHttpCaseCoverage[1] = true; return HttpMethod.POST; case PUT: + // ID: ArmeriaHttpClient.getHttpMethod.branch_3 getHttpCaseCoverage[2] = true; return HttpMethod.PUT; case DELETE: + // ID: ArmeriaHttpClient.getHttpMethod.branch_4 getHttpCaseCoverage[3] = true; return HttpMethod.DELETE; case HEAD: + // ID: ArmeriaHttpClient.getHttpMethod.branch_5 getHttpCaseCoverage[4] = true; return HttpMethod.HEAD; case OPTIONS: + // ID: ArmeriaHttpClient.getHttpMethod.branch_6 getHttpCaseCoverage[5] = true; return HttpMethod.OPTIONS; case TRACE: + // ID: ArmeriaHttpClient.getHttpMethod.branch_7 getHttpCaseCoverage[6] = true; return HttpMethod.TRACE; case PATCH: + // ID: ArmeriaHttpClient.getHttpMethod.branch_8 getHttpCaseCoverage[7] = true; return HttpMethod.PATCH; default: + // ID: ArmeriaHttpClient.getHttpMethod.branch_9 throw new IllegalArgumentException( "message build error: unsupported HTTP method: " + httpVerb.name()); } From 3b8e67bc46337ef690c5005c816cb52a5b17976d Mon Sep 17 00:00:00 2001 From: jayran Date: Wed, 12 Jun 2024 19:59:27 +0200 Subject: [PATCH 32/36] fixed some things. commened out manual coverage code for now --- .../httpclient/armeria/ArmeriaHttpClient.java | 62 ++++++++++--------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java index 8f940bf07..6a5e87708 100644 --- a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java +++ b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java @@ -202,7 +202,8 @@ private static String getEndPoint(URI uri) { return requireNonNull(uri.getScheme(), "scheme") + "://" + requireNonNull(uri.getAuthority(), "authority"); } - private static boolean[] getServiceCaseCoverage = new boolean[2]; // Data structure + // private static boolean[] getServiceCaseCoverage = new boolean[2]; // Data + // structure /** * Extracts {@code path}, {@code query} and {@code fragment} portion of the @@ -216,34 +217,38 @@ private static String getServicePath(URI uri) { .append(requireNonNull(uri.getPath(), "path")); final String query = uri.getQuery(); if (query != null) { - getServiceCaseCoverage[0] = true; // ID: ArmeriaHttpClient.getServicePath.branch_1 - + // getServiceCaseCoverage[0] = true; // ID: + // ArmeriaHttpClient.getServicePath.branch_1 builder.append('?').append(query); } final String fragment = uri.getFragment(); if (fragment != null) { - getServiceCaseCoverage[1] = true; // ID: ArmeriaHttpClient.getServicePath.branch_2 + // getServiceCaseCoverage[1] = true; // ID: + // ArmeriaHttpClient.getServicePath.branch_2 builder.append('#').append(fragment); } return builder.toString(); } - private static void printCoverage() { - System.out.println("GetHttpMethod Coverage report:"); - for (int i = 0; i < getHttpCaseCoverage.length; i++) { - System.out.println("ArmeriaHttpClient.getHttpMethod.branch_" + (i + 1) + ": " + getHttpCaseCoverage[i]); - } - - System.out.println("GetService Coverage report:"); - for (int i = 0; i < getServiceCaseCoverage.length; i++) { - System.out.println("ArmeriaHttpClient.getServicePath.branch_" + (i + 1) + ": " + getServiceCaseCoverage[i]); - } - } - - static { - // Ensure the coverage report is printed when the class is loaded - Runtime.getRuntime().addShutdownHook(new Thread(ArmeriaHttpClient::printCoverage)); - } + // private static void printCoverage() { + // System.out.println("GetHttpMethod Coverage report:"); + // for (int i = 0; i < getHttpCaseCoverage.length; i++) { + // System.out.println("ArmeriaHttpClient.getHttpMethod.branch_" + (i + 1) + ": " + // + getHttpCaseCoverage[i]); + // } + + // System.out.println("GetService Coverage report:"); + // for (int i = 0; i < getServiceCaseCoverage.length; i++) { + // System.out.println("ArmeriaHttpClient.getServicePath.branch_" + (i + 1) + ": + // " + getServiceCaseCoverage[i]); + // } + // } + + // static { + // // Ensure the coverage report is printed when the class is loaded + // Runtime.getRuntime().addShutdownHook(new + // Thread(ArmeriaHttpClient::printCoverage)); + // } /** * Maps {@link Verb} to {@link HttpMethod} @@ -258,38 +263,39 @@ private static HttpMethod getHttpMethod(Verb httpVerb) { switch (httpVerb) { case GET: // ID: ArmeriaHttpClient.getHttpMethod.branch_1 - getHttpCaseCoverage[0] = true; + // getHttpCaseCoverage[0] = true; return HttpMethod.GET; case POST: // ID: ArmeriaHttpClient.getHttpMethod.branch_2 - getHttpCaseCoverage[1] = true; + // getHttpCaseCoverage[1] = true; return HttpMethod.POST; case PUT: // ID: ArmeriaHttpClient.getHttpMethod.branch_3 - getHttpCaseCoverage[2] = true; + // getHttpCaseCoverage[2] = true; return HttpMethod.PUT; case DELETE: // ID: ArmeriaHttpClient.getHttpMethod.branch_4 - getHttpCaseCoverage[3] = true; + // getHttpCaseCoverage[3] = true; return HttpMethod.DELETE; case HEAD: // ID: ArmeriaHttpClient.getHttpMethod.branch_5 - getHttpCaseCoverage[4] = true; + // getHttpCaseCoverage[4] = true; return HttpMethod.HEAD; case OPTIONS: // ID: ArmeriaHttpClient.getHttpMethod.branch_6 - getHttpCaseCoverage[5] = true; + // getHttpCaseCoverage[5] = true; return HttpMethod.OPTIONS; case TRACE: // ID: ArmeriaHttpClient.getHttpMethod.branch_7 - getHttpCaseCoverage[6] = true; + // getHttpCaseCoverage[6] = true; return HttpMethod.TRACE; case PATCH: // ID: ArmeriaHttpClient.getHttpMethod.branch_8 - getHttpCaseCoverage[7] = true; + // getHttpCaseCoverage[7] = true; return HttpMethod.PATCH; default: // ID: ArmeriaHttpClient.getHttpMethod.branch_9 + // getHttpCaseCoverage[8] = true; throw new IllegalArgumentException( "message build error: unsupported HTTP method: " + httpVerb.name()); } From ed5c66327af58edccb78f556d575fa460ff9f5e6 Mon Sep 17 00:00:00 2001 From: jayran Date: Wed, 12 Jun 2024 20:31:52 +0200 Subject: [PATCH 33/36] uncommented my stuff --- .../httpclient/armeria/ArmeriaHttpClient.java | 63 +++++++++---------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java index 6a5e87708..0c57c9faa 100644 --- a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java +++ b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java @@ -202,8 +202,7 @@ private static String getEndPoint(URI uri) { return requireNonNull(uri.getScheme(), "scheme") + "://" + requireNonNull(uri.getAuthority(), "authority"); } - // private static boolean[] getServiceCaseCoverage = new boolean[2]; // Data - // structure + private static boolean[] getServiceCaseCoverage = new boolean[2]; // Data structure /** * Extracts {@code path}, {@code query} and {@code fragment} portion of the @@ -217,38 +216,34 @@ private static String getServicePath(URI uri) { .append(requireNonNull(uri.getPath(), "path")); final String query = uri.getQuery(); if (query != null) { - // getServiceCaseCoverage[0] = true; // ID: - // ArmeriaHttpClient.getServicePath.branch_1 + getServiceCaseCoverage[0] = true; // ID: ArmeriaHttpClient.getServicePath.branch_1 builder.append('?').append(query); } final String fragment = uri.getFragment(); if (fragment != null) { - // getServiceCaseCoverage[1] = true; // ID: - // ArmeriaHttpClient.getServicePath.branch_2 + getServiceCaseCoverage[1] = true; // ID: ArmeriaHttpClient.getServicePath.branch_2 builder.append('#').append(fragment); } return builder.toString(); } - // private static void printCoverage() { - // System.out.println("GetHttpMethod Coverage report:"); - // for (int i = 0; i < getHttpCaseCoverage.length; i++) { - // System.out.println("ArmeriaHttpClient.getHttpMethod.branch_" + (i + 1) + ": " - // + getHttpCaseCoverage[i]); - // } - - // System.out.println("GetService Coverage report:"); - // for (int i = 0; i < getServiceCaseCoverage.length; i++) { - // System.out.println("ArmeriaHttpClient.getServicePath.branch_" + (i + 1) + ": - // " + getServiceCaseCoverage[i]); - // } - // } - - // static { - // // Ensure the coverage report is printed when the class is loaded - // Runtime.getRuntime().addShutdownHook(new - // Thread(ArmeriaHttpClient::printCoverage)); - // } + private static void printCoverage() { + System.out.println("GetHttpMethod Coverage report:"); + for (int i = 0; i < getHttpCaseCoverage.length; i++) { + System.out.println("ArmeriaHttpClient.getHttpMethod.branch_" + (i + 1) + ": " + + getHttpCaseCoverage[i]); + } + + System.out.println("GetService Coverage report:"); + for (int i = 0; i < getServiceCaseCoverage.length; i++) { + System.out.println("ArmeriaHttpClient.getServicePath.branch_" + (i + 1) + ":" + getServiceCaseCoverage[i]); + } + } + + static { + // Ensure the coverage report is printed when the class is loaded + Runtime.getRuntime().addShutdownHook(new Thread(ArmeriaHttpClient::printCoverage)); + } /** * Maps {@link Verb} to {@link HttpMethod} @@ -263,39 +258,39 @@ private static HttpMethod getHttpMethod(Verb httpVerb) { switch (httpVerb) { case GET: // ID: ArmeriaHttpClient.getHttpMethod.branch_1 - // getHttpCaseCoverage[0] = true; + getHttpCaseCoverage[0] = true; return HttpMethod.GET; case POST: // ID: ArmeriaHttpClient.getHttpMethod.branch_2 - // getHttpCaseCoverage[1] = true; + getHttpCaseCoverage[1] = true; return HttpMethod.POST; case PUT: // ID: ArmeriaHttpClient.getHttpMethod.branch_3 - // getHttpCaseCoverage[2] = true; + getHttpCaseCoverage[2] = true; return HttpMethod.PUT; case DELETE: // ID: ArmeriaHttpClient.getHttpMethod.branch_4 - // getHttpCaseCoverage[3] = true; + getHttpCaseCoverage[3] = true; return HttpMethod.DELETE; case HEAD: // ID: ArmeriaHttpClient.getHttpMethod.branch_5 - // getHttpCaseCoverage[4] = true; + getHttpCaseCoverage[4] = true; return HttpMethod.HEAD; case OPTIONS: // ID: ArmeriaHttpClient.getHttpMethod.branch_6 - // getHttpCaseCoverage[5] = true; + getHttpCaseCoverage[5] = true; return HttpMethod.OPTIONS; case TRACE: // ID: ArmeriaHttpClient.getHttpMethod.branch_7 - // getHttpCaseCoverage[6] = true; + getHttpCaseCoverage[6] = true; return HttpMethod.TRACE; case PATCH: // ID: ArmeriaHttpClient.getHttpMethod.branch_8 - // getHttpCaseCoverage[7] = true; + getHttpCaseCoverage[7] = true; return HttpMethod.PATCH; default: // ID: ArmeriaHttpClient.getHttpMethod.branch_9 - // getHttpCaseCoverage[8] = true; + getHttpCaseCoverage[8] = true; throw new IllegalArgumentException( "message build error: unsupported HTTP method: " + httpVerb.name()); } From 582e001d9a65a921d70d60d103a71c0992b93fc3 Mon Sep 17 00:00:00 2001 From: jayran Date: Sun, 16 Jun 2024 20:15:24 +0200 Subject: [PATCH 34/36] implementd by code for testing --- .../httpclient/armeria/ArmeriaHttpClient.java | 4 +- .../scribejava/ArmeriaHttpCustomTest.java | 87 +++++++++++++++++++ .../armeria/ArmeriaHttpClientTest.java | 5 +- 3 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 scribejava-httpclient-armeria/src/test/java/com/github/scribejava/ArmeriaHttpCustomTest.java diff --git a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java index 0c57c9faa..16f00bd84 100644 --- a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java +++ b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java @@ -211,7 +211,7 @@ private static String getEndPoint(URI uri) { * Assuming the {@link URI} as the following: * {@code URI = scheme:[//authority]path[?query][#fragment]} */ - private static String getServicePath(URI uri) { + public static String getServicePath(URI uri) { final StringBuilder builder = new StringBuilder() .append(requireNonNull(uri.getPath(), "path")); final String query = uri.getQuery(); @@ -254,7 +254,7 @@ private static void printCoverage() { private static boolean[] getHttpCaseCoverage = new boolean[9]; - private static HttpMethod getHttpMethod(Verb httpVerb) { + public static HttpMethod getHttpMethod(Verb httpVerb) { switch (httpVerb) { case GET: // ID: ArmeriaHttpClient.getHttpMethod.branch_1 diff --git a/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/ArmeriaHttpCustomTest.java b/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/ArmeriaHttpCustomTest.java new file mode 100644 index 000000000..57efcd375 --- /dev/null +++ b/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/ArmeriaHttpCustomTest.java @@ -0,0 +1,87 @@ +package com.github.scribejava; + +import static org.junit.Assert.assertEquals; + +import java.net.URI; + +import org.junit.Test; + +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.httpclient.armeria.ArmeriaHttpClient; +import com.linecorp.armeria.common.HttpMethod; + +public class ArmeriaHttpCustomTest { + @Test + public void testGetHttpMethod_GET() { + System.out.println("gang shit\n"); + System.out.println("THIS IS THE ." + ArmeriaHttpClient.getHttpMethod(Verb.GET) + "."); + System.out.println("THIS IS THE pt 2 ." + HttpMethod.GET + "."); + + assertEquals(HttpMethod.GET, ArmeriaHttpClient.getHttpMethod(Verb.GET)); + } + + @Test + public void testGetHttpMethod_POST() { + assertEquals(HttpMethod.POST, ArmeriaHttpClient.getHttpMethod(Verb.POST)); + } + + @Test + public void testGetHttpMethod_PUT() { + assertEquals(HttpMethod.PUT, ArmeriaHttpClient.getHttpMethod(Verb.PUT)); + } + + @Test + public void testGetHttpMethod_DELETE() { + assertEquals(HttpMethod.DELETE, + ArmeriaHttpClient.getHttpMethod(Verb.DELETE)); + } + + @Test + public void testGetHttpMethod_HEAD() { + assertEquals(HttpMethod.HEAD, ArmeriaHttpClient.getHttpMethod(Verb.HEAD)); + } + + @Test + public void testGetHttpMethod_OPTIONS() { + assertEquals(HttpMethod.OPTIONS, + ArmeriaHttpClient.getHttpMethod(Verb.OPTIONS)); + } + + @Test + public void testGetHttpMethod_TRACE() { + assertEquals(HttpMethod.TRACE, ArmeriaHttpClient.getHttpMethod(Verb.TRACE)); + } + + @Test + public void testGetHttpMethod_PATCH() { + assertEquals(HttpMethod.PATCH, ArmeriaHttpClient.getHttpMethod(Verb.PATCH)); + } + + @Test + public void testGetServicePath_withQueryAndFragment() throws Exception { + URI uri = new URI("http://example.com/path?query=123#fragment"); + String result = ArmeriaHttpClient.getServicePath(uri); + assertEquals("/path?query=123#fragment", result); + } + + @Test + public void testGetServicePath_withQuery() throws Exception { + URI uri = new URI("http://example.com/path?query=123"); + String result = ArmeriaHttpClient.getServicePath(uri); + assertEquals("/path?query=123", result); + } + + @Test + public void testGetServicePath_withFragment() throws Exception { + URI uri = new URI("http://example.com/path#fragment"); + String result = ArmeriaHttpClient.getServicePath(uri); + assertEquals("/path#fragment", result); + } + + @Test + public void testGetServicePath_withoutQueryAndFragment() throws Exception { + URI uri = new URI("http://example.com/path"); + String result = ArmeriaHttpClient.getServicePath(uri); + assertEquals("/path", result); + } +} diff --git a/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClientTest.java b/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClientTest.java index c94d6b369..dcf47b146 100644 --- a/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClientTest.java +++ b/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClientTest.java @@ -15,11 +15,13 @@ import io.netty.resolver.AddressResolverGroup; import io.netty.util.concurrent.EventExecutor; import io.netty.util.concurrent.Promise; + import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.Collections; import java.util.List; import java.util.function.Function; + import org.slf4j.LoggerFactory; public class ArmeriaHttpClientTest extends AbstractClientTest { @@ -27,8 +29,7 @@ public class ArmeriaHttpClientTest extends AbstractClientTest { @Override protected HttpClient createNewClient() { // simulate DNS resolution for a mock address ("kubernetes.docker.internal") - final Function> addressRGF - = eventLoopGroup -> new MockAddressResolverGroup(); + final Function> addressRGF = eventLoopGroup -> new MockAddressResolverGroup(); // No-Op DNS resolver to avoid resolution issues in the unit test final ClientFactory clientFactory = ClientFactory.builder().addressResolverGroupFactory(addressRGF).build(); final ArmeriaHttpClientConfig config = new ArmeriaHttpClientConfig(null, clientFactory); From 2d3c51487001dd8f9a748222ff27e5524e32fb77 Mon Sep 17 00:00:00 2001 From: jayran Date: Sun, 16 Jun 2024 20:16:28 +0200 Subject: [PATCH 35/36] got rid of some import --- .../github/scribejava/httpclient/armeria/ArmeriaHttpClient.java | 1 - 1 file changed, 1 deletion(-) diff --git a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java index 16f00bd84..b4fbf913e 100644 --- a/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java +++ b/scribejava-httpclient-armeria/src/main/java/com/github/scribejava/httpclient/armeria/ArmeriaHttpClient.java @@ -28,7 +28,6 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Future; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; From 8ebf0b76261b08540c4725a2a87330c4b4a1b53d Mon Sep 17 00:00:00 2001 From: jayran Date: Sun, 16 Jun 2024 21:40:24 +0200 Subject: [PATCH 36/36] got rid of some print statements --- .../java/com/github/scribejava/ArmeriaHttpCustomTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/ArmeriaHttpCustomTest.java b/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/ArmeriaHttpCustomTest.java index 57efcd375..a0a92e3a6 100644 --- a/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/ArmeriaHttpCustomTest.java +++ b/scribejava-httpclient-armeria/src/test/java/com/github/scribejava/ArmeriaHttpCustomTest.java @@ -13,10 +13,6 @@ public class ArmeriaHttpCustomTest { @Test public void testGetHttpMethod_GET() { - System.out.println("gang shit\n"); - System.out.println("THIS IS THE ." + ArmeriaHttpClient.getHttpMethod(Verb.GET) + "."); - System.out.println("THIS IS THE pt 2 ." + HttpMethod.GET + "."); - assertEquals(HttpMethod.GET, ArmeriaHttpClient.getHttpMethod(Verb.GET)); }