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!
-
-[](https://github.com/scribejava/scribejava/blob/master/donate.md) [](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!
+
+[](https://github.com/scribejava/scribejava/blob/master/donate.md) [](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!
-
-[](https://github.com/scribejava/scribejava/blob/master/donate.md) [](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!
+
+[](https://github.com/scribejava/scribejava/blob/master/donate.md) [](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!
-
-[](https://github.com/scribejava/scribejava/blob/master/donate.md) [](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!
+
+[](https://github.com/scribejava/scribejava/blob/master/donate.md) [](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)
+
+
+### Our own coverage tool
+Tomas Busa
+Function 1: com.github.scribejava.httpclient.apache.ApacheHttpClient.getRequestBuilder
+
+
+
+
+
+Function 2: com.github.scribejava.httpclient.apache.OAuthAsyncCompletionHandler.completed
+
+
+
+
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.


+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.


+
+
+
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)
+
+
+
+
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)
-
+
+
+
+
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)

-
+
+
+
+
+
+
+
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

+
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

+
+
+
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

+
+
+
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

+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

-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
+
+
+
+
+
+
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)
+
+
+
+
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



+
+
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

-
+
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 super EventLoopGroup, ? extends AddressResolverGroup extends InetSocketAddress>> addressRGF
- = eventLoopGroup -> new MockAddressResolverGroup();
+ final Function super EventLoopGroup, ? extends AddressResolverGroup extends InetSocketAddress>> 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));
}