From 47971438c7e9fd73419f7f29abd88fc500632953 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 10:04:00 +0800 Subject: [PATCH 01/44] =?UTF-8?q?=E6=8B=86=E5=88=86UrlBuilder=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB=EF=BC=8C=E5=B7=B2=E6=8B=86=E5=88=86WeiboRequ?= =?UTF-8?q?est?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhyd/oauth/config/AuthSource.java | 24 ++++++++ .../zhyd/oauth/request/AuthWeiboRequest.java | 21 +++++-- .../zhyd/oauth/request/BaseAuthRequest.java | 7 +++ .../me/zhyd/oauth/url/AbstractUrlBuilder.java | 56 +++++++++++++++++++ .../me/zhyd/oauth/url/WeiboUrlBuilder.java | 48 ++++++++++++++++ .../url/entity/AuthAccessTokenEntity.java | 25 +++++++++ .../oauth/url/entity/AuthAuthorizeEntity.java | 20 +++++++ .../url/entity/AuthRefreshTokenEntity.java | 14 +++++ .../oauth/url/entity/AuthRevokeEntity.java | 13 +++++ .../oauth/url/entity/AuthUserInfoEntity.java | 26 +++++++++ .../java/me/zhyd/oauth/utils/UrlBuilder.java | 38 ------------- .../me/zhyd/oauth/utils/AuthStateTest.java | 2 +- 12 files changed, 249 insertions(+), 45 deletions(-) create mode 100644 src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthAccessTokenEntity.java create mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthAuthorizeEntity.java create mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java create mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java create mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index 3326847..fb6cad2 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -420,6 +420,30 @@ public enum AuthSource { public String userInfo() { return "https://open.snssdk.com/data/user_profile"; } + }, + /** + * Teambition + */ + TEAMBITION { + @Override + public String authorize() { + return "https://account.teambition.com/oauth2/authorize"; + } + + @Override + public String accessToken() { + return "https://account.teambition.com/oauth2/access_token"; + } + + @Override + public String refresh() { + return "https://account.teambition.com/oauth2/refresh_token"; + } + + @Override + public String userInfo() { + return "https://account.teambition.com/users/me"; + } }; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java index 366ee22..5129df0 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java @@ -10,9 +10,12 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.WeiboUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.IpUtils; import me.zhyd.oauth.utils.StringUtils; -import me.zhyd.oauth.utils.UrlBuilder; /** @@ -25,13 +28,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthWeiboRequest extends BaseAuthRequest { public AuthWeiboRequest(AuthConfig config) { - super(config, AuthSource.WEIBO); + super(config, AuthSource.WEIBO, new WeiboUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getWeiboAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode(), config - .getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); String accessTokenStr = response.body(); JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr); @@ -51,7 +56,9 @@ public class AuthWeiboRequest extends BaseAuthRequest { String accessToken = authToken.getAccessToken(); String uid = authToken.getUid(); String oauthParam = String.format("uid=%s&access_token=%s", uid, accessToken); - HttpResponse response = HttpRequest.get(UrlBuilder.getWeiboUserInfoUrl(oauthParam)) + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .extra(oauthParam) + .build())) .header("Authorization", "OAuth2 " + oauthParam) .header("API-RemoteIP", IpUtils.getIp()) .execute(); @@ -82,6 +89,8 @@ public class AuthWeiboRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getWeiboAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java b/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java index 8cf1fb1..4dde76e 100644 --- a/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java +++ b/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java @@ -8,6 +8,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.url.AbstractUrlBuilder; import me.zhyd.oauth.utils.AuthChecker; /** @@ -19,6 +20,7 @@ import me.zhyd.oauth.utils.AuthChecker; public abstract class BaseAuthRequest implements AuthRequest { protected AuthConfig config; protected AuthSource source; + protected AbstractUrlBuilder urlBuilder; public BaseAuthRequest(AuthConfig config, AuthSource source) { this.config = config; @@ -30,6 +32,11 @@ public abstract class BaseAuthRequest implements AuthRequest { AuthChecker.checkConfig(config, source); } + public BaseAuthRequest(AuthConfig config, AuthSource source, AbstractUrlBuilder urlBuilder) { + this(config, source); + this.urlBuilder = urlBuilder; + } + protected abstract AuthToken getAccessToken(AuthCallback authCallback); protected abstract AuthUser getUserInfo(AuthToken authToken); diff --git a/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java new file mode 100644 index 0000000..88350b3 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java @@ -0,0 +1,56 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.utils.StringUtils; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public abstract class AbstractUrlBuilder { + + /** + * 获取AccessToken的URL + * + * @return AccessTokenUrl + */ + public abstract String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity); + + /** + * 获取用户信息的URL + * + * @return UserInfoUrl + */ + public abstract String getUserInfoUrl(AuthUserInfoEntity userInfoEntity); + + /** + * 获取跳转授权页面的URL + * + * @return AuthorizeUrl + */ + public abstract String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity); + + /** + * 获取刷新token的URL + * + * @return RefreshUrl + */ + public abstract String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity); + + /** + * 获取取消授权的URL + * + * @return RevokeUrl + */ + public abstract String getRevokeUrl(AuthRevokeEntity revokeEntity); + + /** + * 获取state,如果为空, 则默认去当前日期的时间戳 + * + * @param state state + */ + protected String getRealState(String state) { + return StringUtils.isEmpty(state) ? String.valueOf(System.currentTimeMillis()) : state; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java new file mode 100644 index 0000000..ddb8a6c --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java @@ -0,0 +1,48 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class WeiboUrlBuilder extends AbstractUrlBuilder { + + private static final String WEIBO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; + private static final String WEIBO_USER_INFO_PATTERN = "{0}?{1}"; + private static final String WEIBO_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(WEIBO_ACCESS_TOKEN_PATTERN, AuthSource.WEIBO.accessToken(), config.getClientId(), + config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(WEIBO_USER_INFO_PATTERN, AuthSource.WEIBO.userInfo(), userInfoEntity.getExtra()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(WEIBO_AUTHORIZE_PATTERN, AuthSource.WEIBO.authorize(), config.getClientId(), + config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthAccessTokenEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthAccessTokenEntity.java new file mode 100644 index 0000000..d71dbb8 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthAccessTokenEntity.java @@ -0,0 +1,25 @@ +package me.zhyd.oauth.url.entity; + +import lombok.Builder; +import lombok.Getter; +import me.zhyd.oauth.config.AuthConfig; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +@Getter +@Builder +public class AuthAccessTokenEntity { + + /** + * JustAuth的配置类 + */ + private AuthConfig config; + + /** + * 访问AuthorizeUrl后回调时带的参数code + */ + private String code; +} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthAuthorizeEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthAuthorizeEntity.java new file mode 100644 index 0000000..0ae8b31 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthAuthorizeEntity.java @@ -0,0 +1,20 @@ +package me.zhyd.oauth.url.entity; + +import lombok.Builder; +import lombok.Getter; +import me.zhyd.oauth.config.AuthConfig; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +@Getter +@Builder +public class AuthAuthorizeEntity { + + /** + * JustAuth的配置类 + */ + private AuthConfig config; +} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java new file mode 100644 index 0000000..19d07a0 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java @@ -0,0 +1,14 @@ +package me.zhyd.oauth.url.entity; + +import lombok.Builder; +import lombok.Getter; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +@Getter +@Builder +public class AuthRefreshTokenEntity { +} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java new file mode 100644 index 0000000..d9ab0a0 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java @@ -0,0 +1,13 @@ +package me.zhyd.oauth.url.entity; + +import lombok.*; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +@Getter +@Builder +public class AuthRevokeEntity { +} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java new file mode 100644 index 0000000..852d2d2 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java @@ -0,0 +1,26 @@ +package me.zhyd.oauth.url.entity; + +import lombok.Builder; +import lombok.Getter; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +@Getter +@Builder +public class AuthUserInfoEntity { + /** + * 授权返回的token + */ + private String accessToken; + /** + * 用户openId + */ + private String openId; + /** + * 额外的属性 + */ + private String extra; +} diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java index 70d8db7..85187c8 100644 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -21,9 +21,6 @@ public class UrlBuilder { private static final String GOOGLE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; private static final String GOOGLE_USER_INFO_PATTERN = "{0}?id_token={1}"; - private static final String WEIBO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String WEIBO_USER_INFO_PATTERN = "{0}?{1}"; - private static final String WEIBO_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; private static final String GITEE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; private static final String GITEE_USER_INFO_PATTERN = "{0}?access_token={1}"; @@ -140,41 +137,6 @@ public class UrlBuilder { return MessageFormat.format(GITHUB_AUTHORIZE_PATTERN, AuthSource.GITHUB.authorize(), clientId, redirectUrl, getState(state)); } - /** - * 获取weibo token的接口地址 - * - * @param clientId weibo 应用的App Key - * @param clientSecret weibo 应用的App Secret - * @param code weibo 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getWeiboAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(WEIBO_ACCESS_TOKEN_PATTERN, AuthSource.WEIBO.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取weibo用户详情的接口地址 - * - * @param token weibo 应用的token - * @return full url - */ - public static String getWeiboUserInfoUrl(String token) { - return MessageFormat.format(WEIBO_USER_INFO_PATTERN, AuthSource.WEIBO.userInfo(), token); - } - - /** - * 获取weibo授权地址 - * - * @param clientId weibo 应用的Client ID - * @param redirectUrl weibo 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getWeiboAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(WEIBO_AUTHORIZE_PATTERN, AuthSource.WEIBO.authorize(), clientId, redirectUrl, getState(state)); - } - /** * 获取gitee token的接口地址 * diff --git a/src/test/java/me/zhyd/oauth/utils/AuthStateTest.java b/src/test/java/me/zhyd/oauth/utils/AuthStateTest.java index f49d382..d73489d 100644 --- a/src/test/java/me/zhyd/oauth/utils/AuthStateTest.java +++ b/src/test/java/me/zhyd/oauth/utils/AuthStateTest.java @@ -26,7 +26,7 @@ public class AuthStateTest { * null */ @Test - public void test() { + public void usage() { String source = "github"; System.out.println("\nstep1 生成state: 预期创建一个新的state..."); String state = AuthState.create(source); From 1360db60ae90cc4a352747a4d810daf360eb9e1e Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 14:59:51 +0800 Subject: [PATCH 02/44] =?UTF-8?q?:bulb:=20=E6=B7=BB=E5=8A=A0=E6=BA=90?= =?UTF-8?q?=E7=A0=81=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java | 5 +++++ src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java index 88350b3..66405ad 100644 --- a/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java @@ -13,6 +13,7 @@ public abstract class AbstractUrlBuilder { /** * 获取AccessToken的URL * + * @param accessTokenEntity * @return AccessTokenUrl */ public abstract String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity); @@ -20,6 +21,7 @@ public abstract class AbstractUrlBuilder { /** * 获取用户信息的URL * + * @param userInfoEntity * @return UserInfoUrl */ public abstract String getUserInfoUrl(AuthUserInfoEntity userInfoEntity); @@ -27,6 +29,7 @@ public abstract class AbstractUrlBuilder { /** * 获取跳转授权页面的URL * + * @param authorizeEntity * @return AuthorizeUrl */ public abstract String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity); @@ -34,6 +37,7 @@ public abstract class AbstractUrlBuilder { /** * 获取刷新token的URL * + * @param refreshTokenEntity * @return RefreshUrl */ public abstract String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity); @@ -41,6 +45,7 @@ public abstract class AbstractUrlBuilder { /** * 获取取消授权的URL * + * @param revokeEntity * @return RevokeUrl */ public abstract String getRevokeUrl(AuthRevokeEntity revokeEntity); diff --git a/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java index ddb8a6c..c594cc1 100644 --- a/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java @@ -7,6 +7,8 @@ import me.zhyd.oauth.url.entity.*; import java.text.MessageFormat; /** + * 微博相关的URL构建类 + * * @author yadong.zhang (yadong.zhang0415(a)gmail.com) * @version 1.0 * @since 1.8 From af723a8b088abef6a80bf8bd771a2d5e315158bc Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 15:11:18 +0800 Subject: [PATCH 03/44] =?UTF-8?q?:recycle:=20=E4=BB=8EUrlBuilder=E4=B8=AD?= =?UTF-8?q?=E6=8B=86=E5=88=86=E5=BE=AE=E4=BF=A1=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhyd/oauth/request/AuthWeChatRequest.java | 27 +++++++--- .../me/zhyd/oauth/url/WechatUrlBuilder.java | 49 ++++++++++++++++++ .../url/entity/AuthRefreshTokenEntity.java | 3 ++ .../java/me/zhyd/oauth/utils/UrlBuilder.java | 51 ------------------- 4 files changed, 73 insertions(+), 57 deletions(-) create mode 100644 src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java index e7ae78e..eec7c99 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java @@ -7,7 +7,11 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.WechatUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * 微信登录 @@ -18,7 +22,7 @@ import me.zhyd.oauth.utils.UrlBuilder; */ public class AuthWeChatRequest extends BaseAuthRequest { public AuthWeChatRequest(AuthConfig config) { - super(config, AuthSource.WECHAT); + super(config, AuthSource.WECHAT, new WechatUrlBuilder()); } /** @@ -29,7 +33,10 @@ public class AuthWeChatRequest extends BaseAuthRequest { */ @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getWeChatAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); return this.getToken(accessTokenUrl); } @@ -38,7 +45,10 @@ public class AuthWeChatRequest extends BaseAuthRequest { String accessToken = authToken.getAccessToken(); String openId = authToken.getOpenId(); - HttpResponse response = HttpRequest.get(UrlBuilder.getWeChatUserInfoUrl(accessToken, openId)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .openId(openId) + .build())).execute(); JSONObject object = JSONObject.parseObject(response.body()); this.checkResponse(object); @@ -63,12 +73,17 @@ public class AuthWeChatRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getWeChatAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } @Override public AuthResponse refresh(AuthToken oldToken) { - String refreshTokenUrl = UrlBuilder.getWeChatRefreshUrl(config.getClientId(), oldToken.getRefreshToken()); + String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() + .clientId(config.getClientId()) + .refreshToken(oldToken.getRefreshToken()) + .build()); return AuthResponse.builder() .code(ResponseStatus.SUCCESS.getCode()) .data(this.getToken(refreshTokenUrl)) diff --git a/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java new file mode 100644 index 0000000..7204b44 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java @@ -0,0 +1,49 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * 微信相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class WechatUrlBuilder extends AbstractUrlBuilder { + + private static final String WECHAT_AUTHORIZE_PATTERN = "{0}?appid={1}&redirect_uri={2}&response_type=code&scope=snsapi_login&state={3}#wechat_redirect"; + private static final String WECHAT_ACCESS_TOKEN_PATTERN = "{0}?appid={1}&secret={2}&code={3}&grant_type=authorization_code"; + private static final String WECHAT_REFRESH_TOKEN_PATTERN = "{0}?appid={1}&grant_type=refresh_token&refresh_token={2}"; + private static final String WECHAT_USER_INFO_PATTERN = "{0}?access_token={1}&openid={2}&lang=zh_CN"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(WECHAT_ACCESS_TOKEN_PATTERN, AuthSource.WECHAT.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(WECHAT_USER_INFO_PATTERN, AuthSource.WECHAT.userInfo(), userInfoEntity.getAccessToken(), userInfoEntity.getOpenId()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(WECHAT_AUTHORIZE_PATTERN, AuthSource.WECHAT.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return MessageFormat.format(WECHAT_REFRESH_TOKEN_PATTERN, AuthSource.WECHAT.refresh(), refreshTokenEntity.getClientId(), refreshTokenEntity.getRefreshToken()); + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java index 19d07a0..b80a754 100644 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java @@ -11,4 +11,7 @@ import lombok.Getter; @Getter @Builder public class AuthRefreshTokenEntity { + + private String clientId; + private String refreshToken; } diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java index 85187c8..c8a3255 100644 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -57,11 +57,6 @@ public class UrlBuilder { private static final String QQ_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; private static final String QQ_OPENID_PATTERN = "{0}?access_token={1}&unionid={2}"; - private static final String WECHAT_AUTHORIZE_PATTERN = "{0}?appid={1}&redirect_uri={2}&response_type=code&scope=snsapi_login&state={3}#wechat_redirect"; - private static final String WECHAT_ACCESS_TOKEN_PATTERN = "{0}?appid={1}&secret={2}&code={3}&grant_type=authorization_code"; - private static final String WECHAT_REFRESH_TOKEN_PATTERN = "{0}?appid={1}&grant_type=refresh_token&refresh_token={2}"; - private static final String WECHAT_USER_INFO_PATTERN = "{0}?access_token={1}&openid={2}&lang=zh_CN"; - private static final String TAOBAO_AUTHORIZE_PATTERN = "{0}?response_type=code&client_id={1}&redirect_uri={2}&state={3}&view=web"; private static final String TAOBAO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; @@ -440,52 +435,6 @@ public class UrlBuilder { return MessageFormat.format(ALIPAY_AUTHORIZE_PATTERN, AuthSource.ALIPAY.authorize(), clientId, redirectUrl, getState(state)); } - /** - * 获取微信 授权地址 - * - * @param clientId 微信 应用的appid - * @param redirectUrl 微信 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getWeChatAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(WECHAT_AUTHORIZE_PATTERN, AuthSource.WECHAT.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取微信 token的接口地址 - * - * @param clientId 微信 应用的appid - * @param clientSecret 微信 应用的secret - * @param code 微信 授权前的code,用来换token - * @return full url - */ - public static String getWeChatAccessTokenUrl(String clientId, String clientSecret, String code) { - return MessageFormat.format(WECHAT_ACCESS_TOKEN_PATTERN, AuthSource.WECHAT.accessToken(), clientId, clientSecret, code); - } - - /** - * 获取微信 用户详情的接口地址 - * - * @param token 微信 应用返回的 access token - * @param openId 微信 应用返回的openId - * @return full url - */ - public static String getWeChatUserInfoUrl(String token, String openId) { - return MessageFormat.format(WECHAT_USER_INFO_PATTERN, AuthSource.WECHAT.userInfo(), token, openId); - } - - /** - * 获取微信 刷新令牌 地址 - * - * @param clientId 微信 应用的appid - * @param refreshToken 微信 应用返回的刷新token - * @return full url - */ - public static String getWeChatRefreshUrl(String clientId, String refreshToken) { - return MessageFormat.format(WECHAT_REFRESH_TOKEN_PATTERN, AuthSource.WECHAT.refresh(), clientId, refreshToken); - } - /** * 获取Taobao token的接口地址: 淘宝的授权登录,在这一步就会返回用户信息 * From 6b196456a168d21942c01668e10f89473451000b Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 15:37:44 +0800 Subject: [PATCH 04/44] =?UTF-8?q?:recycle:=20=E4=BB=8EUrlBuilder=E4=B8=AD?= =?UTF-8?q?=E6=8B=86=E5=88=86qq=E3=80=81=E6=B7=98=E5=AE=9D=E3=80=81?= =?UTF-8?q?=E8=85=BE=E8=AE=AF=E4=BA=91=E5=92=8C=E5=A4=B4=E6=9D=A1=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/zhyd/oauth/request/AuthQqRequest.java | 26 ++- .../zhyd/oauth/request/AuthTaobaoRequest.java | 16 +- .../request/AuthTencentCloudRequest.java | 20 ++- .../oauth/request/AuthToutiaoRequest.java | 26 ++- .../me/zhyd/oauth/url/AbstractUrlBuilder.java | 13 ++ .../java/me/zhyd/oauth/url/QqUrlBuilder.java | 56 +++++++ .../me/zhyd/oauth/url/TaobaoUrlBuilder.java | 49 ++++++ .../oauth/url/TencentCloudUrlBuilder.java | 50 ++++++ .../me/zhyd/oauth/url/ToutiaoUrlBuilder.java | 50 ++++++ .../oauth/url/entity/AuthUserInfoEntity.java | 4 + .../java/me/zhyd/oauth/utils/UrlBuilder.java | 157 ------------------ 11 files changed, 286 insertions(+), 181 deletions(-) create mode 100644 src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java diff --git a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java index e9bfffe..49b00a5 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java @@ -11,9 +11,12 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.QqUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; import me.zhyd.oauth.utils.StringUtils; -import me.zhyd.oauth.utils.UrlBuilder; import java.util.Map; @@ -27,13 +30,15 @@ import java.util.Map; */ public class AuthQqRequest extends BaseAuthRequest { public AuthQqRequest(AuthConfig config) { - super(config, AuthSource.QQ); + super(config, AuthSource.QQ, new QqUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getQqAccessTokenUrl(config.getClientId(), config.getClientSecret(), - authCallback.getCode(), config.getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); Map accessTokenObject = GlobalAuthUtil.parseStringToMap(response.body()); if (!accessTokenObject.containsKey("access_token")) { @@ -50,7 +55,11 @@ public class AuthQqRequest extends BaseAuthRequest { protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); String openId = this.getOpenId(authToken); - HttpResponse response = HttpRequest.get(UrlBuilder.getQqUserInfoUrl(config.getClientId(), accessToken, openId)) + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .clientId(config.getClientId()) + .accessToken(accessToken) + .openId(openId) + .build())) .execute(); JSONObject object = JSONObject.parseObject(response.body()); if (object.getIntValue("ret") != 0) { @@ -81,13 +90,14 @@ public class AuthQqRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getQqAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } private String getOpenId(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getQqOpenidUrl("https://graph.qq.com/oauth2.0/me", accessToken, config.isUnionId())) - .execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getOpenIdUrl(accessToken, config.isUnionId())).execute(); if (response.isOk()) { String body = response.body(); String removePrefix = StrUtil.replace(body, "callback(", ""); diff --git a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index 8add7cd..c1016e0 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java @@ -10,8 +10,10 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.TaobaoUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; -import me.zhyd.oauth.utils.UrlBuilder; /** * 淘宝登录 @@ -23,7 +25,7 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthTaobaoRequest extends BaseAuthRequest { public AuthTaobaoRequest(AuthConfig config) { - super(config, AuthSource.TAOBAO); + super(config, AuthSource.TAOBAO, new TaobaoUrlBuilder()); } @Override @@ -34,8 +36,10 @@ public class AuthTaobaoRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessCode = authToken.getAccessCode(); - HttpResponse response = HttpRequest.post(UrlBuilder.getTaobaoAccessTokenUrl(this.config.getClientId(), this.config - .getClientSecret(), accessCode, this.config.getRedirectUri())).execute(); + HttpResponse response = HttpRequest.post(this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(accessCode) + .build())).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { throw new AuthException(ResponseStatus.FAILURE + ":" + accessTokenObject.getString("error_description")); @@ -64,6 +68,8 @@ public class AuthTaobaoRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getTaobaoAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java index 4841115..75fcc40 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java @@ -10,7 +10,10 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.TencentCloudUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * 腾讯云登录 @@ -22,12 +25,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthTencentCloudRequest extends BaseAuthRequest { public AuthTencentCloudRequest(AuthConfig config) { - super(config, AuthSource.TENCENT_CLOUD); + super(config, AuthSource.TENCENT_CLOUD, new TencentCloudUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getTencentCloudAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.getIntValue("code") != 0) { @@ -43,7 +49,9 @@ public class AuthTencentCloudRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getTencentCloudUserInfoUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); JSONObject object = JSONObject.parseObject(response.body()); if (object.getIntValue("code") != 0) { throw new AuthException(object.getString("msg")); @@ -72,6 +80,8 @@ public class AuthTencentCloudRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getTencentCloudAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java index 878f630..f5f9b3d 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java @@ -7,8 +7,14 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.enums.AuthToutiaoErrorCode; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.*; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthToken; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.ToutiaoUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * 今日头条登录 @@ -20,12 +26,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthToutiaoRequest extends BaseAuthRequest { public AuthToutiaoRequest(AuthConfig config) { - super(config, AuthSource.TOUTIAO); + super(config, AuthSource.TOUTIAO, new ToutiaoUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getToutiaoAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); @@ -42,7 +51,10 @@ public class AuthToutiaoRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { - HttpResponse userResponse = HttpRequest.get(UrlBuilder.getToutiaoUserInfoUrl(config.getClientId(), authToken.getAccessToken())).execute(); + HttpResponse userResponse = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .clientId(config.getClientId()) + .accessToken(authToken.getAccessToken()) + .build())).execute(); JSONObject userProfile = JSONObject.parseObject(userResponse.body()); @@ -74,6 +86,8 @@ public class AuthToutiaoRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getToutiaoAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java index 66405ad..640aa13 100644 --- a/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java @@ -1,5 +1,7 @@ package me.zhyd.oauth.url; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.request.ResponseStatus; import me.zhyd.oauth.url.entity.*; import me.zhyd.oauth.utils.StringUtils; @@ -50,6 +52,17 @@ public abstract class AbstractUrlBuilder { */ public abstract String getRevokeUrl(AuthRevokeEntity revokeEntity); + /** + * 获取openId的地址,目前只有qq平台需要,故不需要子类强制重写 + * + * @param accessToken + * @param unionid + * @return + */ + public String getOpenIdUrl(String accessToken, boolean unionid) { + throw new AuthException(ResponseStatus.NOT_IMPLEMENTED); + } + /** * 获取state,如果为空, 则默认去当前日期的时间戳 * diff --git a/src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java new file mode 100644 index 0000000..352f030 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java @@ -0,0 +1,56 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * QQ相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class QqUrlBuilder extends AbstractUrlBuilder { + + private static final String QQ_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; + private static final String QQ_USER_INFO_PATTERN = "{0}?oauth_consumer_key={1}&access_token={2}&openid={3}"; + private static final String QQ_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; + private static final String QQ_OPENID_PATTERN = "{0}?access_token={1}&unionid={2}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(QQ_ACCESS_TOKEN_PATTERN, AuthSource.QQ.accessToken(), config.getClientId(), + config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(QQ_USER_INFO_PATTERN, AuthSource.QQ.userInfo(), userInfoEntity.getClientId(), userInfoEntity.getAccessToken(), userInfoEntity.getOpenId()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(QQ_AUTHORIZE_PATTERN, AuthSource.QQ.authorize(), config.getClientId(), + config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } + + @Override + public String getOpenIdUrl(String accessToken, boolean unionid) { + return MessageFormat.format(QQ_OPENID_PATTERN, "https://graph.qq.com/oauth2.0/me", accessToken, unionid ? 1 : 0); + } +} diff --git a/src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java new file mode 100644 index 0000000..53d75b2 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java @@ -0,0 +1,49 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * 淘宝相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class TaobaoUrlBuilder extends AbstractUrlBuilder { + + private static final String TAOBAO_AUTHORIZE_PATTERN = "{0}?response_type=code&client_id={1}&redirect_uri={2}&state={3}&view=web"; + private static final String TAOBAO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(TAOBAO_ACCESS_TOKEN_PATTERN, AuthSource.TAOBAO.accessToken(), config.getClientId(), + config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return null; + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(TAOBAO_AUTHORIZE_PATTERN, AuthSource.TAOBAO.authorize(), config.getClientId(), + config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java new file mode 100644 index 0000000..74f07ad --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java @@ -0,0 +1,50 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * 今日头条相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class TencentCloudUrlBuilder extends AbstractUrlBuilder { + + private static final String TENCENT_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; + private static final String TENCENT_USER_INFO_PATTERN = "{0}?access_token={1}"; + private static final String TENCENT_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(TENCENT_ACCESS_TOKEN_PATTERN, AuthSource.TENCENT_CLOUD.accessToken(), config.getClientId(), + config.getClientSecret(), accessTokenEntity.getCode()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(TENCENT_USER_INFO_PATTERN, AuthSource.TENCENT_CLOUD.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(TENCENT_AUTHORIZE_PATTERN, AuthSource.TENCENT_CLOUD.authorize(), config.getClientId(), + config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java new file mode 100644 index 0000000..3ef28f2 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java @@ -0,0 +1,50 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * 今日头条相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class ToutiaoUrlBuilder extends AbstractUrlBuilder { + + private static final String TOUTIAO_ACCESS_TOKEN_PATTERN = "{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorize_code"; + private static final String TOUTIAO_USER_INFO_PATTERN = "{0}?client_key={1}&access_token={2}"; + private static final String TOUTIAO_AUTHORIZE_PATTERN = "{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&auth_only=1&display=0"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(TOUTIAO_ACCESS_TOKEN_PATTERN, AuthSource.TOUTIAO.accessToken(), config.getClientId(), + config.getClientSecret(), accessTokenEntity.getCode()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(TOUTIAO_USER_INFO_PATTERN, AuthSource.TOUTIAO.userInfo(), userInfoEntity.getClientId(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(TOUTIAO_AUTHORIZE_PATTERN, AuthSource.TOUTIAO.authorize(), config.getClientId(), + config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java index 852d2d2..3e2a856 100644 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java @@ -23,4 +23,8 @@ public class AuthUserInfoEntity { * 额外的属性 */ private String extra; + /** + * client key + */ + private String clientId; } diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java index c8a3255..c77aee9 100644 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -42,23 +42,12 @@ public class UrlBuilder { private static final String CODING_USER_INFO_PATTERN = "{0}?access_token={1}"; private static final String CODING_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; - private static final String TENCENT_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; - private static final String TENCENT_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String TENCENT_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; - private static final String OSCHINA_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}&dataType=json"; private static final String OSCHINA_USER_INFO_PATTERN = "{0}?access_token={1}&dataType=json"; private static final String OSCHINA_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; private static final String ALIPAY_AUTHORIZE_PATTERN = "{0}?app_id={1}&scope=auth_user&redirect_uri={2}&state={3}"; - private static final String QQ_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String QQ_USER_INFO_PATTERN = "{0}?oauth_consumer_key={1}&access_token={2}&openid={3}"; - private static final String QQ_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - private static final String QQ_OPENID_PATTERN = "{0}?access_token={1}&unionid={2}"; - - private static final String TAOBAO_AUTHORIZE_PATTERN = "{0}?response_type=code&client_id={1}&redirect_uri={2}&state={3}&view=web"; - private static final String TAOBAO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; private static final String FACEBOOK_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope="; private static final String FACEBOOK_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; @@ -84,9 +73,6 @@ public class UrlBuilder { private static final String MI_USER_INFO_PATTERN = "{0}?clientId={1}&token={2}"; private static final String MI_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; - private static final String TOUTIAO_ACCESS_TOKEN_PATTERN = "{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorize_code"; - private static final String TOUTIAO_USER_INFO_PATTERN = "{0}?client_key={1}&access_token={2}"; - private static final String TOUTIAO_AUTHORIZE_PATTERN = "{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&auth_only=1&display=0"; /** * 获取state,如果为空, 则默认去当前日期的时间戳 @@ -305,40 +291,6 @@ public class UrlBuilder { return MessageFormat.format(CODING_AUTHORIZE_PATTERN, AuthSource.CODING.authorize(), clientId, redirectUrl, getState(state)); } - /** - * 获取腾讯云开发者平台 token的接口地址 - * - * @param clientId coding 应用的App Key - * @param clientSecret coding 应用的App Secret - * @param code coding 授权前的code,用来换token - * @return full url - */ - public static String getTencentCloudAccessTokenUrl(String clientId, String clientSecret, String code) { - return MessageFormat.format(TENCENT_ACCESS_TOKEN_PATTERN, AuthSource.TENCENT_CLOUD.accessToken(), clientId, clientSecret, code); - } - - /** - * 获取腾讯云开发者平台用户详情的接口地址 - * - * @param token coding 应用的token - * @return full url - */ - public static String getTencentCloudUserInfoUrl(String token) { - return MessageFormat.format(TENCENT_USER_INFO_PATTERN, AuthSource.TENCENT_CLOUD.userInfo(), token); - } - - /** - * 获取腾讯云开发者平台授权地址 - * - * @param clientId coding 应用的Client ID - * @param redirectUrl coding 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getTencentCloudAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(TENCENT_AUTHORIZE_PATTERN, AuthSource.TENCENT_CLOUD.authorize(), clientId, redirectUrl, getState(state)); - } - /** * 获取oschina token的接口地址 * @@ -374,55 +326,6 @@ public class UrlBuilder { return MessageFormat.format(OSCHINA_AUTHORIZE_PATTERN, AuthSource.OSCHINA.authorize(), clientId, redirectUrl, getState(state)); } - /** - * 获取qq token的接口地址 - * - * @param clientId qq 应用的App Key - * @param clientSecret qq 应用的App Secret - * @param code qq 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getQqAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(QQ_ACCESS_TOKEN_PATTERN, AuthSource.QQ.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取qq用户详情的接口地址 - * - * @param clientId qq 应用的clientId - * @param token qq 应用的token - * @param openId qq 应用的openId - * @return full url - */ - public static String getQqUserInfoUrl(String clientId, String token, String openId) { - return MessageFormat.format(QQ_USER_INFO_PATTERN, AuthSource.QQ.userInfo(), clientId, token, openId); - } - - /** - * 获取qq授权地址 - * - * @param clientId qq 应用的Client ID - * @param redirectUrl qq 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getQqAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(QQ_AUTHORIZE_PATTERN, AuthSource.QQ.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取qq授权地址 - * - * @param url 获取qqopenid的api接口地址 - * @param token qq 应用授权的token - * @param unionid 是否需要获取unionid,默认为false。注:获取unionid需要单独发送邮件申请权限,请个人视情况而定。参考链接:http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D - * @return full url - */ - public static String getQqOpenidUrl(String url, String token, boolean unionid) { - return MessageFormat.format(QQ_OPENID_PATTERN, url, token, unionid ? 1 : 0); - } - /** * 获取alipay授权地址 * @@ -435,31 +338,6 @@ public class UrlBuilder { return MessageFormat.format(ALIPAY_AUTHORIZE_PATTERN, AuthSource.ALIPAY.authorize(), clientId, redirectUrl, getState(state)); } - /** - * 获取Taobao token的接口地址: 淘宝的授权登录,在这一步就会返回用户信息 - * - * @param clientId taobao 应用的App Key - * @param clientSecret taobao 应用的App Secret - * @param code taobao 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getTaobaoAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(TAOBAO_ACCESS_TOKEN_PATTERN, AuthSource.TAOBAO.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取Taobao授权地址 - * - * @param clientId Taobao 应用的Client ID - * @param redirectUrl Taobao 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getTaobaoAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(TAOBAO_AUTHORIZE_PATTERN, AuthSource.TAOBAO.authorize(), clientId, redirectUrl, getState(state)); - } - /** * 获取Google授权地址 * @@ -717,39 +595,4 @@ public class UrlBuilder { public static String getMiRefreshUrl(String clientId, String clientSecret, String redirectUrl, String refreshToken) { return MessageFormat.format(MI_REFRESH_TOKEN_PATTERN, AuthSource.MI.refresh(), clientId, clientSecret, redirectUrl, refreshToken); } - - /** - * 获取今日头条授权地址 - * - * @param clientId 今日头条 应用的Client ID - * @param redirectUrl 今日头条 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getToutiaoAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(TOUTIAO_AUTHORIZE_PATTERN, AuthSource.TOUTIAO.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取今日头条 token的接口地址 - * - * @param clientId 今日头条 应用的Client ID - * @param clientSecret 今日头条 应用的Client Secret - * @param code 今日头条 授权前的code,用来换token - * @return full url - */ - public static String getToutiaoAccessTokenUrl(String clientId, String clientSecret, String code) { - return MessageFormat.format(TOUTIAO_ACCESS_TOKEN_PATTERN, AuthSource.TOUTIAO.accessToken(), clientId, clientSecret, code); - } - - /** - * 获取今日头条用户详情的接口地址 - * - * @param clientId 今日头条 应用的client_key - * @param token token - * @return full url - */ - public static String getToutiaoUserInfoUrl(String clientId, String token) { - return MessageFormat.format(TOUTIAO_USER_INFO_PATTERN, AuthSource.TOUTIAO.userInfo(), clientId, token); - } } From ec31b7cbf74418d8f6971dd85531cee85aaf3cfb Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 15:50:44 +0800 Subject: [PATCH 05/44] =?UTF-8?q?:recycle:=20=E4=BB=8EUrlBuilder=E4=B8=AD?= =?UTF-8?q?=E6=8B=86=E5=88=86=E5=B0=8F=E7=B1=B3=E5=92=8COSChina=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/zhyd/oauth/request/AuthMiRequest.java | 25 +++-- .../oauth/request/AuthOschinaRequest.java | 21 +++-- .../zhyd/oauth/request/AuthWeChatRequest.java | 2 +- .../java/me/zhyd/oauth/url/MiUrlBuilder.java | 50 ++++++++++ .../me/zhyd/oauth/url/OschinaUrlBuilder.java | 50 ++++++++++ .../me/zhyd/oauth/url/WechatUrlBuilder.java | 2 +- .../url/entity/AuthRefreshTokenEntity.java | 3 +- .../java/me/zhyd/oauth/utils/UrlBuilder.java | 91 ------------------- 8 files changed, 138 insertions(+), 106 deletions(-) create mode 100644 src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java diff --git a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java index 6ca5403..cf453bc 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java @@ -8,7 +8,10 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -28,7 +31,10 @@ public class AuthMiRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getMiAccessTokenUrl(config.getClientId(), config.getClientSecret(), config.getRedirectUri(), authCallback.getCode()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); return getToken(accessTokenUrl); } @@ -56,7 +62,10 @@ public class AuthMiRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { // 获取用户信息 - HttpResponse userResponse = HttpRequest.get(UrlBuilder.getMiUserInfoUrl(config.getClientId(), authToken.getAccessToken())) + HttpResponse userResponse = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .clientId(config.getClientId()) + .accessToken(authToken.getAccessToken()) + .build())) .execute(); JSONObject userProfile = JSONObject.parseObject(userResponse.body()); @@ -98,7 +107,9 @@ public class AuthMiRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getMiAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } /** @@ -109,8 +120,10 @@ public class AuthMiRequest extends BaseAuthRequest { */ @Override public AuthResponse refresh(AuthToken authToken) { - String miRefreshUrl = UrlBuilder.getMiRefreshUrl(config.getClientId(), config.getClientSecret(), config.getRedirectUri(), authToken - .getRefreshToken()); + String miRefreshUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() + .config(config) + .refreshToken(authToken.getRefreshToken()) + .build()); return AuthResponse.builder().code(ResponseStatus.SUCCESS.getCode()).data(getToken(miRefreshUrl)).build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java index fe0110d..07c069c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java @@ -10,7 +10,10 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.OschinaUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * oschina登录 @@ -22,13 +25,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthOschinaRequest extends BaseAuthRequest { public AuthOschinaRequest(AuthConfig config) { - super(config, AuthSource.OSCHINA); + super(config, AuthSource.OSCHINA, new OschinaUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getOschinaAccessTokenUrl(config.getClientId(), config.getClientSecret(), - authCallback.getCode(), config.getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { @@ -45,7 +50,9 @@ public class AuthOschinaRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getOschinaUserInfoUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); JSONObject object = JSONObject.parseObject(response.body()); if (object.containsKey("error")) { throw new AuthException(object.getString("error_description")); @@ -71,6 +78,8 @@ public class AuthOschinaRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getOschinaAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java index eec7c99..c3d3a5e 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java @@ -81,7 +81,7 @@ public class AuthWeChatRequest extends BaseAuthRequest { @Override public AuthResponse refresh(AuthToken oldToken) { String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() - .clientId(config.getClientId()) + .config(config) .refreshToken(oldToken.getRefreshToken()) .build()); return AuthResponse.builder() diff --git a/src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java new file mode 100644 index 0000000..982d25a --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java @@ -0,0 +1,50 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * 小米相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class MiUrlBuilder extends AbstractUrlBuilder { + + private static final String MI_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&response_type=code&scope=1%203%204%206&state={3}&skip_confirm=false"; + private static final String MI_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&code={4}&grant_type=authorization_code"; + private static final String MI_USER_INFO_PATTERN = "{0}?clientId={1}&token={2}"; + private static final String MI_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(MI_ACCESS_TOKEN_PATTERN, AuthSource.MI.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), accessTokenEntity.getCode()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(MI_USER_INFO_PATTERN, AuthSource.MI.userInfo(), userInfoEntity.getClientId(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(MI_AUTHORIZE_PATTERN, AuthSource.MI.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + AuthConfig config = refreshTokenEntity.getConfig(); + return MessageFormat.format(MI_REFRESH_TOKEN_PATTERN, AuthSource.MI.refresh(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), refreshTokenEntity.getRefreshToken()); + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java new file mode 100644 index 0000000..8fdb42b --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java @@ -0,0 +1,50 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * OSChina相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class OschinaUrlBuilder extends AbstractUrlBuilder { + + private static final String OSCHINA_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}&dataType=json"; + private static final String OSCHINA_USER_INFO_PATTERN = "{0}?access_token={1}&dataType=json"; + private static final String OSCHINA_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(OSCHINA_ACCESS_TOKEN_PATTERN, AuthSource.OSCHINA.accessToken(), config.getClientId(), + config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(OSCHINA_USER_INFO_PATTERN, AuthSource.OSCHINA.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(OSCHINA_AUTHORIZE_PATTERN, AuthSource.OSCHINA.authorize(), config.getClientId(), + config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java index 7204b44..eee7082 100644 --- a/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java @@ -39,7 +39,7 @@ public class WechatUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { - return MessageFormat.format(WECHAT_REFRESH_TOKEN_PATTERN, AuthSource.WECHAT.refresh(), refreshTokenEntity.getClientId(), refreshTokenEntity.getRefreshToken()); + return MessageFormat.format(WECHAT_REFRESH_TOKEN_PATTERN, AuthSource.WECHAT.refresh(), refreshTokenEntity.getConfig().getClientId(), refreshTokenEntity.getRefreshToken()); } @Override diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java index b80a754..0b26112 100644 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java @@ -2,6 +2,7 @@ package me.zhyd.oauth.url.entity; import lombok.Builder; import lombok.Getter; +import me.zhyd.oauth.config.AuthConfig; /** * @author yadong.zhang (yadong.zhang0415(a)gmail.com) @@ -12,6 +13,6 @@ import lombok.Getter; @Builder public class AuthRefreshTokenEntity { - private String clientId; + private AuthConfig config; private String refreshToken; } diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java index c77aee9..5b16cb0 100644 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -42,10 +42,6 @@ public class UrlBuilder { private static final String CODING_USER_INFO_PATTERN = "{0}?access_token={1}"; private static final String CODING_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; - private static final String OSCHINA_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}&dataType=json"; - private static final String OSCHINA_USER_INFO_PATTERN = "{0}?access_token={1}&dataType=json"; - private static final String OSCHINA_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - private static final String ALIPAY_AUTHORIZE_PATTERN = "{0}?app_id={1}&scope=auth_user&redirect_uri={2}&state={3}"; @@ -68,10 +64,6 @@ public class UrlBuilder { private static final String MICROSOFT_USER_INFO_PATTERN = "{0}"; private static final String MICROSOFT_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; - private static final String MI_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&response_type=code&scope=1%203%204%206&state={3}&skip_confirm=false"; - private static final String MI_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&code={4}&grant_type=authorization_code"; - private static final String MI_USER_INFO_PATTERN = "{0}?clientId={1}&token={2}"; - private static final String MI_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; /** @@ -291,41 +283,6 @@ public class UrlBuilder { return MessageFormat.format(CODING_AUTHORIZE_PATTERN, AuthSource.CODING.authorize(), clientId, redirectUrl, getState(state)); } - /** - * 获取oschina token的接口地址 - * - * @param clientId oschina 应用的App Key - * @param clientSecret oschina 应用的App Secret - * @param code oschina 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getOschinaAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(OSCHINA_ACCESS_TOKEN_PATTERN, AuthSource.OSCHINA.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取oschina用户详情的接口地址 - * - * @param token oschina 应用的token - * @return full url - */ - public static String getOschinaUserInfoUrl(String token) { - return MessageFormat.format(OSCHINA_USER_INFO_PATTERN, AuthSource.OSCHINA.userInfo(), token); - } - - /** - * 获取oschina授权地址 - * - * @param clientId oschina 应用的Client ID - * @param redirectUrl oschina 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getOschinaAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(OSCHINA_AUTHORIZE_PATTERN, AuthSource.OSCHINA.authorize(), clientId, redirectUrl, getState(state)); - } - /** * 获取alipay授权地址 * @@ -547,52 +504,4 @@ public class UrlBuilder { return MessageFormat.format(MICROSOFT_REFRESH_TOKEN_PATTERN, AuthSource.MICROSOFT.refresh(), clientId, clientSecret, redirectUrl, refreshToken); } - /** - * 获取小米授权地址 - * - * @param clientId 小米 应用的Client ID - * @param redirectUrl 小米 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getMiAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(MI_AUTHORIZE_PATTERN, AuthSource.MI.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取小米 token的接口地址 - * - * @param clientId 小米 应用的Client ID - * @param clientSecret 小米 应用的Client Secret - * @param redirectUrl 小米 应用授权成功后的回调地址 - * @param code 小米 授权前的code,用来换token - * @return full url - */ - public static String getMiAccessTokenUrl(String clientId, String clientSecret, String redirectUrl, String code) { - return MessageFormat.format(MI_ACCESS_TOKEN_PATTERN, AuthSource.MI.accessToken(), clientId, clientSecret, redirectUrl, code); - } - - /** - * 获取小米用户详情的接口地址 - * - * @param clientId 小米 应用的client_key - * @param token token - * @return full url - */ - public static String getMiUserInfoUrl(String clientId, String token) { - return MessageFormat.format(MI_USER_INFO_PATTERN, AuthSource.MI.userInfo(), clientId, token); - } - - /** - * 获取小米 刷新令牌 地址 - * - * @param clientId 小米 应用的client_key - * @param clientSecret 小米 应用的Client Secret - * @param redirectUrl 小米 应用授权成功后的回调地址 - * @param refreshToken 小米 应用返回的refresh_token - * @return full url - */ - public static String getMiRefreshUrl(String clientId, String clientSecret, String redirectUrl, String refreshToken) { - return MessageFormat.format(MI_REFRESH_TOKEN_PATTERN, AuthSource.MI.refresh(), clientId, clientSecret, redirectUrl, refreshToken); - } } From 4f272348dade1c5eda89fe1d40f2e27a01c1f27c Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 16:12:56 +0800 Subject: [PATCH 06/44] =?UTF-8?q?:recycle:=20=E4=BB=8EUrlBuilder=E4=B8=AD?= =?UTF-8?q?=E6=8B=86=E5=88=86github=E3=80=81google=E3=80=81linkedin?= =?UTF-8?q?=E5=92=8Cmicrosoft=E7=9B=B8=E5=85=B3=E7=9A=84URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhyd/oauth/request/AuthGithubRequest.java | 20 +- .../zhyd/oauth/request/AuthGoogleRequest.java | 21 +- .../oauth/request/AuthLinkedinRequest.java | 26 ++- .../me/zhyd/oauth/request/AuthMiRequest.java | 3 +- .../oauth/request/AuthMicrosoftRequest.java | 26 ++- .../me/zhyd/oauth/url/GithubUrlBuilder.java | 48 +++++ .../me/zhyd/oauth/url/GoogleUrlBuilder.java | 48 +++++ .../me/zhyd/oauth/url/LinkedinUrlBuilder.java | 50 +++++ .../zhyd/oauth/url/MicrosoftUrlBuilder.java | 50 +++++ .../java/me/zhyd/oauth/utils/UrlBuilder.java | 180 ------------------ 10 files changed, 264 insertions(+), 208 deletions(-) create mode 100644 src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java diff --git a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java index bd60e1a..242f7e6 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java @@ -10,8 +10,11 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.GithubUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; -import me.zhyd.oauth.utils.UrlBuilder; import java.util.Map; @@ -25,12 +28,15 @@ import java.util.Map; public class AuthGithubRequest extends BaseAuthRequest { public AuthGithubRequest(AuthConfig config) { - super(config, AuthSource.GITHUB); + super(config, AuthSource.GITHUB, new GithubUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getGithubAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode(), config.getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); Map res = GlobalAuthUtil.parseStringToMap(response.body()); if (res.containsKey("error")) { @@ -42,7 +48,9 @@ public class AuthGithubRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getGithubUserInfoUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); return AuthUser.builder() @@ -68,6 +76,8 @@ public class AuthGithubRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getGithubAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java index dea8f54..bc45d37 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java @@ -10,7 +10,10 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.GoogleUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * Google登录 @@ -22,13 +25,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthGoogleRequest extends BaseAuthRequest { public AuthGoogleRequest(AuthConfig config) { - super(config, AuthSource.GOOGLE); + super(config, AuthSource.GOOGLE, new GoogleUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getGoogleAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode(), config - .getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); @@ -49,7 +54,9 @@ public class AuthGoogleRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getIdToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getGoogleUserInfoUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); return AuthUser.builder() @@ -72,6 +79,8 @@ public class AuthGoogleRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getGoogleAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index 23cfa6b..756aeaa 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -8,8 +8,12 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; +import me.zhyd.oauth.url.LinkedinUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.StringUtils; -import me.zhyd.oauth.utils.UrlBuilder; /** @@ -22,20 +26,22 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthLinkedinRequest extends BaseAuthRequest { public AuthLinkedinRequest(AuthConfig config) { - super(config, AuthSource.LINKEDIN); + super(config, AuthSource.LINKEDIN, new LinkedinUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getLinkedinAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode(), config - .getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); return this.getToken(accessTokenUrl); } @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getLinkedinUserInfoUrl()) + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder().build())) .header("Host", "api.linkedin.com") .header("Connection", "Keep-Alive") .header("Authorization", "Bearer " + accessToken) @@ -93,7 +99,9 @@ public class AuthLinkedinRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getLinkedinAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } private String getUserEmail(String accessToken) { @@ -128,8 +136,10 @@ public class AuthLinkedinRequest extends BaseAuthRequest { if (StringUtils.isEmpty(oldToken.getRefreshToken())) { throw new AuthException(ResponseStatus.UNSUPPORTED); } - String refreshTokenUrl = UrlBuilder.getLinkedinRefreshUrl(config.getClientId(), config.getClientSecret(), oldToken - .getRefreshToken()); + String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() + .config(config) + .refreshToken(oldToken.getRefreshToken()) + .build()); return AuthResponse.builder() .code(ResponseStatus.SUCCESS.getCode()) .data(this.getToken(refreshTokenUrl)) diff --git a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java index cf453bc..265b649 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java @@ -8,6 +8,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; +import me.zhyd.oauth.url.MiUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; @@ -26,7 +27,7 @@ public class AuthMiRequest extends BaseAuthRequest { private static final String PREFIX = "&&&START&&&"; public AuthMiRequest(AuthConfig config) { - super(config, AuthSource.MI); + super(config, AuthSource.MI, new MiUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java index cbf3252..9c3d554 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java @@ -8,7 +8,11 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.MicrosoftUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.util.HashMap; import java.util.Map; @@ -22,13 +26,15 @@ import java.util.Map; */ public class AuthMicrosoftRequest extends BaseAuthRequest { public AuthMicrosoftRequest(AuthConfig config) { - super(config, AuthSource.MICROSOFT); + super(config, AuthSource.MICROSOFT, new MicrosoftUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getMicrosoftAccessTokenUrl(config.getClientId(), config.getClientSecret(), config - .getRedirectUri(), authCallback.getCode()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); return getToken(accessTokenUrl); } @@ -72,7 +78,7 @@ public class AuthMicrosoftRequest extends BaseAuthRequest { String token = authToken.getAccessToken(); String tokenType = authToken.getTokenType(); String jwt = tokenType + " " + token; - HttpResponse response = HttpRequest.get(UrlBuilder.getMicrosoftUserInfoUrl()) + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder().build())) .header("Authorization", jwt) .execute(); String userInfo = response.body(); @@ -96,7 +102,9 @@ public class AuthMicrosoftRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getMicrosoftAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } /** @@ -107,8 +115,10 @@ public class AuthMicrosoftRequest extends BaseAuthRequest { */ @Override public AuthResponse refresh(AuthToken authToken) { - String refreshTokenUrl = UrlBuilder.getMicrosoftRefreshUrl(config.getClientId(), config.getClientSecret(), config - .getRedirectUri(), authToken.getRefreshToken()); + String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() + .config(config) + .refreshToken(authToken.getRefreshToken()) + .build()); return AuthResponse.builder().code(ResponseStatus.SUCCESS.getCode()).data(getToken(refreshTokenUrl)).build(); } diff --git a/src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java new file mode 100644 index 0000000..21ee126 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java @@ -0,0 +1,48 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * Github相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class GithubUrlBuilder extends AbstractUrlBuilder { + + private static final String GITHUB_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}"; + private static final String GITHUB_USER_INFO_PATTERN = "{0}?access_token={1}"; + private static final String GITHUB_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(GITHUB_ACCESS_TOKEN_PATTERN, AuthSource.GITHUB.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(GITHUB_USER_INFO_PATTERN, AuthSource.GITHUB.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(GITHUB_AUTHORIZE_PATTERN, AuthSource.GITHUB.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java new file mode 100644 index 0000000..6b2a173 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java @@ -0,0 +1,48 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * Google相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class GoogleUrlBuilder extends AbstractUrlBuilder { + + private static final String GOOGLE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&scope=openid%20email%20profile&redirect_uri={2}&state={3}"; + private static final String GOOGLE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; + private static final String GOOGLE_USER_INFO_PATTERN = "{0}?id_token={1}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(GOOGLE_ACCESS_TOKEN_PATTERN, AuthSource.GOOGLE.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(GOOGLE_USER_INFO_PATTERN, AuthSource.GOOGLE.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(GOOGLE_AUTHORIZE_PATTERN, AuthSource.GOOGLE.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java new file mode 100644 index 0000000..78041a2 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java @@ -0,0 +1,50 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * Microsoft相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class LinkedinUrlBuilder extends AbstractUrlBuilder { + + private static final String LINKEDIN_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope=r_liteprofile%20r_emailaddress%20w_member_social"; + private static final String LINKEDIN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; + private static final String LINKEDIN_USER_INFO_PATTERN = "{0}?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))"; + private static final String LINKEDIN_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&refresh_token={3}&grant_type=refresh_token"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(LINKEDIN_ACCESS_TOKEN_PATTERN, AuthSource.LINKEDIN.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(LINKEDIN_USER_INFO_PATTERN, AuthSource.LINKEDIN.userInfo()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(LINKEDIN_AUTHORIZE_PATTERN, AuthSource.LINKEDIN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + AuthConfig config = refreshTokenEntity.getConfig(); + return MessageFormat.format(LINKEDIN_REFRESH_TOKEN_PATTERN, AuthSource.LINKEDIN.refresh(), config.getClientId(), config.getClientSecret(), refreshTokenEntity.getRefreshToken()); + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java new file mode 100644 index 0000000..0d29b74 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java @@ -0,0 +1,50 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * Microsoft相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class MicrosoftUrlBuilder extends AbstractUrlBuilder { + + private static final String MICROSOFT_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&response_mode=query&scope=offline_access%20user.read%20mail.read&state={3}"; + private static final String MICROSOFT_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&code={4}&grant_type=authorization_code"; + private static final String MICROSOFT_USER_INFO_PATTERN = "{0}"; + private static final String MICROSOFT_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(MICROSOFT_ACCESS_TOKEN_PATTERN, AuthSource.MICROSOFT.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), accessTokenEntity.getCode()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(MICROSOFT_USER_INFO_PATTERN, AuthSource.MICROSOFT.userInfo()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(MICROSOFT_AUTHORIZE_PATTERN, AuthSource.MICROSOFT.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + AuthConfig config = refreshTokenEntity.getConfig(); + return MessageFormat.format(MICROSOFT_REFRESH_TOKEN_PATTERN, AuthSource.MICROSOFT.refresh(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), refreshTokenEntity.getRefreshToken()); + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java index 5b16cb0..ba1d600 100644 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -13,13 +13,6 @@ import java.text.MessageFormat; */ public class UrlBuilder { - private static final String GITHUB_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}"; - private static final String GITHUB_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String GITHUB_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}"; - - private static final String GOOGLE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&scope=openid%20email%20profile&redirect_uri={2}&state={3}"; - private static final String GOOGLE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; - private static final String GOOGLE_USER_INFO_PATTERN = "{0}?id_token={1}"; private static final String GITEE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; @@ -54,16 +47,6 @@ public class UrlBuilder { private static final String DOUYIN_USER_INFO_PATTERN = "{0}?access_token={1}&open_id={2}"; private static final String DOUYIN_REFRESH_TOKEN_PATTERN = "{0}?client_key={1}&refresh_token={2}&grant_type=refresh_token"; - private static final String LINKEDIN_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope=r_liteprofile%20r_emailaddress%20w_member_social"; - private static final String LINKEDIN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; - private static final String LINKEDIN_USER_INFO_PATTERN = "{0}?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))"; - private static final String LINKEDIN_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&refresh_token={3}&grant_type=refresh_token"; - - private static final String MICROSOFT_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&response_mode=query&scope=offline_access%20user.read%20mail.read&state={3}"; - private static final String MICROSOFT_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&code={4}&grant_type=authorization_code"; - private static final String MICROSOFT_USER_INFO_PATTERN = "{0}"; - private static final String MICROSOFT_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; - /** @@ -75,41 +58,6 @@ public class UrlBuilder { return StringUtils.isEmpty(state) ? String.valueOf(System.currentTimeMillis()) : state; } - /** - * 获取githubtoken的接口地址 - * - * @param clientId github 应用的Client ID - * @param clientSecret github 应用的Client Secret - * @param code github 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getGithubAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(GITHUB_ACCESS_TOKEN_PATTERN, AuthSource.GITHUB.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取github用户详情的接口地址 - * - * @param token github 应用的token - * @return full url - */ - public static String getGithubUserInfoUrl(String token) { - return MessageFormat.format(GITHUB_USER_INFO_PATTERN, AuthSource.GITHUB.userInfo(), token); - } - - /** - * 获取github授权地址 - * - * @param clientId github 应用的Client ID - * @param redirectUrl github 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getGithubAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(GITHUB_AUTHORIZE_PATTERN, AuthSource.GITHUB.authorize(), clientId, redirectUrl, getState(state)); - } - /** * 获取gitee token的接口地址 * @@ -295,41 +243,6 @@ public class UrlBuilder { return MessageFormat.format(ALIPAY_AUTHORIZE_PATTERN, AuthSource.ALIPAY.authorize(), clientId, redirectUrl, getState(state)); } - /** - * 获取Google授权地址 - * - * @param clientId google 应用的Client ID - * @param redirectUrl google 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getGoogleAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(GOOGLE_AUTHORIZE_PATTERN, AuthSource.GOOGLE.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取Google token的接口地址 - * - * @param clientId google 应用的Client ID - * @param clientSecret google 应用的Client Secret - * @param code google 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getGoogleAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(GOOGLE_ACCESS_TOKEN_PATTERN, AuthSource.GOOGLE.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取Google用户详情的接口地址 - * - * @param token google 应用的token - * @return full url - */ - public static String getGoogleUserInfoUrl(String token) { - return MessageFormat.format(GOOGLE_USER_INFO_PATTERN, AuthSource.GOOGLE.userInfo(), token); - } - /** * 获取Facebook授权地址 * @@ -411,97 +324,4 @@ public class UrlBuilder { return MessageFormat.format(DOUYIN_REFRESH_TOKEN_PATTERN, AuthSource.DOUYIN.refresh(), clientId, refreshToken); } - /** - * 获取Linkedin授权地址 - * - * @param clientId Linkedin 应用的Client ID - * @param redirectUrl Linkedin 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getLinkedinAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(LINKEDIN_AUTHORIZE_PATTERN, AuthSource.LINKEDIN.authorize(), clientId, redirectUrl, state); - } - - /** - * 获取Linkedin token的接口地址 - * - * @param clientId Linkedin 应用的Client ID - * @param clientSecret Linkedin 应用的Client Secret - * @param code Linkedin 授权前的code,用来换token - * @param redirectUrl Linkedin 应用授权成功后的回调地址 - * @return full url - */ - public static String getLinkedinAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUrl) { - return MessageFormat.format(LINKEDIN_ACCESS_TOKEN_PATTERN, AuthSource.LINKEDIN.accessToken(), clientId, clientSecret, code, redirectUrl); - } - - /** - * 获取Linkedin用户详情的接口地址 - * - * @return full url - */ - public static String getLinkedinUserInfoUrl() { - return MessageFormat.format(LINKEDIN_USER_INFO_PATTERN, AuthSource.LINKEDIN.userInfo()); - } - - /** - * 获取Linkedin 刷新令牌 地址 - * - * @param clientId Linkedin 应用的client_key - * @param clientSecret Linkedin 应用的Client Secret - * @param refreshToken Linkedin 应用返回的refresh_token - * @return full url - */ - public static String getLinkedinRefreshUrl(String clientId, String clientSecret, String refreshToken) { - return MessageFormat.format(LINKEDIN_REFRESH_TOKEN_PATTERN, AuthSource.LINKEDIN.refresh(), clientId, clientSecret, refreshToken); - } - - /** - * 获取微软授权地址 - * - * @param clientId 微软 应用的Client ID - * @param redirectUrl 微软 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getMicrosoftAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(MICROSOFT_AUTHORIZE_PATTERN, AuthSource.MICROSOFT.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取微软 token的接口地址 - * - * @param clientId 微软 应用的Client ID - * @param clientSecret 微软 应用的Client Secret - * @param redirectUrl 微软 应用授权成功后的回调地址 - * @param code 微软 授权前的code,用来换token - * @return full url - */ - public static String getMicrosoftAccessTokenUrl(String clientId, String clientSecret, String redirectUrl, String code) { - return MessageFormat.format(MICROSOFT_ACCESS_TOKEN_PATTERN, AuthSource.MICROSOFT.accessToken(), clientId, clientSecret, redirectUrl, code); - } - - /** - * 获取微软用户详情的接口地址 - * - * @return full url - */ - public static String getMicrosoftUserInfoUrl() { - return MessageFormat.format(MICROSOFT_USER_INFO_PATTERN, AuthSource.MICROSOFT.userInfo()); - } - - /** - * 获取微软 刷新令牌 地址 - * - * @param clientId 微软 应用的client_key - * @param clientSecret 微软 应用的Client Secret - * @param redirectUrl 微软 应用授权成功后的回调地址 - * @param refreshToken 微软 应用返回的refresh_token - * @return full url - */ - public static String getMicrosoftRefreshUrl(String clientId, String clientSecret, String redirectUrl, String refreshToken) { - return MessageFormat.format(MICROSOFT_REFRESH_TOKEN_PATTERN, AuthSource.MICROSOFT.refresh(), clientId, clientSecret, redirectUrl, refreshToken); - } - } From 7fe8a4d4bbfbf97278e7f90dbc0824f7ca33b254 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 16:42:37 +0800 Subject: [PATCH 07/44] =?UTF-8?q?:recycle:=20=E4=BB=8EUrlBuilder=E4=B8=AD?= =?UTF-8?q?=E6=8B=86=E5=88=86alipay=E3=80=81baidu=E3=80=81coding=E3=80=81c?= =?UTF-8?q?sdn=E3=80=81dingtalk=E3=80=81douyin=E3=80=81facebook=E5=92=8Cgi?= =?UTF-8?q?tee=E7=9B=B8=E5=85=B3=E7=9A=84URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhyd/oauth/request/AuthAlipayRequest.java | 9 +- .../zhyd/oauth/request/AuthBaiduRequest.java | 26 +- .../zhyd/oauth/request/AuthCodingRequest.java | 20 +- .../zhyd/oauth/request/AuthCsdnRequest.java | 22 +- .../oauth/request/AuthDingTalkRequest.java | 23 +- .../zhyd/oauth/request/AuthDouyinRequest.java | 27 +- .../oauth/request/AuthFacebookRequest.java | 21 +- .../zhyd/oauth/request/AuthGiteeRequest.java | 21 +- .../me/zhyd/oauth/url/AlipayUrlBuilder.java | 45 +++ .../me/zhyd/oauth/url/BaiduUrlBuilder.java | 49 +++ .../me/zhyd/oauth/url/CodingUrlBuilder.java | 50 +++ .../me/zhyd/oauth/url/CsdnUrlBuilder.java | 49 +++ .../me/zhyd/oauth/url/DingtalkUrlBuilder.java | 46 +++ .../me/zhyd/oauth/url/DouyinUrlBuilder.java | 50 +++ .../me/zhyd/oauth/url/FacebookUrlBuilder.java | 48 +++ .../me/zhyd/oauth/url/GiteeUrlBuilder.java | 48 +++ .../oauth/url/entity/AuthRevokeEntity.java | 2 + .../oauth/url/entity/AuthUserInfoEntity.java | 12 +- .../java/me/zhyd/oauth/utils/UrlBuilder.java | 327 ------------------ 19 files changed, 521 insertions(+), 374 deletions(-) create mode 100644 src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java create mode 100644 src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/utils/UrlBuilder.java diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index fbcb952..77f5ce0 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -14,8 +14,9 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.AlipayUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.utils.StringUtils; -import me.zhyd.oauth.utils.UrlBuilder; /** * 支付宝登录 @@ -29,7 +30,7 @@ public class AuthAlipayRequest extends BaseAuthRequest { private AlipayClient alipayClient; public AuthAlipayRequest(AuthConfig config) { - super(config, AuthSource.ALIPAY); + super(config, AuthSource.ALIPAY, new AlipayUrlBuilder()); this.alipayClient = new DefaultAlipayClient(AuthSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config .getAlipayPublicKey(), "RSA2"); } @@ -93,6 +94,8 @@ public class AuthAlipayRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getAlipayAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java index 46f6a90..144f769 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java @@ -8,7 +8,11 @@ import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.enums.AuthBaiduErrorCode; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.BaiduUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthRevokeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * 百度账号登录 @@ -20,13 +24,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthBaiduRequest extends BaseAuthRequest { public AuthBaiduRequest(AuthConfig config) { - super(config, AuthSource.BAIDU); + super(config, AuthSource.BAIDU, new BaiduUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getBaiduAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode(), config - .getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); AuthBaiduErrorCode errorCode = AuthBaiduErrorCode.getErrorCode(accessTokenObject.getString("error")); @@ -44,7 +50,9 @@ public class AuthBaiduRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getBaiduUserInfoUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); AuthBaiduErrorCode errorCode = AuthBaiduErrorCode.getErrorCode(object.getString("error")); @@ -68,13 +76,17 @@ public class AuthBaiduRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getBaiduAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } @Override public AuthResponse revoke(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getBaiduRevokeUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getRevokeUrl(AuthRevokeEntity.builder() + .accessToken(accessToken) + .build())).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); if (object.containsKey("error_code")) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java index 690a5ee..e262d32 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java @@ -10,7 +10,10 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.CodingUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * Cooding登录 @@ -22,12 +25,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthCodingRequest extends BaseAuthRequest { public AuthCodingRequest(AuthConfig config) { - super(config, AuthSource.CODING); + super(config, AuthSource.CODING, new CodingUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getCodingAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.getIntValue("code") != 0) { @@ -43,7 +49,9 @@ public class AuthCodingRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getCodingUserInfoUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); JSONObject object = JSONObject.parseObject(response.body()); if (object.getIntValue("code") != 0) { throw new AuthException(object.getString("msg")); @@ -73,6 +81,8 @@ public class AuthCodingRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getCodingAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java index 43817c2..292149d 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java @@ -10,7 +10,10 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.CsdnUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * CSDN登录 @@ -19,16 +22,19 @@ import me.zhyd.oauth.utils.UrlBuilder; * @version 1.0 * @since 1.8 */ +@Deprecated public class AuthCsdnRequest extends BaseAuthRequest { public AuthCsdnRequest(AuthConfig config) { - super(config, AuthSource.CSDN); + super(config, AuthSource.CSDN, new CsdnUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getCsdnAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode(), config - .getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error_code")) { @@ -40,7 +46,9 @@ public class AuthCsdnRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getCsdnUserInfoUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); JSONObject object = JSONObject.parseObject(response.body()); if (object.containsKey("error_code")) { throw new AuthException(object.getString("error")); @@ -63,6 +71,8 @@ public class AuthCsdnRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getCsdnAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java index ff802cc..7eb90bb 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java @@ -8,9 +8,14 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.enums.AuthDingTalkErrorCode; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.*; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthToken; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.DingtalkUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; -import me.zhyd.oauth.utils.UrlBuilder; /** * 钉钉登录 @@ -22,7 +27,7 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthDingTalkRequest extends BaseAuthRequest { public AuthDingTalkRequest(AuthConfig config) { - super(config, AuthSource.DINGTALK); + super(config, AuthSource.DINGTALK, new DingtalkUrlBuilder()); } @Override @@ -38,8 +43,12 @@ public class AuthDingTalkRequest extends BaseAuthRequest { String urlEncodeSignature = GlobalAuthUtil.generateDingTalkSignature(config.getClientSecret(), timestamp); JSONObject param = new JSONObject(); param.put("tmp_auth_code", code); - HttpResponse response = HttpRequest.post(UrlBuilder.getDingTalkUserInfoUrl(urlEncodeSignature, timestamp, config - .getClientId())).body(param.toJSONString()).execute(); + HttpResponse response = HttpRequest.post(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .signature(urlEncodeSignature) + .timestamp(timestamp) + .clientId(config.getClientId()) + .build() + )).body(param.toJSONString()).execute(); String userInfo = response.body(); JSONObject object = JSON.parseObject(userInfo); AuthDingTalkErrorCode errorCode = AuthDingTalkErrorCode.getErrorCode(object.getIntValue("errcode")); @@ -68,6 +77,8 @@ public class AuthDingTalkRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getDingTalkQrConnectUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java index cf29f19..7e87b92 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java @@ -7,7 +7,11 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.DouyinUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -20,12 +24,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthDouyinRequest extends BaseAuthRequest { public AuthDouyinRequest(AuthConfig config) { - super(config, AuthSource.DOUYIN); + super(config, AuthSource.DOUYIN, new DouyinUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getDouyinAccessTokenUrl(config.getClientId(), config.getClientSecret(), authCallback.getCode()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); return this.getToken(accessTokenUrl); } @@ -33,7 +40,10 @@ public class AuthDouyinRequest extends BaseAuthRequest { protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); String openId = authToken.getOpenId(); - String url = UrlBuilder.getDouyinUserInfoUrl(accessToken, openId); + String url = this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .openId(openId) + .build()); HttpResponse response = HttpRequest.get(url).execute(); JSONObject object = JSONObject.parseObject(response.body()); @@ -58,12 +68,17 @@ public class AuthDouyinRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getDouyinAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } @Override public AuthResponse refresh(AuthToken oldToken) { - String refreshTokenUrl = UrlBuilder.getDouyinRefreshUrl(config.getClientId(), oldToken.getRefreshToken()); + String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() + .config(config) + .refreshToken(oldToken.getRefreshToken()) + .build()); return AuthResponse.builder() .code(ResponseStatus.SUCCESS.getCode()) .data(this.getToken(refreshTokenUrl)) diff --git a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java index bc8fcac..4db331a 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java @@ -10,7 +10,10 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.FacebookUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * Facebook登录 @@ -22,13 +25,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthFacebookRequest extends BaseAuthRequest { public AuthFacebookRequest(AuthConfig config) { - super(config, AuthSource.FACEBOOK); + super(config, AuthSource.FACEBOOK, new FacebookUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getFacebookAccessTokenUrl(config.getClientId(), config.getClientSecret(), - authCallback.getCode(), config.getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); @@ -46,7 +51,9 @@ public class AuthFacebookRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getFacebookUserInfoUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); if (object.containsKey("error")) { @@ -80,6 +87,8 @@ public class AuthFacebookRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getFacebookAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index 192f684..68eb429 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -10,7 +10,10 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.utils.UrlBuilder; +import me.zhyd.oauth.url.GiteeUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * Gitee登录 @@ -22,13 +25,15 @@ import me.zhyd.oauth.utils.UrlBuilder; public class AuthGiteeRequest extends BaseAuthRequest { public AuthGiteeRequest(AuthConfig config) { - super(config, AuthSource.GITEE); + super(config, AuthSource.GITEE, new GiteeUrlBuilder()); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = UrlBuilder.getGiteeAccessTokenUrl(config.getClientId(), config.getClientSecret(), - authCallback.getCode(), config.getRedirectUri()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() + .config(config) + .code(authCallback.getCode()) + .build()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { @@ -40,7 +45,9 @@ public class AuthGiteeRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.getGiteeUserInfoUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); return AuthUser.builder() @@ -66,6 +73,8 @@ public class AuthGiteeRequest extends BaseAuthRequest { */ @Override public String authorize() { - return UrlBuilder.getGiteeAuthorizeUrl(config.getClientId(), config.getRedirectUri(), config.getState()); + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); } } diff --git a/src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java new file mode 100644 index 0000000..ff54f54 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java @@ -0,0 +1,45 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * Baidu相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class AlipayUrlBuilder extends AbstractUrlBuilder { + + private static final String ALIPAY_AUTHORIZE_PATTERN = "{0}?app_id={1}&scope=auth_user&redirect_uri={2}&state={3}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + return null; + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return null; + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(ALIPAY_AUTHORIZE_PATTERN, AuthSource.ALIPAY.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java new file mode 100644 index 0000000..fe0480f --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java @@ -0,0 +1,49 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * Baidu相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class BaiduUrlBuilder extends AbstractUrlBuilder { + + private static final String BAIDU_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; + private static final String BAIDU_USER_INFO_PATTERN = "{0}?access_token={1}"; + private static final String BAIDU_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&display=popup&state={3}"; + private static final String BAIDU_REVOKE_PATTERN = "{0}?access_token={1}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(BAIDU_ACCESS_TOKEN_PATTERN, AuthSource.BAIDU.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(BAIDU_USER_INFO_PATTERN, AuthSource.BAIDU.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(BAIDU_AUTHORIZE_PATTERN, AuthSource.BAIDU.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return MessageFormat.format(BAIDU_REVOKE_PATTERN, AuthSource.BAIDU.revoke(), revokeEntity.getAccessToken()); + } +} diff --git a/src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java new file mode 100644 index 0000000..9f78e33 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java @@ -0,0 +1,50 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * Coding相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class CodingUrlBuilder extends AbstractUrlBuilder { + + private static final String CODING_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; + private static final String CODING_USER_INFO_PATTERN = "{0}?access_token={1}"; + private static final String CODING_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(CODING_ACCESS_TOKEN_PATTERN, AuthSource.CODING.accessToken(), config.getClientId(), + config.getClientSecret(), accessTokenEntity.getCode()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(CODING_USER_INFO_PATTERN, AuthSource.CODING.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(CODING_AUTHORIZE_PATTERN, AuthSource.CODING.authorize(), config.getClientId(), + config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java new file mode 100644 index 0000000..8573bcc --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java @@ -0,0 +1,49 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * csdn相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +@Deprecated +public class CsdnUrlBuilder extends AbstractUrlBuilder { + + private static final String CSDN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; + private static final String CSDN_USER_INFO_PATTERN = "{0}?access_token={1}"; + private static final String CSDN_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(CSDN_ACCESS_TOKEN_PATTERN, AuthSource.CSDN.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(CSDN_USER_INFO_PATTERN, AuthSource.CSDN.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(CSDN_AUTHORIZE_PATTERN, AuthSource.CSDN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java new file mode 100644 index 0000000..580e0d6 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java @@ -0,0 +1,46 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * 钉钉相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class DingtalkUrlBuilder extends AbstractUrlBuilder { + + private static final String DING_TALK_QRCONNECT_PATTERN = "{0}?appid={1}&response_type=code&scope=snsapi_login&redirect_uri={2}&state={3}"; + private static final String DING_TALK_USER_INFO_PATTERN = "{0}?signature={1}×tamp={2}&accessKey={3}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + return null; + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(DING_TALK_USER_INFO_PATTERN, AuthSource.DINGTALK.userInfo(), userInfoEntity.getSignature(), userInfoEntity.getTimestamp(), userInfoEntity.getClientId()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(DING_TALK_QRCONNECT_PATTERN, AuthSource.DINGTALK.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java new file mode 100644 index 0000000..7d7bd4a --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java @@ -0,0 +1,50 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * 抖音相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class DouyinUrlBuilder extends AbstractUrlBuilder { + + private static final String DOUYIN_AUTHORIZE_PATTERN = "{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&scope=user_info"; + private static final String DOUYIN_ACCESS_TOKEN_PATTERN = "{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorization_code"; + private static final String DOUYIN_USER_INFO_PATTERN = "{0}?access_token={1}&open_id={2}"; + private static final String DOUYIN_REFRESH_TOKEN_PATTERN = "{0}?client_key={1}&refresh_token={2}&grant_type=refresh_token"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(DOUYIN_ACCESS_TOKEN_PATTERN, AuthSource.DOUYIN.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(DOUYIN_USER_INFO_PATTERN, AuthSource.DOUYIN.userInfo(), userInfoEntity.getAccessToken(), userInfoEntity.getOpenId()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(DOUYIN_AUTHORIZE_PATTERN, AuthSource.DOUYIN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + AuthConfig config = refreshTokenEntity.getConfig(); + return MessageFormat.format(DOUYIN_REFRESH_TOKEN_PATTERN, AuthSource.DOUYIN.refresh(), config.getClientId(), refreshTokenEntity.getRefreshToken()); + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java new file mode 100644 index 0000000..2205f87 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java @@ -0,0 +1,48 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * Facebook相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class FacebookUrlBuilder extends AbstractUrlBuilder { + + private static final String FACEBOOK_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope="; + private static final String FACEBOOK_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; + private static final String FACEBOOK_USER_INFO_PATTERN = "{0}?access_token={1}&fields=id,name,birthday,gender,hometown,email,devices,picture.width(400)"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(FACEBOOK_ACCESS_TOKEN_PATTERN, AuthSource.FACEBOOK.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(FACEBOOK_USER_INFO_PATTERN, AuthSource.FACEBOOK.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(FACEBOOK_AUTHORIZE_PATTERN, AuthSource.FACEBOOK.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java new file mode 100644 index 0000000..d7d13e8 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java @@ -0,0 +1,48 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.*; + +import java.text.MessageFormat; + +/** + * Gitee相关的URL构建类 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class GiteeUrlBuilder extends AbstractUrlBuilder { + + private static final String GITEE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; + private static final String GITEE_USER_INFO_PATTERN = "{0}?access_token={1}"; + private static final String GITEE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; + + @Override + public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + AuthConfig config = accessTokenEntity.getConfig(); + return MessageFormat.format(GITEE_ACCESS_TOKEN_PATTERN, AuthSource.GITEE.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(GITEE_USER_INFO_PATTERN, AuthSource.GITEE.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { + AuthConfig config = authorizeEntity.getConfig(); + return MessageFormat.format(GITEE_AUTHORIZE_PATTERN, AuthSource.GITEE.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + return null; + } + + @Override + public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + return null; + } +} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java index d9ab0a0..a43abe3 100644 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java @@ -10,4 +10,6 @@ import lombok.*; @Getter @Builder public class AuthRevokeEntity { + + private String accessToken; } diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java index 3e2a856..54fb17e 100644 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java +++ b/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java @@ -19,12 +19,20 @@ public class AuthUserInfoEntity { * 用户openId */ private String openId; + /** + * client key + */ + private String clientId; /** * 额外的属性 */ private String extra; /** - * client key + * 额外的属性 */ - private String clientId; + private String signature; + /** + * 额外的属性 + */ + private String timestamp; } diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java deleted file mode 100644 index ba1d600..0000000 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ /dev/null @@ -1,327 +0,0 @@ -package me.zhyd.oauth.utils; - -import me.zhyd.oauth.config.AuthSource; - -import java.text.MessageFormat; - -/** - * Url构建工具类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.0 - */ -public class UrlBuilder { - - - - private static final String GITEE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String GITEE_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String GITEE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - - private static final String DING_TALK_QRCONNECT_PATTERN = "{0}?appid={1}&response_type=code&scope=snsapi_login&redirect_uri={2}&state={3}"; - private static final String DING_TALK_USER_INFO_PATTERN = "{0}?signature={1}×tamp={2}&accessKey={3}"; - - private static final String BAIDU_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String BAIDU_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String BAIDU_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&display=popup&state={3}"; - private static final String BAIDU_REVOKE_PATTERN = "{0}?access_token={1}"; - - private static final String CSDN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String CSDN_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String CSDN_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - - private static final String CODING_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; - private static final String CODING_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String CODING_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; - - private static final String ALIPAY_AUTHORIZE_PATTERN = "{0}?app_id={1}&scope=auth_user&redirect_uri={2}&state={3}"; - - - private static final String FACEBOOK_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope="; - private static final String FACEBOOK_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; - private static final String FACEBOOK_USER_INFO_PATTERN = "{0}?access_token={1}&fields=id,name,birthday,gender,hometown,email,devices,picture.width(400)"; - - private static final String DOUYIN_AUTHORIZE_PATTERN = "{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&scope=user_info"; - private static final String DOUYIN_ACCESS_TOKEN_PATTERN = "{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorization_code"; - private static final String DOUYIN_USER_INFO_PATTERN = "{0}?access_token={1}&open_id={2}"; - private static final String DOUYIN_REFRESH_TOKEN_PATTERN = "{0}?client_key={1}&refresh_token={2}&grant_type=refresh_token"; - - - - /** - * 获取state,如果为空, 则默认去当前日期的时间戳 - * - * @param state state - */ - private static Object getState(String state) { - return StringUtils.isEmpty(state) ? String.valueOf(System.currentTimeMillis()) : state; - } - - /** - * 获取gitee token的接口地址 - * - * @param clientId gitee 应用的Client ID - * @param clientSecret gitee 应用的Client Secret - * @param code gitee 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getGiteeAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(GITEE_ACCESS_TOKEN_PATTERN, AuthSource.GITEE.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取gitee用户详情的接口地址 - * - * @param token gitee 应用的token - * @return full url - */ - public static String getGiteeUserInfoUrl(String token) { - return MessageFormat.format(GITEE_USER_INFO_PATTERN, AuthSource.GITEE.userInfo(), token); - } - - /** - * 获取gitee授权地址 - * - * @param clientId gitee 应用的Client ID - * @param redirectUrl gitee 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return json - */ - public static String getGiteeAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(GITEE_AUTHORIZE_PATTERN, AuthSource.GITEE.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取钉钉登录二维码的地址 - * - * @param clientId 钉钉 应用的App Id - * @param redirectUrl 钉钉 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getDingTalkQrConnectUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(DING_TALK_QRCONNECT_PATTERN, AuthSource.DINGTALK.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取钉钉用户信息的地址 - * - * @param signature 通过appSecret计算出来的签名值,签名计算方法:https://open-doc.dingtalk.com/microapp/faquestions/hxs5v9 - * @param timestamp 当前时间戳,单位是毫秒 - * @param accessKey 钉钉 应用的App Id - * @return full url - */ - public static String getDingTalkUserInfoUrl(String signature, String timestamp, String accessKey) { - return MessageFormat.format(DING_TALK_USER_INFO_PATTERN, AuthSource.DINGTALK.userInfo(), signature, timestamp, accessKey); - } - - /** - * 获取baidu token的接口地址 - * - * @param clientId baidu 应用的API Key - * @param clientSecret baidu 应用的Secret Key - * @param code baidu 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getBaiduAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(BAIDU_ACCESS_TOKEN_PATTERN, AuthSource.BAIDU.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取baidu用户详情的接口地址 - * - * @param token baidu 应用的token - * @return full url - */ - public static String getBaiduUserInfoUrl(String token) { - return MessageFormat.format(BAIDU_USER_INFO_PATTERN, AuthSource.BAIDU.userInfo(), token); - } - - /** - * 获取baidu授权地址 - * - * @param clientId baidu 应用的API Key - * @param redirectUrl baidu 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return json - */ - public static String getBaiduAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(BAIDU_AUTHORIZE_PATTERN, AuthSource.BAIDU.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取收回baidu授权的地址 - * - * @param accessToken baidu 授权登录后的token - * @return json - */ - public static String getBaiduRevokeUrl(String accessToken) { - return MessageFormat.format(BAIDU_REVOKE_PATTERN, AuthSource.BAIDU.revoke(), accessToken); - } - - /** - * 获取csdn token的接口地址 - * - * @param clientId csdn 应用的App Key - * @param clientSecret csdn 应用的App Secret - * @param code csdn 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getCsdnAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(CSDN_ACCESS_TOKEN_PATTERN, AuthSource.CSDN.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取csdn用户详情的接口地址 - * - * @param token csdn 应用的token - * @return full url - */ - public static String getCsdnUserInfoUrl(String token) { - return MessageFormat.format(CSDN_USER_INFO_PATTERN, AuthSource.CSDN.userInfo(), token); - } - - /** - * 获取csdn授权地址 - * - * @param clientId csdn 应用的Client ID - * @param redirectUrl csdn 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getCsdnAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(CSDN_AUTHORIZE_PATTERN, AuthSource.CSDN.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取coding token的接口地址 - * - * @param clientId coding 应用的App Key - * @param clientSecret coding 应用的App Secret - * @param code coding 授权前的code,用来换token - * @return full url - */ - public static String getCodingAccessTokenUrl(String clientId, String clientSecret, String code) { - return MessageFormat.format(CODING_ACCESS_TOKEN_PATTERN, AuthSource.CODING.accessToken(), clientId, clientSecret, code); - } - - /** - * 获取coding用户详情的接口地址 - * - * @param token coding 应用的token - * @return full url - */ - public static String getCodingUserInfoUrl(String token) { - return MessageFormat.format(CODING_USER_INFO_PATTERN, AuthSource.CODING.userInfo(), token); - } - - /** - * 获取coding授权地址 - * - * @param clientId coding 应用的Client ID - * @param redirectUrl coding 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getCodingAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(CODING_AUTHORIZE_PATTERN, AuthSource.CODING.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取alipay授权地址 - * - * @param clientId alipay 应用的Client ID - * @param redirectUrl alipay 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getAlipayAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(ALIPAY_AUTHORIZE_PATTERN, AuthSource.ALIPAY.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取Facebook授权地址 - * - * @param clientId Facebook 应用的Client ID - * @param redirectUrl Facebook 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getFacebookAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(FACEBOOK_AUTHORIZE_PATTERN, AuthSource.FACEBOOK.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取Facebook token的接口地址 - * - * @param clientId Facebook 应用的Client ID - * @param clientSecret Facebook 应用的Client Secret - * @param code Facebook 授权前的code,用来换token - * @param redirectUri 待跳转的页面 - * @return full url - */ - public static String getFacebookAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) { - return MessageFormat.format(FACEBOOK_ACCESS_TOKEN_PATTERN, AuthSource.FACEBOOK.accessToken(), clientId, clientSecret, code, redirectUri); - } - - /** - * 获取Facebook用户详情的接口地址 - * - * @param token Facebook 应用的token - * @return full url - */ - public static String getFacebookUserInfoUrl(String token) { - return MessageFormat.format(FACEBOOK_USER_INFO_PATTERN, AuthSource.FACEBOOK.userInfo(), token); - } - - /** - * 获取Douyin授权地址 - * - * @param clientId Douyin 应用的Client ID - * @param redirectUrl Douyin 应用授权成功后的回调地址 - * @param state 随机字符串,用于保持会话状态,防止CSRF攻击 - * @return full url - */ - public static String getDouyinAuthorizeUrl(String clientId, String redirectUrl, String state) { - return MessageFormat.format(DOUYIN_AUTHORIZE_PATTERN, AuthSource.DOUYIN.authorize(), clientId, redirectUrl, getState(state)); - } - - /** - * 获取Douyin token的接口地址 - * - * @param clientId Douyin 应用的Client ID - * @param clientSecret Douyin 应用的Client Secret - * @param code Douyin 授权前的code,用来换token - * @return full url - */ - public static String getDouyinAccessTokenUrl(String clientId, String clientSecret, String code) { - return MessageFormat.format(DOUYIN_ACCESS_TOKEN_PATTERN, AuthSource.DOUYIN.accessToken(), clientId, clientSecret, code); - } - - /** - * 获取Douyin用户详情的接口地址 - * - * @param token Douyin 应用的token - * @param openId 用户在当前应用的唯一标识 通过token接口获取 - * @return full url - */ - public static String getDouyinUserInfoUrl(String token, String openId) { - return MessageFormat.format(DOUYIN_USER_INFO_PATTERN, AuthSource.DOUYIN.userInfo(), token, openId); - } - - /** - * 获取Douyin 刷新令牌 地址 - * - * @param clientId Douyin 应用的client_key - * @param refreshToken Douyin 应用返回的refresh_token - * @return full url - */ - public static String getDouyinRefreshUrl(String clientId, String refreshToken) { - return MessageFormat.format(DOUYIN_REFRESH_TOKEN_PATTERN, AuthSource.DOUYIN.refresh(), clientId, refreshToken); - } - -} From 67c668b74072ea3126ad99b5ec1489660b7f048c Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 16:46:31 +0800 Subject: [PATCH 08/44] =?UTF-8?q?:recycle:=20authorize=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=8F=90=E5=88=B0=E7=88=B6=E7=B1=BB=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/zhyd/oauth/request/AuthAlipayRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthBaiduRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthCodingRequest.java | 13 ------------- .../java/me/zhyd/oauth/request/AuthCsdnRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthDingTalkRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthDouyinRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthFacebookRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthGiteeRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthGithubRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthGoogleRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthLinkedinRequest.java | 13 ------------- .../java/me/zhyd/oauth/request/AuthMiRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthMicrosoftRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthOschinaRequest.java | 13 ------------- .../java/me/zhyd/oauth/request/AuthQqRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthTaobaoRequest.java | 13 ------------- .../zhyd/oauth/request/AuthTencentCloudRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthToutiaoRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthWeChatRequest.java | 13 ------------- .../me/zhyd/oauth/request/AuthWeiboRequest.java | 13 ------------- .../java/me/zhyd/oauth/request/BaseAuthRequest.java | 7 ++++++- 21 files changed, 6 insertions(+), 261 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index 77f5ce0..e43d76f 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -15,7 +15,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.AlipayUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.utils.StringUtils; /** @@ -86,16 +85,4 @@ public class AuthAlipayRequest extends BaseAuthRequest { .source(AuthSource.ALIPAY) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java index 144f769..cb96f4b 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java @@ -10,7 +10,6 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.BaiduUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthRevokeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; @@ -69,18 +68,6 @@ public class AuthBaiduRequest extends BaseAuthRequest { .build(); } - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } - @Override public AuthResponse revoke(AuthToken authToken) { String accessToken = authToken.getAccessToken(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java index e262d32..ade26cd 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.CodingUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -73,16 +72,4 @@ public class AuthCodingRequest extends BaseAuthRequest { .source(AuthSource.CODING) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java index 292149d..770f4bc 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.CsdnUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -63,16 +62,4 @@ public class AuthCsdnRequest extends BaseAuthRequest { .source(AuthSource.CSDN) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java index 7eb90bb..ef59d56 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java @@ -13,7 +13,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.DingtalkUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; @@ -69,16 +68,4 @@ public class AuthDingTalkRequest extends BaseAuthRequest { .token(token) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java index 7e87b92..f5b37e3 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java @@ -9,7 +9,6 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.DouyinUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; @@ -61,18 +60,6 @@ public class AuthDouyinRequest extends BaseAuthRequest { .build(); } - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } - @Override public AuthResponse refresh(AuthToken oldToken) { String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() diff --git a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java index 4db331a..cbeccff 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.FacebookUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -79,16 +78,4 @@ public class AuthFacebookRequest extends BaseAuthRequest { .source(AuthSource.FACEBOOK) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index 68eb429..dbfd7fd 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.GiteeUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -65,16 +64,4 @@ public class AuthGiteeRequest extends BaseAuthRequest { .source(AuthSource.GITEE) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java index 242f7e6..c0d0029 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.GithubUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; @@ -68,16 +67,4 @@ public class AuthGithubRequest extends BaseAuthRequest { .source(AuthSource.GITHUB) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java index bc45d37..e66ac99 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.GoogleUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -71,16 +70,4 @@ public class AuthGoogleRequest extends BaseAuthRequest { .source(AuthSource.GOOGLE) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index 756aeaa..2ace891 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -10,7 +10,6 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.LinkedinUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.StringUtils; @@ -92,18 +91,6 @@ public class AuthLinkedinRequest extends BaseAuthRequest { .build(); } - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } - private String getUserEmail(String accessToken) { String email = null; HttpResponse emailResponse = HttpRequest.get("https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))") diff --git a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java index 265b649..3d4db87 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java @@ -10,7 +10,6 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.MiUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; @@ -101,18 +100,6 @@ public class AuthMiRequest extends BaseAuthRequest { return authUser; } - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } - /** * 刷新access token (续期) * diff --git a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java index 9c3d554..70626f2 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java @@ -10,7 +10,6 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.MicrosoftUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; @@ -95,18 +94,6 @@ public class AuthMicrosoftRequest extends BaseAuthRequest { .build(); } - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } - /** * 刷新access token (续期) * diff --git a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java index 07c069c..0e7dd12 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.OschinaUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -70,16 +69,4 @@ public class AuthOschinaRequest extends BaseAuthRequest { .source(AuthSource.OSCHINA) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java index 49b00a5..b083d9d 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java @@ -13,7 +13,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.QqUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; import me.zhyd.oauth.utils.StringUtils; @@ -83,18 +82,6 @@ public class AuthQqRequest extends BaseAuthRequest { .build(); } - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } - private String getOpenId(AuthToken authToken) { String accessToken = authToken.getAccessToken(); HttpResponse response = HttpRequest.get(this.urlBuilder.getOpenIdUrl(accessToken, config.isUnionId())).execute(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index c1016e0..f5bfa88 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.TaobaoUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; /** @@ -60,16 +59,4 @@ public class AuthTaobaoRequest extends BaseAuthRequest { .source(AuthSource.TAOBAO) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java index 75fcc40..9fa0980 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.TencentCloudUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -72,16 +71,4 @@ public class AuthTencentCloudRequest extends BaseAuthRequest { .source(AuthSource.TENCENT_CLOUD) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java index f5f9b3d..580c6d6 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java @@ -13,7 +13,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.ToutiaoUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -78,16 +77,4 @@ public class AuthToutiaoRequest extends BaseAuthRequest { .source(AuthSource.TOUTIAO) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java index c3d3a5e..f59e577 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java @@ -9,7 +9,6 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.WechatUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; @@ -66,18 +65,6 @@ public class AuthWeChatRequest extends BaseAuthRequest { .build(); } - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } - @Override public AuthResponse refresh(AuthToken oldToken) { String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java index 5129df0..e028299 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.WeiboUrlBuilder; import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.IpUtils; import me.zhyd.oauth.utils.StringUtils; @@ -81,16 +80,4 @@ public class AuthWeiboRequest extends BaseAuthRequest { .source(AuthSource.WEIBO) .build(); } - - /** - * 返回认证url,可自行跳转页面 - * - * @return 返回授权地址 - */ - @Override - public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); - } } diff --git a/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java b/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java index 4dde76e..f6765e5 100644 --- a/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java +++ b/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java @@ -9,6 +9,7 @@ import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.url.AbstractUrlBuilder; +import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.utils.AuthChecker; /** @@ -69,5 +70,9 @@ public abstract class BaseAuthRequest implements AuthRequest { * @return 返回授权地址 */ @Override - public abstract String authorize(); + public String authorize() { + return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() + .config(config) + .build()); + } } From 65334d0f3f1dfb8e1afd5ab44dfe9d096dbe6048 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 17:42:52 +0800 Subject: [PATCH 09/44] =?UTF-8?q?:recycle:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- .../zhyd/oauth/request/AuthBaiduRequest.java | 11 +----- .../zhyd/oauth/request/AuthCodingRequest.java | 6 +-- .../zhyd/oauth/request/AuthCsdnRequest.java | 6 +-- .../zhyd/oauth/request/AuthDouyinRequest.java | 12 +----- .../oauth/request/AuthFacebookRequest.java | 6 +-- .../zhyd/oauth/request/AuthGiteeRequest.java | 6 +-- .../zhyd/oauth/request/AuthGithubRequest.java | 6 +-- .../zhyd/oauth/request/AuthGoogleRequest.java | 6 +-- .../oauth/request/AuthLinkedinRequest.java | 12 +----- .../me/zhyd/oauth/request/AuthMiRequest.java | 12 +----- .../oauth/request/AuthMicrosoftRequest.java | 12 +----- .../oauth/request/AuthOschinaRequest.java | 6 +-- .../me/zhyd/oauth/request/AuthQqRequest.java | 6 +-- .../zhyd/oauth/request/AuthTaobaoRequest.java | 6 +-- .../request/AuthTencentCloudRequest.java | 6 +-- .../oauth/request/AuthToutiaoRequest.java | 6 +-- .../zhyd/oauth/request/AuthWeChatRequest.java | 12 +----- .../zhyd/oauth/request/AuthWeiboRequest.java | 6 +-- .../zhyd/oauth/request/BaseAuthRequest.java | 6 +-- .../me/zhyd/oauth/url/AbstractUrlBuilder.java | 37 ++++++++++++------- .../me/zhyd/oauth/url/AlipayUrlBuilder.java | 12 +++--- .../me/zhyd/oauth/url/BaiduUrlBuilder.java | 17 ++++----- .../me/zhyd/oauth/url/CodingUrlBuilder.java | 19 ++++------ .../me/zhyd/oauth/url/CsdnUrlBuilder.java | 15 +++----- .../me/zhyd/oauth/url/DingtalkUrlBuilder.java | 12 +++--- .../me/zhyd/oauth/url/DouyinUrlBuilder.java | 18 ++++----- .../me/zhyd/oauth/url/FacebookUrlBuilder.java | 15 +++----- .../me/zhyd/oauth/url/GiteeUrlBuilder.java | 13 +++---- .../me/zhyd/oauth/url/GithubUrlBuilder.java | 15 +++----- .../me/zhyd/oauth/url/GoogleUrlBuilder.java | 15 +++----- .../me/zhyd/oauth/url/LinkedinUrlBuilder.java | 18 ++++----- .../java/me/zhyd/oauth/url/MiUrlBuilder.java | 18 ++++----- .../zhyd/oauth/url/MicrosoftUrlBuilder.java | 18 ++++----- .../me/zhyd/oauth/url/OschinaUrlBuilder.java | 19 ++++------ .../java/me/zhyd/oauth/url/QqUrlBuilder.java | 19 ++++------ .../me/zhyd/oauth/url/TaobaoUrlBuilder.java | 19 ++++------ .../oauth/url/TencentCloudUrlBuilder.java | 19 ++++------ .../me/zhyd/oauth/url/ToutiaoUrlBuilder.java | 19 ++++------ .../me/zhyd/oauth/url/WechatUrlBuilder.java | 17 ++++----- .../me/zhyd/oauth/url/WeiboUrlBuilder.java | 19 ++++------ .../url/entity/AuthAccessTokenEntity.java | 25 ------------- .../oauth/url/entity/AuthAuthorizeEntity.java | 20 ---------- .../url/entity/AuthRefreshTokenEntity.java | 18 --------- .../oauth/url/entity/AuthRevokeEntity.java | 15 -------- update.md | 4 ++ 46 files changed, 186 insertions(+), 422 deletions(-) delete mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthAccessTokenEntity.java delete mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthAuthorizeEntity.java delete mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java delete mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java diff --git a/README.md b/README.md index 34142e8..79fc132 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,9 @@ authRequest.login(callback); 注:`1.8.0`版本后,增加了`state`参数校验,用于防止[CSRF](https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0)。强烈建议,保证单次流程内`state`的唯一性,且每个`state`只可用一次。 -**配套Demo**:[JustAuth-demo](https://gitee.com/yadong.zhang/JustAuth-demo) +**配套Demo**: +- [Springboot版](https://gitee.com/yadong.zhang/JustAuth-demo) +- [jFinal版](https://github.com/zhangyd-c/jfinal-justauth-demo) 具体的例子可以参考: diff --git a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java index cb96f4b..2d2224b 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java @@ -9,8 +9,6 @@ import me.zhyd.oauth.enums.AuthBaiduErrorCode; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.BaiduUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthRevokeEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -28,10 +26,7 @@ public class AuthBaiduRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); AuthBaiduErrorCode errorCode = AuthBaiduErrorCode.getErrorCode(accessTokenObject.getString("error")); @@ -71,9 +66,7 @@ public class AuthBaiduRequest extends BaseAuthRequest { @Override public AuthResponse revoke(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getRevokeUrl(AuthRevokeEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getRevokeUrl(accessToken)).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); if (object.containsKey("error_code")) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java index ade26cd..1faf58c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.CodingUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -29,10 +28,7 @@ public class AuthCodingRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.getIntValue("code") != 0) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java index 770f4bc..a823004 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.CsdnUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -30,10 +29,7 @@ public class AuthCsdnRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error_code")) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java index f5b37e3..0780698 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java @@ -8,8 +8,6 @@ import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.DouyinUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; @@ -28,10 +26,7 @@ public class AuthDouyinRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); return this.getToken(accessTokenUrl); } @@ -62,10 +57,7 @@ public class AuthDouyinRequest extends BaseAuthRequest { @Override public AuthResponse refresh(AuthToken oldToken) { - String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() - .config(config) - .refreshToken(oldToken.getRefreshToken()) - .build()); + String refreshTokenUrl = this.urlBuilder.getRefreshUrl(oldToken.getRefreshToken()); return AuthResponse.builder() .code(ResponseStatus.SUCCESS.getCode()) .data(this.getToken(refreshTokenUrl)) diff --git a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java index cbeccff..138279c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.FacebookUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -29,10 +28,7 @@ public class AuthFacebookRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index dbfd7fd..f4f3b72 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.GiteeUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -29,10 +28,7 @@ public class AuthGiteeRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java index c0d0029..3c4ee86 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.GithubUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; @@ -32,10 +31,7 @@ public class AuthGithubRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); Map res = GlobalAuthUtil.parseStringToMap(response.body()); if (res.containsKey("error")) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java index e66ac99..aca0adb 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.GoogleUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -29,10 +28,7 @@ public class AuthGoogleRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index 2ace891..5756f7c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -9,8 +9,6 @@ import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.LinkedinUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.StringUtils; @@ -30,10 +28,7 @@ public class AuthLinkedinRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); return this.getToken(accessTokenUrl); } @@ -123,10 +118,7 @@ public class AuthLinkedinRequest extends BaseAuthRequest { if (StringUtils.isEmpty(oldToken.getRefreshToken())) { throw new AuthException(ResponseStatus.UNSUPPORTED); } - String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() - .config(config) - .refreshToken(oldToken.getRefreshToken()) - .build()); + String refreshTokenUrl = this.urlBuilder.getRefreshUrl(oldToken.getRefreshToken()); return AuthResponse.builder() .code(ResponseStatus.SUCCESS.getCode()) .data(this.getToken(refreshTokenUrl)) diff --git a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java index 3d4db87..217bfe2 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java @@ -9,8 +9,6 @@ import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.MiUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -31,10 +29,7 @@ public class AuthMiRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); return getToken(accessTokenUrl); } @@ -108,10 +103,7 @@ public class AuthMiRequest extends BaseAuthRequest { */ @Override public AuthResponse refresh(AuthToken authToken) { - String miRefreshUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() - .config(config) - .refreshToken(authToken.getRefreshToken()) - .build()); + String miRefreshUrl = this.urlBuilder.getRefreshUrl(authToken.getRefreshToken()); return AuthResponse.builder().code(ResponseStatus.SUCCESS.getCode()).data(getToken(miRefreshUrl)).build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java index 70626f2..618ca8f 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java @@ -9,8 +9,6 @@ import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.MicrosoftUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.util.HashMap; @@ -30,10 +28,7 @@ public class AuthMicrosoftRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); return getToken(accessTokenUrl); } @@ -102,10 +97,7 @@ public class AuthMicrosoftRequest extends BaseAuthRequest { */ @Override public AuthResponse refresh(AuthToken authToken) { - String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() - .config(config) - .refreshToken(authToken.getRefreshToken()) - .build()); + String refreshTokenUrl = this.urlBuilder.getRefreshUrl(authToken.getRefreshToken()); return AuthResponse.builder().code(ResponseStatus.SUCCESS.getCode()).data(getToken(refreshTokenUrl)).build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java index 0e7dd12..5fa435c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.OschinaUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -29,10 +28,7 @@ public class AuthOschinaRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java index b083d9d..77d5414 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.QqUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; import me.zhyd.oauth.utils.StringUtils; @@ -34,10 +33,7 @@ public class AuthQqRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); Map accessTokenObject = GlobalAuthUtil.parseStringToMap(response.body()); if (!accessTokenObject.containsKey("access_token")) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index f5bfa88..156a878 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.TaobaoUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; /** @@ -35,10 +34,7 @@ public class AuthTaobaoRequest extends BaseAuthRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessCode = authToken.getAccessCode(); - HttpResponse response = HttpRequest.post(this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(accessCode) - .build())).execute(); + HttpResponse response = HttpRequest.post(this.urlBuilder.getAccessTokenUrl(accessCode)).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { throw new AuthException(ResponseStatus.FAILURE + ":" + accessTokenObject.getString("error_description")); diff --git a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java index 9fa0980..976cc9c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.TencentCloudUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -29,10 +28,7 @@ public class AuthTencentCloudRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.getIntValue("code") != 0) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java index 580c6d6..7883083 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java @@ -12,7 +12,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.ToutiaoUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -30,10 +29,7 @@ public class AuthToutiaoRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java index f59e577..2614748 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java @@ -8,8 +8,6 @@ import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.WechatUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; -import me.zhyd.oauth.url.entity.AuthRefreshTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -32,10 +30,7 @@ public class AuthWeChatRequest extends BaseAuthRequest { */ @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); return this.getToken(accessTokenUrl); } @@ -67,10 +62,7 @@ public class AuthWeChatRequest extends BaseAuthRequest { @Override public AuthResponse refresh(AuthToken oldToken) { - String refreshTokenUrl = this.urlBuilder.getRefreshUrl(AuthRefreshTokenEntity.builder() - .config(config) - .refreshToken(oldToken.getRefreshToken()) - .build()); + String refreshTokenUrl = this.urlBuilder.getRefreshUrl(oldToken.getRefreshToken()); return AuthResponse.builder() .code(ResponseStatus.SUCCESS.getCode()) .data(this.getToken(refreshTokenUrl)) diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java index e028299..99c8bb8 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java @@ -11,7 +11,6 @@ import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.WeiboUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAccessTokenEntity; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.IpUtils; import me.zhyd.oauth.utils.StringUtils; @@ -32,10 +31,7 @@ public class AuthWeiboRequest extends BaseAuthRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(AuthAccessTokenEntity.builder() - .config(config) - .code(authCallback.getCode()) - .build()); + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); String accessTokenStr = response.body(); JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr); diff --git a/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java b/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java index f6765e5..8b83d27 100644 --- a/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java +++ b/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java @@ -9,7 +9,6 @@ import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.url.AbstractUrlBuilder; -import me.zhyd.oauth.url.entity.AuthAuthorizeEntity; import me.zhyd.oauth.utils.AuthChecker; /** @@ -36,6 +35,7 @@ public abstract class BaseAuthRequest implements AuthRequest { public BaseAuthRequest(AuthConfig config, AuthSource source, AbstractUrlBuilder urlBuilder) { this(config, source); this.urlBuilder = urlBuilder; + this.urlBuilder.setAuthConfig(config); } protected abstract AuthToken getAccessToken(AuthCallback authCallback); @@ -71,8 +71,6 @@ public abstract class BaseAuthRequest implements AuthRequest { */ @Override public String authorize() { - return this.urlBuilder.getAuthorizeUrl(AuthAuthorizeEntity.builder() - .config(config) - .build()); + return this.urlBuilder.getAuthorizeUrl(); } } diff --git a/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java index 640aa13..ff36a6b 100644 --- a/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java @@ -1,8 +1,9 @@ package me.zhyd.oauth.url; +import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.request.ResponseStatus; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.StringUtils; /** @@ -12,18 +13,20 @@ import me.zhyd.oauth.utils.StringUtils; */ public abstract class AbstractUrlBuilder { + protected AuthConfig config; + /** * 获取AccessToken的URL * - * @param accessTokenEntity + * @param code 第三方平台返回的code * @return AccessTokenUrl */ - public abstract String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity); + public abstract String getAccessTokenUrl(String code); /** * 获取用户信息的URL * - * @param userInfoEntity + * @param userInfoEntity 传递生成 UserInfoUrl 必须的参数 * @return UserInfoUrl */ public abstract String getUserInfoUrl(AuthUserInfoEntity userInfoEntity); @@ -31,33 +34,34 @@ public abstract class AbstractUrlBuilder { /** * 获取跳转授权页面的URL * - * @param authorizeEntity * @return AuthorizeUrl */ - public abstract String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity); + public abstract String getAuthorizeUrl(); /** * 获取刷新token的URL * - * @param refreshTokenEntity + * @param refreshToken 授权后取得的refresh token * @return RefreshUrl */ - public abstract String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity); + public abstract String getRefreshUrl(String refreshToken); /** * 获取取消授权的URL * - * @param revokeEntity + * @param accessToken 授权后的token * @return RevokeUrl */ - public abstract String getRevokeUrl(AuthRevokeEntity revokeEntity); + public abstract String getRevokeUrl(String accessToken); /** * 获取openId的地址,目前只有qq平台需要,故不需要子类强制重写 * - * @param accessToken - * @param unionid - * @return + * @param accessToken 用户授权后返回的accesstoken + * @param unionid 是否需要申请unionid,目前只针对qq登录 + * 注:qq授权登录时,获取unionid需要单独发送邮件申请权限。如果个人开发者账号中申请了该权限,可以将该值置为true,在获取openId时就会同步获取unionId + * 参考链接:http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D + * @return openIdUrl */ public String getOpenIdUrl(String accessToken, boolean unionid) { throw new AuthException(ResponseStatus.NOT_IMPLEMENTED); @@ -66,9 +70,14 @@ public abstract class AbstractUrlBuilder { /** * 获取state,如果为空, 则默认去当前日期的时间戳 * - * @param state state + * @param state 原始的state + * @return 返回不为null的state */ protected String getRealState(String state) { return StringUtils.isEmpty(state) ? String.valueOf(System.currentTimeMillis()) : state; } + + public void setAuthConfig(AuthConfig config) { + this.config = config; + } } diff --git a/src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java index ff54f54..631e7a1 100644 --- a/src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -18,7 +17,7 @@ public class AlipayUrlBuilder extends AbstractUrlBuilder { private static final String ALIPAY_AUTHORIZE_PATTERN = "{0}?app_id={1}&scope=auth_user&redirect_uri={2}&state={3}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + public String getAccessTokenUrl(String code) { return null; } @@ -28,18 +27,17 @@ public class AlipayUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(ALIPAY_AUTHORIZE_PATTERN, AuthSource.ALIPAY.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java index fe0480f..156540c 100644 --- a/src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -21,9 +20,8 @@ public class BaiduUrlBuilder extends AbstractUrlBuilder { private static final String BAIDU_REVOKE_PATTERN = "{0}?access_token={1}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(BAIDU_ACCESS_TOKEN_PATTERN, AuthSource.BAIDU.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(BAIDU_ACCESS_TOKEN_PATTERN, AuthSource.BAIDU.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -32,18 +30,17 @@ public class BaiduUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(BAIDU_AUTHORIZE_PATTERN, AuthSource.BAIDU.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { - return MessageFormat.format(BAIDU_REVOKE_PATTERN, AuthSource.BAIDU.revoke(), revokeEntity.getAccessToken()); + public String getRevokeUrl(String accessToken) { + return MessageFormat.format(BAIDU_REVOKE_PATTERN, AuthSource.BAIDU.revoke(), accessToken); } } diff --git a/src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java index 9f78e33..bcaa653 100644 --- a/src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -20,10 +19,8 @@ public class CodingUrlBuilder extends AbstractUrlBuilder { private static final String CODING_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(CODING_ACCESS_TOKEN_PATTERN, AuthSource.CODING.accessToken(), config.getClientId(), - config.getClientSecret(), accessTokenEntity.getCode()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(CODING_ACCESS_TOKEN_PATTERN, AuthSource.CODING.accessToken(), config.getClientId(), config.getClientSecret(), code); } @Override @@ -32,19 +29,17 @@ public class CodingUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); - return MessageFormat.format(CODING_AUTHORIZE_PATTERN, AuthSource.CODING.authorize(), config.getClientId(), - config.getRedirectUri(), this.getRealState(config.getState())); + public String getAuthorizeUrl() { + return MessageFormat.format(CODING_AUTHORIZE_PATTERN, AuthSource.CODING.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java index 8573bcc..4eb48ef 100644 --- a/src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -21,9 +20,8 @@ public class CsdnUrlBuilder extends AbstractUrlBuilder { private static final String CSDN_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(CSDN_ACCESS_TOKEN_PATTERN, AuthSource.CSDN.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(CSDN_ACCESS_TOKEN_PATTERN, AuthSource.CSDN.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -32,18 +30,17 @@ public class CsdnUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(CSDN_AUTHORIZE_PATTERN, AuthSource.CSDN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java index 580e0d6..b741102 100644 --- a/src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -19,7 +18,7 @@ public class DingtalkUrlBuilder extends AbstractUrlBuilder { private static final String DING_TALK_USER_INFO_PATTERN = "{0}?signature={1}×tamp={2}&accessKey={3}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { + public String getAccessTokenUrl(String code) { return null; } @@ -29,18 +28,17 @@ public class DingtalkUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(DING_TALK_QRCONNECT_PATTERN, AuthSource.DINGTALK.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java index 7d7bd4a..31607d6 100644 --- a/src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -21,9 +20,8 @@ public class DouyinUrlBuilder extends AbstractUrlBuilder { private static final String DOUYIN_REFRESH_TOKEN_PATTERN = "{0}?client_key={1}&refresh_token={2}&grant_type=refresh_token"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(DOUYIN_ACCESS_TOKEN_PATTERN, AuthSource.DOUYIN.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(DOUYIN_ACCESS_TOKEN_PATTERN, AuthSource.DOUYIN.accessToken(), config.getClientId(), config.getClientSecret(), code); } @Override @@ -32,19 +30,17 @@ public class DouyinUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(DOUYIN_AUTHORIZE_PATTERN, AuthSource.DOUYIN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { - AuthConfig config = refreshTokenEntity.getConfig(); - return MessageFormat.format(DOUYIN_REFRESH_TOKEN_PATTERN, AuthSource.DOUYIN.refresh(), config.getClientId(), refreshTokenEntity.getRefreshToken()); + public String getRefreshUrl(String refreshToken) { + return MessageFormat.format(DOUYIN_REFRESH_TOKEN_PATTERN, AuthSource.DOUYIN.refresh(), config.getClientId(), refreshToken); } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java index 2205f87..6a38a71 100644 --- a/src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -20,9 +19,8 @@ public class FacebookUrlBuilder extends AbstractUrlBuilder { private static final String FACEBOOK_USER_INFO_PATTERN = "{0}?access_token={1}&fields=id,name,birthday,gender,hometown,email,devices,picture.width(400)"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(FACEBOOK_ACCESS_TOKEN_PATTERN, AuthSource.FACEBOOK.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(FACEBOOK_ACCESS_TOKEN_PATTERN, AuthSource.FACEBOOK.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -31,18 +29,17 @@ public class FacebookUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(FACEBOOK_AUTHORIZE_PATTERN, AuthSource.FACEBOOK.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java index d7d13e8..09b2a9d 100644 --- a/src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.url.entity.*; @@ -20,9 +19,8 @@ public class GiteeUrlBuilder extends AbstractUrlBuilder { private static final String GITEE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(GITEE_ACCESS_TOKEN_PATTERN, AuthSource.GITEE.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(GITEE_ACCESS_TOKEN_PATTERN, AuthSource.GITEE.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -31,18 +29,17 @@ public class GiteeUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(GITEE_AUTHORIZE_PATTERN, AuthSource.GITEE.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java index 21ee126..d57eea4 100644 --- a/src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -20,9 +19,8 @@ public class GithubUrlBuilder extends AbstractUrlBuilder { private static final String GITHUB_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(GITHUB_ACCESS_TOKEN_PATTERN, AuthSource.GITHUB.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(GITHUB_ACCESS_TOKEN_PATTERN, AuthSource.GITHUB.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -31,18 +29,17 @@ public class GithubUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(GITHUB_AUTHORIZE_PATTERN, AuthSource.GITHUB.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java index 6b2a173..f8fbc2d 100644 --- a/src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -20,9 +19,8 @@ public class GoogleUrlBuilder extends AbstractUrlBuilder { private static final String GOOGLE_USER_INFO_PATTERN = "{0}?id_token={1}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(GOOGLE_ACCESS_TOKEN_PATTERN, AuthSource.GOOGLE.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(GOOGLE_ACCESS_TOKEN_PATTERN, AuthSource.GOOGLE.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -31,18 +29,17 @@ public class GoogleUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(GOOGLE_AUTHORIZE_PATTERN, AuthSource.GOOGLE.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java index 78041a2..269c153 100644 --- a/src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -21,9 +20,8 @@ public class LinkedinUrlBuilder extends AbstractUrlBuilder { private static final String LINKEDIN_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&refresh_token={3}&grant_type=refresh_token"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(LINKEDIN_ACCESS_TOKEN_PATTERN, AuthSource.LINKEDIN.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(LINKEDIN_ACCESS_TOKEN_PATTERN, AuthSource.LINKEDIN.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -32,19 +30,17 @@ public class LinkedinUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(LINKEDIN_AUTHORIZE_PATTERN, AuthSource.LINKEDIN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { - AuthConfig config = refreshTokenEntity.getConfig(); - return MessageFormat.format(LINKEDIN_REFRESH_TOKEN_PATTERN, AuthSource.LINKEDIN.refresh(), config.getClientId(), config.getClientSecret(), refreshTokenEntity.getRefreshToken()); + public String getRefreshUrl(String refreshToken) { + return MessageFormat.format(LINKEDIN_REFRESH_TOKEN_PATTERN, AuthSource.LINKEDIN.refresh(), config.getClientId(), config.getClientSecret(), refreshToken); } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java index 982d25a..5efcbdb 100644 --- a/src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -21,9 +20,8 @@ public class MiUrlBuilder extends AbstractUrlBuilder { private static final String MI_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(MI_ACCESS_TOKEN_PATTERN, AuthSource.MI.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), accessTokenEntity.getCode()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(MI_ACCESS_TOKEN_PATTERN, AuthSource.MI.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), code); } @Override @@ -32,19 +30,17 @@ public class MiUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(MI_AUTHORIZE_PATTERN, AuthSource.MI.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { - AuthConfig config = refreshTokenEntity.getConfig(); - return MessageFormat.format(MI_REFRESH_TOKEN_PATTERN, AuthSource.MI.refresh(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), refreshTokenEntity.getRefreshToken()); + public String getRefreshUrl(String refreshToken) { + return MessageFormat.format(MI_REFRESH_TOKEN_PATTERN, AuthSource.MI.refresh(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), refreshToken); } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java index 0d29b74..01671b6 100644 --- a/src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -21,9 +20,8 @@ public class MicrosoftUrlBuilder extends AbstractUrlBuilder { private static final String MICROSOFT_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(MICROSOFT_ACCESS_TOKEN_PATTERN, AuthSource.MICROSOFT.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), accessTokenEntity.getCode()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(MICROSOFT_ACCESS_TOKEN_PATTERN, AuthSource.MICROSOFT.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), code); } @Override @@ -32,19 +30,17 @@ public class MicrosoftUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(MICROSOFT_AUTHORIZE_PATTERN, AuthSource.MICROSOFT.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { - AuthConfig config = refreshTokenEntity.getConfig(); - return MessageFormat.format(MICROSOFT_REFRESH_TOKEN_PATTERN, AuthSource.MICROSOFT.refresh(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), refreshTokenEntity.getRefreshToken()); + public String getRefreshUrl(String refreshToken) { + return MessageFormat.format(MICROSOFT_REFRESH_TOKEN_PATTERN, AuthSource.MICROSOFT.refresh(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), refreshToken); } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java index 8fdb42b..6190307 100644 --- a/src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -20,10 +19,8 @@ public class OschinaUrlBuilder extends AbstractUrlBuilder { private static final String OSCHINA_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(OSCHINA_ACCESS_TOKEN_PATTERN, AuthSource.OSCHINA.accessToken(), config.getClientId(), - config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(OSCHINA_ACCESS_TOKEN_PATTERN, AuthSource.OSCHINA.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -32,19 +29,17 @@ public class OschinaUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); - return MessageFormat.format(OSCHINA_AUTHORIZE_PATTERN, AuthSource.OSCHINA.authorize(), config.getClientId(), - config.getRedirectUri(), this.getRealState(config.getState())); + public String getAuthorizeUrl() { + return MessageFormat.format(OSCHINA_AUTHORIZE_PATTERN, AuthSource.OSCHINA.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java index 352f030..fc435a0 100644 --- a/src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -21,10 +20,8 @@ public class QqUrlBuilder extends AbstractUrlBuilder { private static final String QQ_OPENID_PATTERN = "{0}?access_token={1}&unionid={2}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(QQ_ACCESS_TOKEN_PATTERN, AuthSource.QQ.accessToken(), config.getClientId(), - config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(QQ_ACCESS_TOKEN_PATTERN, AuthSource.QQ.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -33,19 +30,17 @@ public class QqUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); - return MessageFormat.format(QQ_AUTHORIZE_PATTERN, AuthSource.QQ.authorize(), config.getClientId(), - config.getRedirectUri(), this.getRealState(config.getState())); + public String getAuthorizeUrl() { + return MessageFormat.format(QQ_AUTHORIZE_PATTERN, AuthSource.QQ.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } diff --git a/src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java index 53d75b2..14d808d 100644 --- a/src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -19,10 +18,8 @@ public class TaobaoUrlBuilder extends AbstractUrlBuilder { private static final String TAOBAO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(TAOBAO_ACCESS_TOKEN_PATTERN, AuthSource.TAOBAO.accessToken(), config.getClientId(), - config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(TAOBAO_ACCESS_TOKEN_PATTERN, AuthSource.TAOBAO.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -31,19 +28,17 @@ public class TaobaoUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); - return MessageFormat.format(TAOBAO_AUTHORIZE_PATTERN, AuthSource.TAOBAO.authorize(), config.getClientId(), - config.getRedirectUri(), this.getRealState(config.getState())); + public String getAuthorizeUrl() { + return MessageFormat.format(TAOBAO_AUTHORIZE_PATTERN, AuthSource.TAOBAO.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java index 74f07ad..dfc4796 100644 --- a/src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -20,10 +19,8 @@ public class TencentCloudUrlBuilder extends AbstractUrlBuilder { private static final String TENCENT_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(TENCENT_ACCESS_TOKEN_PATTERN, AuthSource.TENCENT_CLOUD.accessToken(), config.getClientId(), - config.getClientSecret(), accessTokenEntity.getCode()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(TENCENT_ACCESS_TOKEN_PATTERN, AuthSource.TENCENT_CLOUD.accessToken(), config.getClientId(), config.getClientSecret(), code); } @Override @@ -32,19 +29,17 @@ public class TencentCloudUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); - return MessageFormat.format(TENCENT_AUTHORIZE_PATTERN, AuthSource.TENCENT_CLOUD.authorize(), config.getClientId(), - config.getRedirectUri(), this.getRealState(config.getState())); + public String getAuthorizeUrl() { + return MessageFormat.format(TENCENT_AUTHORIZE_PATTERN, AuthSource.TENCENT_CLOUD.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java index 3ef28f2..02336b8 100644 --- a/src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -20,10 +19,8 @@ public class ToutiaoUrlBuilder extends AbstractUrlBuilder { private static final String TOUTIAO_AUTHORIZE_PATTERN = "{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&auth_only=1&display=0"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(TOUTIAO_ACCESS_TOKEN_PATTERN, AuthSource.TOUTIAO.accessToken(), config.getClientId(), - config.getClientSecret(), accessTokenEntity.getCode()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(TOUTIAO_ACCESS_TOKEN_PATTERN, AuthSource.TOUTIAO.accessToken(), config.getClientId(), config.getClientSecret(), code); } @Override @@ -32,19 +29,17 @@ public class ToutiaoUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); - return MessageFormat.format(TOUTIAO_AUTHORIZE_PATTERN, AuthSource.TOUTIAO.authorize(), config.getClientId(), - config.getRedirectUri(), this.getRealState(config.getState())); + public String getAuthorizeUrl() { + return MessageFormat.format(TOUTIAO_AUTHORIZE_PATTERN, AuthSource.TOUTIAO.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java index eee7082..2e676f1 100644 --- a/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -21,9 +20,8 @@ public class WechatUrlBuilder extends AbstractUrlBuilder { private static final String WECHAT_USER_INFO_PATTERN = "{0}?access_token={1}&openid={2}&lang=zh_CN"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(WECHAT_ACCESS_TOKEN_PATTERN, AuthSource.WECHAT.accessToken(), config.getClientId(), config.getClientSecret(), accessTokenEntity.getCode()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(WECHAT_ACCESS_TOKEN_PATTERN, AuthSource.WECHAT.accessToken(), config.getClientId(), config.getClientSecret(), code); } @Override @@ -32,18 +30,17 @@ public class WechatUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); + public String getAuthorizeUrl() { return MessageFormat.format(WECHAT_AUTHORIZE_PATTERN, AuthSource.WECHAT.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { - return MessageFormat.format(WECHAT_REFRESH_TOKEN_PATTERN, AuthSource.WECHAT.refresh(), refreshTokenEntity.getConfig().getClientId(), refreshTokenEntity.getRefreshToken()); + public String getRefreshUrl(String refreshToken) { + return MessageFormat.format(WECHAT_REFRESH_TOKEN_PATTERN, AuthSource.WECHAT.refresh(), config.getClientId(), refreshToken); } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java index c594cc1..258b21d 100644 --- a/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java @@ -1,8 +1,7 @@ package me.zhyd.oauth.url; -import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.*; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -20,10 +19,8 @@ public class WeiboUrlBuilder extends AbstractUrlBuilder { private static final String WEIBO_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; @Override - public String getAccessTokenUrl(AuthAccessTokenEntity accessTokenEntity) { - AuthConfig config = accessTokenEntity.getConfig(); - return MessageFormat.format(WEIBO_ACCESS_TOKEN_PATTERN, AuthSource.WEIBO.accessToken(), config.getClientId(), - config.getClientSecret(), accessTokenEntity.getCode(), config.getRedirectUri()); + public String getAccessTokenUrl(String code) { + return MessageFormat.format(WEIBO_ACCESS_TOKEN_PATTERN, AuthSource.WEIBO.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); } @Override @@ -32,19 +29,17 @@ public class WeiboUrlBuilder extends AbstractUrlBuilder { } @Override - public String getAuthorizeUrl(AuthAuthorizeEntity authorizeEntity) { - AuthConfig config = authorizeEntity.getConfig(); - return MessageFormat.format(WEIBO_AUTHORIZE_PATTERN, AuthSource.WEIBO.authorize(), config.getClientId(), - config.getRedirectUri(), this.getRealState(config.getState())); + public String getAuthorizeUrl() { + return MessageFormat.format(WEIBO_AUTHORIZE_PATTERN, AuthSource.WEIBO.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); } @Override - public String getRefreshUrl(AuthRefreshTokenEntity refreshTokenEntity) { + public String getRefreshUrl(String refreshToken) { return null; } @Override - public String getRevokeUrl(AuthRevokeEntity revokeEntity) { + public String getRevokeUrl(String accessToken) { return null; } } diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthAccessTokenEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthAccessTokenEntity.java deleted file mode 100644 index d71dbb8..0000000 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthAccessTokenEntity.java +++ /dev/null @@ -1,25 +0,0 @@ -package me.zhyd.oauth.url.entity; - -import lombok.Builder; -import lombok.Getter; -import me.zhyd.oauth.config.AuthConfig; - -/** - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -@Getter -@Builder -public class AuthAccessTokenEntity { - - /** - * JustAuth的配置类 - */ - private AuthConfig config; - - /** - * 访问AuthorizeUrl后回调时带的参数code - */ - private String code; -} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthAuthorizeEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthAuthorizeEntity.java deleted file mode 100644 index 0ae8b31..0000000 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthAuthorizeEntity.java +++ /dev/null @@ -1,20 +0,0 @@ -package me.zhyd.oauth.url.entity; - -import lombok.Builder; -import lombok.Getter; -import me.zhyd.oauth.config.AuthConfig; - -/** - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -@Getter -@Builder -public class AuthAuthorizeEntity { - - /** - * JustAuth的配置类 - */ - private AuthConfig config; -} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java deleted file mode 100644 index 0b26112..0000000 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthRefreshTokenEntity.java +++ /dev/null @@ -1,18 +0,0 @@ -package me.zhyd.oauth.url.entity; - -import lombok.Builder; -import lombok.Getter; -import me.zhyd.oauth.config.AuthConfig; - -/** - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -@Getter -@Builder -public class AuthRefreshTokenEntity { - - private AuthConfig config; - private String refreshToken; -} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java deleted file mode 100644 index a43abe3..0000000 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthRevokeEntity.java +++ /dev/null @@ -1,15 +0,0 @@ -package me.zhyd.oauth.url.entity; - -import lombok.*; - -/** - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -@Getter -@Builder -public class AuthRevokeEntity { - - private String accessToken; -} diff --git a/update.md b/update.md index 2b04ff0..070b618 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,7 @@ +### 2019/07/16 +1. 重构UrlBuilder类 +2. 将CSDN相关的类置为`Deprecated`,后续可能会删除,也可能一直保留。毕竟CSDN的openAPI已经不对外开放了。 + ### 2019/07/15 1. 新增 `AuthState` 类,内置默认的state生成规则和校验规则 From 8a4861075e87a6e92ff3e5ba7657534a1569cb7d Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 17:59:36 +0800 Subject: [PATCH 10/44] :recycle: rename --- .../java/me/zhyd/oauth/config/AuthSource.java | 10 ++++---- .../zhyd/oauth/exception/AuthException.java | 6 ++--- .../me/zhyd/oauth/model/AuthResponse.java | 3 +-- .../AuthResponseStatus.java} | 6 ++--- .../zhyd/oauth/request/AuthAlipayRequest.java | 6 ++--- .../zhyd/oauth/request/AuthBaiduRequest.java | 10 ++++---- .../zhyd/oauth/request/AuthCodingRequest.java | 6 ++--- .../zhyd/oauth/request/AuthCsdnRequest.java | 6 ++--- ...thRequest.java => AuthDefaultRequest.java} | 23 +++++++++---------- .../oauth/request/AuthDingTalkRequest.java | 6 ++--- .../zhyd/oauth/request/AuthDouyinRequest.java | 8 +++---- .../oauth/request/AuthFacebookRequest.java | 6 ++--- .../zhyd/oauth/request/AuthGiteeRequest.java | 6 ++--- .../zhyd/oauth/request/AuthGithubRequest.java | 6 ++--- .../zhyd/oauth/request/AuthGoogleRequest.java | 6 ++--- .../oauth/request/AuthLinkedinRequest.java | 10 ++++---- .../me/zhyd/oauth/request/AuthMiRequest.java | 8 +++---- .../oauth/request/AuthMicrosoftRequest.java | 8 +++---- .../oauth/request/AuthOschinaRequest.java | 6 ++--- .../me/zhyd/oauth/request/AuthQqRequest.java | 6 ++--- .../me/zhyd/oauth/request/AuthRequest.java | 9 ++++---- .../zhyd/oauth/request/AuthTaobaoRequest.java | 13 ++++------- .../request/AuthTencentCloudRequest.java | 6 ++--- .../oauth/request/AuthToutiaoRequest.java | 6 ++--- .../zhyd/oauth/request/AuthWeChatRequest.java | 8 +++---- .../zhyd/oauth/request/AuthWeiboRequest.java | 6 ++--- ...Builder.java => AuthAlipayUrlBuilder.java} | 12 ++++++---- ...lBuilder.java => AuthBaiduUrlBuilder.java} | 6 +++-- ...Builder.java => AuthCodingUrlBuilder.java} | 8 ++++--- ...rlBuilder.java => AuthCsdnUrlBuilder.java} | 8 ++++--- ...uilder.java => AuthDefaultUrlBuilder.java} | 6 ++--- ...ilder.java => AuthDingtalkUrlBuilder.java} | 10 ++++---- ...Builder.java => AuthDouyinUrlBuilder.java} | 6 +++-- ...ilder.java => AuthFacebookUrlBuilder.java} | 8 ++++--- ...lBuilder.java => AuthGiteeUrlBuilder.java} | 8 ++++--- ...Builder.java => AuthGithubUrlBuilder.java} | 8 ++++--- ...Builder.java => AuthGoogleUrlBuilder.java} | 8 ++++--- ...ilder.java => AuthLinkedinUrlBuilder.java} | 6 +++-- ...iUrlBuilder.java => AuthMiUrlBuilder.java} | 6 +++-- ...lder.java => AuthMicrosoftUrlBuilder.java} | 6 +++-- ...uilder.java => AuthOschinaUrlBuilder.java} | 8 ++++--- ...qUrlBuilder.java => AuthQqUrlBuilder.java} | 8 ++++--- ...Builder.java => AuthTaobaoUrlBuilder.java} | 10 ++++---- ...r.java => AuthTencentCloudUrlBuilder.java} | 8 ++++--- ...uilder.java => AuthToutiaoUrlBuilder.java} | 8 ++++--- ...Builder.java => AuthWechatUrlBuilder.java} | 6 +++-- ...lBuilder.java => AuthWeiboUrlBuilder.java} | 8 ++++--- .../java/me/zhyd/oauth/utils/AuthChecker.java | 14 +++++------ .../java/me/zhyd/oauth/utils/AuthState.java | 4 ++-- update.md | 2 ++ 50 files changed, 210 insertions(+), 172 deletions(-) rename src/main/java/me/zhyd/oauth/{request/ResponseStatus.java => model/AuthResponseStatus.java} (87%) rename src/main/java/me/zhyd/oauth/request/{BaseAuthRequest.java => AuthDefaultRequest.java} (72%) rename src/main/java/me/zhyd/oauth/url/{AlipayUrlBuilder.java => AuthAlipayUrlBuilder.java} (68%) rename src/main/java/me/zhyd/oauth/url/{BaiduUrlBuilder.java => AuthBaiduUrlBuilder.java} (88%) rename src/main/java/me/zhyd/oauth/url/{CodingUrlBuilder.java => AuthCodingUrlBuilder.java} (83%) rename src/main/java/me/zhyd/oauth/url/{CsdnUrlBuilder.java => AuthCsdnUrlBuilder.java} (83%) rename src/main/java/me/zhyd/oauth/url/{AbstractUrlBuilder.java => AuthDefaultUrlBuilder.java} (93%) rename src/main/java/me/zhyd/oauth/url/{DingtalkUrlBuilder.java => AuthDingtalkUrlBuilder.java} (77%) rename src/main/java/me/zhyd/oauth/url/{DouyinUrlBuilder.java => AuthDouyinUrlBuilder.java} (88%) rename src/main/java/me/zhyd/oauth/url/{FacebookUrlBuilder.java => AuthFacebookUrlBuilder.java} (84%) rename src/main/java/me/zhyd/oauth/url/{GiteeUrlBuilder.java => AuthGiteeUrlBuilder.java} (83%) rename src/main/java/me/zhyd/oauth/url/{GithubUrlBuilder.java => AuthGithubUrlBuilder.java} (83%) rename src/main/java/me/zhyd/oauth/url/{GoogleUrlBuilder.java => AuthGoogleUrlBuilder.java} (83%) rename src/main/java/me/zhyd/oauth/url/{LinkedinUrlBuilder.java => AuthLinkedinUrlBuilder.java} (89%) rename src/main/java/me/zhyd/oauth/url/{MiUrlBuilder.java => AuthMiUrlBuilder.java} (89%) rename src/main/java/me/zhyd/oauth/url/{MicrosoftUrlBuilder.java => AuthMicrosoftUrlBuilder.java} (89%) rename src/main/java/me/zhyd/oauth/url/{OschinaUrlBuilder.java => AuthOschinaUrlBuilder.java} (83%) rename src/main/java/me/zhyd/oauth/url/{QqUrlBuilder.java => AuthQqUrlBuilder.java} (86%) rename src/main/java/me/zhyd/oauth/url/{TaobaoUrlBuilder.java => AuthTaobaoUrlBuilder.java} (78%) rename src/main/java/me/zhyd/oauth/url/{TencentCloudUrlBuilder.java => AuthTencentCloudUrlBuilder.java} (83%) rename src/main/java/me/zhyd/oauth/url/{ToutiaoUrlBuilder.java => AuthToutiaoUrlBuilder.java} (83%) rename src/main/java/me/zhyd/oauth/url/{WechatUrlBuilder.java => AuthWechatUrlBuilder.java} (88%) rename src/main/java/me/zhyd/oauth/url/{WeiboUrlBuilder.java => AuthWeiboUrlBuilder.java} (83%) diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index fb6cad2..33abc00 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -1,7 +1,7 @@ package me.zhyd.oauth.config; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.request.ResponseStatus; +import me.zhyd.oauth.model.AuthResponseStatus; /** * 各api需要的url, 用枚举类分平台类型管理 @@ -79,7 +79,7 @@ public enum AuthSource { @Override public String accessToken() { - throw new AuthException(ResponseStatus.UNSUPPORTED); + throw new AuthException(AuthResponseStatus.UNSUPPORTED); } @Override @@ -265,7 +265,7 @@ public enum AuthSource { @Override public String userInfo() { - throw new AuthException(ResponseStatus.UNSUPPORTED); + throw new AuthException(AuthResponseStatus.UNSUPPORTED); } }, /** @@ -473,7 +473,7 @@ public enum AuthSource { * @return url */ public String revoke() { - throw new AuthException(ResponseStatus.UNSUPPORTED); + throw new AuthException(AuthResponseStatus.UNSUPPORTED); } /** @@ -482,7 +482,7 @@ public enum AuthSource { * @return url */ public String refresh() { - throw new AuthException(ResponseStatus.UNSUPPORTED); + throw new AuthException(AuthResponseStatus.UNSUPPORTED); } } \ No newline at end of file diff --git a/src/main/java/me/zhyd/oauth/exception/AuthException.java b/src/main/java/me/zhyd/oauth/exception/AuthException.java index aed33b2..5391568 100644 --- a/src/main/java/me/zhyd/oauth/exception/AuthException.java +++ b/src/main/java/me/zhyd/oauth/exception/AuthException.java @@ -1,6 +1,6 @@ package me.zhyd.oauth.exception; -import me.zhyd.oauth.request.ResponseStatus; +import me.zhyd.oauth.model.AuthResponseStatus; /** * @author yadong.zhang (yadong.zhang0415(a)gmail.com) @@ -13,7 +13,7 @@ public class AuthException extends RuntimeException { private String errorMsg; public AuthException(String errorMsg) { - this(ResponseStatus.FAILURE.getCode(), errorMsg); + this(AuthResponseStatus.FAILURE.getCode(), errorMsg); } public AuthException(int errorCode, String errorMsg) { @@ -22,7 +22,7 @@ public class AuthException extends RuntimeException { this.errorMsg = errorMsg; } - public AuthException(ResponseStatus status) { + public AuthException(AuthResponseStatus status) { super(status.getMsg()); } diff --git a/src/main/java/me/zhyd/oauth/model/AuthResponse.java b/src/main/java/me/zhyd/oauth/model/AuthResponse.java index 04f9ceb..9ba74fc 100644 --- a/src/main/java/me/zhyd/oauth/model/AuthResponse.java +++ b/src/main/java/me/zhyd/oauth/model/AuthResponse.java @@ -3,7 +3,6 @@ package me.zhyd.oauth.model; import lombok.Builder; import lombok.Getter; import lombok.Setter; -import me.zhyd.oauth.request.ResponseStatus; /** * JustAuth统一授权响应类 @@ -37,6 +36,6 @@ public class AuthResponse { * @return true or false */ public boolean ok() { - return this.code == ResponseStatus.SUCCESS.getCode(); + return this.code == AuthResponseStatus.SUCCESS.getCode(); } } diff --git a/src/main/java/me/zhyd/oauth/request/ResponseStatus.java b/src/main/java/me/zhyd/oauth/model/AuthResponseStatus.java similarity index 87% rename from src/main/java/me/zhyd/oauth/request/ResponseStatus.java rename to src/main/java/me/zhyd/oauth/model/AuthResponseStatus.java index 82a78c4..f099072 100644 --- a/src/main/java/me/zhyd/oauth/request/ResponseStatus.java +++ b/src/main/java/me/zhyd/oauth/model/AuthResponseStatus.java @@ -1,11 +1,11 @@ -package me.zhyd.oauth.request; +package me.zhyd.oauth.model; /** * @author yadong.zhang (yadong.zhang0415(a)gmail.com) * @version 1.0 * @since 1.8 */ -public enum ResponseStatus { +public enum AuthResponseStatus { SUCCESS(2000, "Success"), FAILURE(5000, "Failure"), NOT_IMPLEMENTED(5001, "Not Implemented"), @@ -21,7 +21,7 @@ public enum ResponseStatus { private int code; private String msg; - ResponseStatus(int code, String msg) { + AuthResponseStatus(int code, String msg) { this.code = code; this.msg = msg; } diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index e43d76f..16536a8 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -14,7 +14,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AlipayUrlBuilder; +import me.zhyd.oauth.url.AuthAlipayUrlBuilder; import me.zhyd.oauth.utils.StringUtils; /** @@ -24,12 +24,12 @@ import me.zhyd.oauth.utils.StringUtils; * @version 1.0 * @since 1.8 */ -public class AuthAlipayRequest extends BaseAuthRequest { +public class AuthAlipayRequest extends AuthDefaultRequest { private AlipayClient alipayClient; public AuthAlipayRequest(AuthConfig config) { - super(config, AuthSource.ALIPAY, new AlipayUrlBuilder()); + super(config, AuthSource.ALIPAY, new AuthAlipayUrlBuilder()); this.alipayClient = new DefaultAlipayClient(AuthSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config .getAlipayPublicKey(), "RSA2"); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java index 2d2224b..bb2082f 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.enums.AuthBaiduErrorCode; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.BaiduUrlBuilder; +import me.zhyd.oauth.url.AuthBaiduUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -18,10 +18,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.0 * @since 1.8 */ -public class AuthBaiduRequest extends BaseAuthRequest { +public class AuthBaiduRequest extends AuthDefaultRequest { public AuthBaiduRequest(AuthConfig config) { - super(config, AuthSource.BAIDU, new BaiduUrlBuilder()); + super(config, AuthSource.BAIDU, new AuthBaiduUrlBuilder()); } @Override @@ -71,11 +71,11 @@ public class AuthBaiduRequest extends BaseAuthRequest { JSONObject object = JSONObject.parseObject(userInfo); if (object.containsKey("error_code")) { return AuthResponse.builder() - .code(ResponseStatus.FAILURE.getCode()) + .code(AuthResponseStatus.FAILURE.getCode()) .msg(object.getString("error_msg")) .build(); } - ResponseStatus status = object.getIntValue("result") == 1 ? ResponseStatus.SUCCESS : ResponseStatus.FAILURE; + AuthResponseStatus status = object.getIntValue("result") == 1 ? AuthResponseStatus.SUCCESS : AuthResponseStatus.FAILURE; return AuthResponse.builder().code(status.getCode()).msg(status.getMsg()).build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java index 1faf58c..d463f8e 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.CodingUrlBuilder; +import me.zhyd.oauth.url.AuthCodingUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -20,10 +20,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.0 * @since 1.8 */ -public class AuthCodingRequest extends BaseAuthRequest { +public class AuthCodingRequest extends AuthDefaultRequest { public AuthCodingRequest(AuthConfig config) { - super(config, AuthSource.CODING, new CodingUrlBuilder()); + super(config, AuthSource.CODING, new AuthCodingUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java index a823004..3841312 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.CsdnUrlBuilder; +import me.zhyd.oauth.url.AuthCsdnUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -21,10 +21,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @since 1.8 */ @Deprecated -public class AuthCsdnRequest extends BaseAuthRequest { +public class AuthCsdnRequest extends AuthDefaultRequest { public AuthCsdnRequest(AuthConfig config) { - super(config, AuthSource.CSDN, new CsdnUrlBuilder()); + super(config, AuthSource.CSDN, new AuthCsdnUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java similarity index 72% rename from src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java rename to src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java index 8b83d27..065e4d1 100644 --- a/src/main/java/me/zhyd/oauth/request/BaseAuthRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java @@ -4,35 +4,34 @@ import lombok.Data; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthResponse; -import me.zhyd.oauth.model.AuthToken; -import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.url.AbstractUrlBuilder; +import me.zhyd.oauth.model.*; +import me.zhyd.oauth.url.AuthDefaultUrlBuilder; import me.zhyd.oauth.utils.AuthChecker; /** + * 默认的request处理类 + * * @author yadong.zhang (yadong.zhang0415(a)gmail.com) * @version 1.0 * @since 1.8 */ @Data -public abstract class BaseAuthRequest implements AuthRequest { +public abstract class AuthDefaultRequest implements AuthRequest { protected AuthConfig config; protected AuthSource source; - protected AbstractUrlBuilder urlBuilder; + protected AuthDefaultUrlBuilder urlBuilder; - public BaseAuthRequest(AuthConfig config, AuthSource source) { + public AuthDefaultRequest(AuthConfig config, AuthSource source) { this.config = config; this.source = source; if (!AuthChecker.isSupportedAuth(config, source)) { - throw new AuthException(ResponseStatus.PARAMETER_INCOMPLETE); + throw new AuthException(AuthResponseStatus.PARAMETER_INCOMPLETE); } // 校验配置合法性 AuthChecker.checkConfig(config, source); } - public BaseAuthRequest(AuthConfig config, AuthSource source, AbstractUrlBuilder urlBuilder) { + public AuthDefaultRequest(AuthConfig config, AuthSource source, AuthDefaultUrlBuilder urlBuilder) { this(config, source); this.urlBuilder = urlBuilder; this.urlBuilder.setAuthConfig(config); @@ -50,14 +49,14 @@ public abstract class BaseAuthRequest implements AuthRequest { AuthToken authToken = this.getAccessToken(authCallback); AuthUser user = this.getUserInfo(authToken); - return AuthResponse.builder().code(ResponseStatus.SUCCESS.getCode()).data(user).build(); + return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(user).build(); } catch (Exception e) { return this.responseError(e); } } private AuthResponse responseError(Exception e) { - int errorCode = ResponseStatus.FAILURE.getCode(); + int errorCode = AuthResponseStatus.FAILURE.getCode(); if (e instanceof AuthException) { errorCode = ((AuthException) e).getErrorCode(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java index ef59d56..d61912c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java @@ -12,7 +12,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.DingtalkUrlBuilder; +import me.zhyd.oauth.url.AuthDingtalkUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; @@ -23,10 +23,10 @@ import me.zhyd.oauth.utils.GlobalAuthUtil; * @version 1.0 * @since 1.8 */ -public class AuthDingTalkRequest extends BaseAuthRequest { +public class AuthDingTalkRequest extends AuthDefaultRequest { public AuthDingTalkRequest(AuthConfig config) { - super(config, AuthSource.DINGTALK, new DingtalkUrlBuilder()); + super(config, AuthSource.DINGTALK, new AuthDingtalkUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java index 0780698..338c1f5 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java @@ -7,7 +7,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.DouyinUrlBuilder; +import me.zhyd.oauth.url.AuthDouyinUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; @@ -18,10 +18,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.0 * @since 1.8 */ -public class AuthDouyinRequest extends BaseAuthRequest { +public class AuthDouyinRequest extends AuthDefaultRequest { public AuthDouyinRequest(AuthConfig config) { - super(config, AuthSource.DOUYIN, new DouyinUrlBuilder()); + super(config, AuthSource.DOUYIN, new AuthDouyinUrlBuilder()); } @Override @@ -59,7 +59,7 @@ public class AuthDouyinRequest extends BaseAuthRequest { public AuthResponse refresh(AuthToken oldToken) { String refreshTokenUrl = this.urlBuilder.getRefreshUrl(oldToken.getRefreshToken()); return AuthResponse.builder() - .code(ResponseStatus.SUCCESS.getCode()) + .code(AuthResponseStatus.SUCCESS.getCode()) .data(this.getToken(refreshTokenUrl)) .build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java index 138279c..ccf32d3 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.FacebookUrlBuilder; +import me.zhyd.oauth.url.AuthFacebookUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -20,10 +20,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.0 * @since 1.8 */ -public class AuthFacebookRequest extends BaseAuthRequest { +public class AuthFacebookRequest extends AuthDefaultRequest { public AuthFacebookRequest(AuthConfig config) { - super(config, AuthSource.FACEBOOK, new FacebookUrlBuilder()); + super(config, AuthSource.FACEBOOK, new AuthFacebookUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index f4f3b72..54682e9 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.GiteeUrlBuilder; +import me.zhyd.oauth.url.AuthGiteeUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -20,10 +20,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.0 * @since 1.8 */ -public class AuthGiteeRequest extends BaseAuthRequest { +public class AuthGiteeRequest extends AuthDefaultRequest { public AuthGiteeRequest(AuthConfig config) { - super(config, AuthSource.GITEE, new GiteeUrlBuilder()); + super(config, AuthSource.GITEE, new AuthGiteeUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java index 3c4ee86..76b1d23 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.GithubUrlBuilder; +import me.zhyd.oauth.url.AuthGithubUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; @@ -23,10 +23,10 @@ import java.util.Map; * @version 1.0 * @since 1.8 */ -public class AuthGithubRequest extends BaseAuthRequest { +public class AuthGithubRequest extends AuthDefaultRequest { public AuthGithubRequest(AuthConfig config) { - super(config, AuthSource.GITHUB, new GithubUrlBuilder()); + super(config, AuthSource.GITHUB, new AuthGithubUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java index aca0adb..6935060 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.GoogleUrlBuilder; +import me.zhyd.oauth.url.AuthGoogleUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -20,10 +20,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.3 * @since 1.3 */ -public class AuthGoogleRequest extends BaseAuthRequest { +public class AuthGoogleRequest extends AuthDefaultRequest { public AuthGoogleRequest(AuthConfig config) { - super(config, AuthSource.GOOGLE, new GoogleUrlBuilder()); + super(config, AuthSource.GOOGLE, new AuthGoogleUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index 5756f7c..e6d4130 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.LinkedinUrlBuilder; +import me.zhyd.oauth.url.AuthLinkedinUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.StringUtils; @@ -20,10 +20,10 @@ import me.zhyd.oauth.utils.StringUtils; * @version 1.0 * @since 1.8 */ -public class AuthLinkedinRequest extends BaseAuthRequest { +public class AuthLinkedinRequest extends AuthDefaultRequest { public AuthLinkedinRequest(AuthConfig config) { - super(config, AuthSource.LINKEDIN, new LinkedinUrlBuilder()); + super(config, AuthSource.LINKEDIN, new AuthLinkedinUrlBuilder()); } @Override @@ -116,11 +116,11 @@ public class AuthLinkedinRequest extends BaseAuthRequest { @Override public AuthResponse refresh(AuthToken oldToken) { if (StringUtils.isEmpty(oldToken.getRefreshToken())) { - throw new AuthException(ResponseStatus.UNSUPPORTED); + throw new AuthException(AuthResponseStatus.UNSUPPORTED); } String refreshTokenUrl = this.urlBuilder.getRefreshUrl(oldToken.getRefreshToken()); return AuthResponse.builder() - .code(ResponseStatus.SUCCESS.getCode()) + .code(AuthResponseStatus.SUCCESS.getCode()) .data(this.getToken(refreshTokenUrl)) .build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java index 217bfe2..3903a95 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.MiUrlBuilder; +import me.zhyd.oauth.url.AuthMiUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -20,11 +20,11 @@ import java.text.MessageFormat; * @version 1.5 * @since 1.5 */ -public class AuthMiRequest extends BaseAuthRequest { +public class AuthMiRequest extends AuthDefaultRequest { private static final String PREFIX = "&&&START&&&"; public AuthMiRequest(AuthConfig config) { - super(config, AuthSource.MI, new MiUrlBuilder()); + super(config, AuthSource.MI, new AuthMiUrlBuilder()); } @Override @@ -105,6 +105,6 @@ public class AuthMiRequest extends BaseAuthRequest { public AuthResponse refresh(AuthToken authToken) { String miRefreshUrl = this.urlBuilder.getRefreshUrl(authToken.getRefreshToken()); - return AuthResponse.builder().code(ResponseStatus.SUCCESS.getCode()).data(getToken(miRefreshUrl)).build(); + return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(getToken(miRefreshUrl)).build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java index 618ca8f..7b2dec1 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.MicrosoftUrlBuilder; +import me.zhyd.oauth.url.AuthMicrosoftUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.util.HashMap; @@ -21,9 +21,9 @@ import java.util.Map; * @version 1.5 * @since 1.5 */ -public class AuthMicrosoftRequest extends BaseAuthRequest { +public class AuthMicrosoftRequest extends AuthDefaultRequest { public AuthMicrosoftRequest(AuthConfig config) { - super(config, AuthSource.MICROSOFT, new MicrosoftUrlBuilder()); + super(config, AuthSource.MICROSOFT, new AuthMicrosoftUrlBuilder()); } @Override @@ -99,6 +99,6 @@ public class AuthMicrosoftRequest extends BaseAuthRequest { public AuthResponse refresh(AuthToken authToken) { String refreshTokenUrl = this.urlBuilder.getRefreshUrl(authToken.getRefreshToken()); - return AuthResponse.builder().code(ResponseStatus.SUCCESS.getCode()).data(getToken(refreshTokenUrl)).build(); + return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(getToken(refreshTokenUrl)).build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java index 5fa435c..4f84417 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.OschinaUrlBuilder; +import me.zhyd.oauth.url.AuthOschinaUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -20,10 +20,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.0 * @since 1.8 */ -public class AuthOschinaRequest extends BaseAuthRequest { +public class AuthOschinaRequest extends AuthDefaultRequest { public AuthOschinaRequest(AuthConfig config) { - super(config, AuthSource.OSCHINA, new OschinaUrlBuilder()); + super(config, AuthSource.OSCHINA, new AuthOschinaUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java index 77d5414..f28031c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java @@ -11,7 +11,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.QqUrlBuilder; +import me.zhyd.oauth.url.AuthQqUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; import me.zhyd.oauth.utils.StringUtils; @@ -26,9 +26,9 @@ import java.util.Map; * @version 1.0 * @since 1.8 */ -public class AuthQqRequest extends BaseAuthRequest { +public class AuthQqRequest extends AuthDefaultRequest { public AuthQqRequest(AuthConfig config) { - super(config, AuthSource.QQ, new QqUrlBuilder()); + super(config, AuthSource.QQ, new AuthQqUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthRequest.java b/src/main/java/me/zhyd/oauth/request/AuthRequest.java index d75651e..d06913c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthRequest.java @@ -3,6 +3,7 @@ package me.zhyd.oauth.request; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthResponse; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.model.AuthToken; /** @@ -18,7 +19,7 @@ public interface AuthRequest { * @return 返回授权地址 */ default String authorize() { - throw new AuthException(ResponseStatus.NOT_IMPLEMENTED); + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } /** @@ -28,7 +29,7 @@ public interface AuthRequest { * @return 返回登录成功后的用户信息 */ default AuthResponse login(AuthCallback authCallback) { - throw new AuthException(ResponseStatus.NOT_IMPLEMENTED); + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } /** @@ -38,7 +39,7 @@ public interface AuthRequest { * @return AuthResponse */ default AuthResponse revoke(AuthToken authToken) { - throw new AuthException(ResponseStatus.NOT_IMPLEMENTED); + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } /** @@ -48,6 +49,6 @@ public interface AuthRequest { * @return AuthResponse */ default AuthResponse refresh(AuthToken authToken) { - throw new AuthException(ResponseStatus.NOT_IMPLEMENTED); + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index 156a878..2ca7543 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java @@ -6,11 +6,8 @@ import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthToken; -import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.TaobaoUrlBuilder; +import me.zhyd.oauth.model.*; +import me.zhyd.oauth.url.AuthTaobaoUrlBuilder; import me.zhyd.oauth.utils.GlobalAuthUtil; /** @@ -20,10 +17,10 @@ import me.zhyd.oauth.utils.GlobalAuthUtil; * @version 1.0 * @since 1.8 */ -public class AuthTaobaoRequest extends BaseAuthRequest { +public class AuthTaobaoRequest extends AuthDefaultRequest { public AuthTaobaoRequest(AuthConfig config) { - super(config, AuthSource.TAOBAO, new TaobaoUrlBuilder()); + super(config, AuthSource.TAOBAO, new AuthTaobaoUrlBuilder()); } @Override @@ -37,7 +34,7 @@ public class AuthTaobaoRequest extends BaseAuthRequest { HttpResponse response = HttpRequest.post(this.urlBuilder.getAccessTokenUrl(accessCode)).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { - throw new AuthException(ResponseStatus.FAILURE + ":" + accessTokenObject.getString("error_description")); + throw new AuthException(AuthResponseStatus.FAILURE + ":" + accessTokenObject.getString("error_description")); } authToken.setAccessToken(accessTokenObject.getString("access_token")); authToken.setRefreshToken(accessTokenObject.getString("refresh_token")); diff --git a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java index 976cc9c..91b2b2a 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.TencentCloudUrlBuilder; +import me.zhyd.oauth.url.AuthTencentCloudUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -20,10 +20,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.0 * @since 1.8 */ -public class AuthTencentCloudRequest extends BaseAuthRequest { +public class AuthTencentCloudRequest extends AuthDefaultRequest { public AuthTencentCloudRequest(AuthConfig config) { - super(config, AuthSource.TENCENT_CLOUD, new TencentCloudUrlBuilder()); + super(config, AuthSource.TENCENT_CLOUD, new AuthTencentCloudUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java index 7883083..45431f2 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java @@ -11,7 +11,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.ToutiaoUrlBuilder; +import me.zhyd.oauth.url.AuthToutiaoUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -21,10 +21,10 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.5 * @since 1.5 */ -public class AuthToutiaoRequest extends BaseAuthRequest { +public class AuthToutiaoRequest extends AuthDefaultRequest { public AuthToutiaoRequest(AuthConfig config) { - super(config, AuthSource.TOUTIAO, new ToutiaoUrlBuilder()); + super(config, AuthSource.TOUTIAO, new AuthToutiaoUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java index 2614748..7f7cb16 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java @@ -7,7 +7,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.WechatUrlBuilder; +import me.zhyd.oauth.url.AuthWechatUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** @@ -17,9 +17,9 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; * @version 1.0 * @since 1.8 */ -public class AuthWeChatRequest extends BaseAuthRequest { +public class AuthWeChatRequest extends AuthDefaultRequest { public AuthWeChatRequest(AuthConfig config) { - super(config, AuthSource.WECHAT, new WechatUrlBuilder()); + super(config, AuthSource.WECHAT, new AuthWechatUrlBuilder()); } /** @@ -64,7 +64,7 @@ public class AuthWeChatRequest extends BaseAuthRequest { public AuthResponse refresh(AuthToken oldToken) { String refreshTokenUrl = this.urlBuilder.getRefreshUrl(oldToken.getRefreshToken()); return AuthResponse.builder() - .code(ResponseStatus.SUCCESS.getCode()) + .code(AuthResponseStatus.SUCCESS.getCode()) .data(this.getToken(refreshTokenUrl)) .build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java index 99c8bb8..a428f77 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.WeiboUrlBuilder; +import me.zhyd.oauth.url.AuthWeiboUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.IpUtils; import me.zhyd.oauth.utils.StringUtils; @@ -23,10 +23,10 @@ import me.zhyd.oauth.utils.StringUtils; * @version 1.0 * @since 1.8 */ -public class AuthWeiboRequest extends BaseAuthRequest { +public class AuthWeiboRequest extends AuthDefaultRequest { public AuthWeiboRequest(AuthConfig config) { - super(config, AuthSource.WEIBO, new WeiboUrlBuilder()); + super(config, AuthSource.WEIBO, new AuthWeiboUrlBuilder()); } @Override diff --git a/src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java similarity index 68% rename from src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java index 631e7a1..b4d0fd2 100644 --- a/src/main/java/me/zhyd/oauth/url/AlipayUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,18 +14,18 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class AlipayUrlBuilder extends AbstractUrlBuilder { +public class AuthAlipayUrlBuilder extends AuthDefaultUrlBuilder { private static final String ALIPAY_AUTHORIZE_PATTERN = "{0}?app_id={1}&scope=auth_user&redirect_uri={2}&state={3}"; @Override public String getAccessTokenUrl(String code) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override @@ -33,11 +35,11 @@ public class AlipayUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java similarity index 88% rename from src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java index 156540c..7a8540f 100644 --- a/src/main/java/me/zhyd/oauth/url/BaiduUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class BaiduUrlBuilder extends AbstractUrlBuilder { +public class AuthBaiduUrlBuilder extends AuthDefaultUrlBuilder { private static final String BAIDU_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; private static final String BAIDU_USER_INFO_PATTERN = "{0}?access_token={1}"; @@ -36,7 +38,7 @@ public class BaiduUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override diff --git a/src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java similarity index 83% rename from src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java index bcaa653..e4651db 100644 --- a/src/main/java/me/zhyd/oauth/url/CodingUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class CodingUrlBuilder extends AbstractUrlBuilder { +public class AuthCodingUrlBuilder extends AuthDefaultUrlBuilder { private static final String CODING_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; private static final String CODING_USER_INFO_PATTERN = "{0}?access_token={1}"; @@ -35,11 +37,11 @@ public class CodingUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java similarity index 83% rename from src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java index 4eb48ef..8b5cf66 100644 --- a/src/main/java/me/zhyd/oauth/url/CsdnUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -13,7 +15,7 @@ import java.text.MessageFormat; * @since 1.8 */ @Deprecated -public class CsdnUrlBuilder extends AbstractUrlBuilder { +public class AuthCsdnUrlBuilder extends AuthDefaultUrlBuilder { private static final String CSDN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; private static final String CSDN_USER_INFO_PATTERN = "{0}?access_token={1}"; @@ -36,11 +38,11 @@ public class CsdnUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java similarity index 93% rename from src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java index ff36a6b..b23c087 100644 --- a/src/main/java/me/zhyd/oauth/url/AbstractUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java @@ -2,7 +2,7 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.request.ResponseStatus; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.StringUtils; @@ -11,7 +11,7 @@ import me.zhyd.oauth.utils.StringUtils; * @version 1.0 * @since 1.8 */ -public abstract class AbstractUrlBuilder { +public abstract class AuthDefaultUrlBuilder { protected AuthConfig config; @@ -64,7 +64,7 @@ public abstract class AbstractUrlBuilder { * @return openIdUrl */ public String getOpenIdUrl(String accessToken, boolean unionid) { - throw new AuthException(ResponseStatus.NOT_IMPLEMENTED); + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } /** diff --git a/src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java similarity index 77% rename from src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java index b741102..f04b9b8 100644 --- a/src/main/java/me/zhyd/oauth/url/DingtalkUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,14 +14,14 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class DingtalkUrlBuilder extends AbstractUrlBuilder { +public class AuthDingtalkUrlBuilder extends AuthDefaultUrlBuilder { private static final String DING_TALK_QRCONNECT_PATTERN = "{0}?appid={1}&response_type=code&scope=snsapi_login&redirect_uri={2}&state={3}"; private static final String DING_TALK_USER_INFO_PATTERN = "{0}?signature={1}×tamp={2}&accessKey={3}"; @Override public String getAccessTokenUrl(String code) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override @@ -34,11 +36,11 @@ public class DingtalkUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java similarity index 88% rename from src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java index 31607d6..49b17e8 100644 --- a/src/main/java/me/zhyd/oauth/url/DouyinUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class DouyinUrlBuilder extends AbstractUrlBuilder { +public class AuthDouyinUrlBuilder extends AuthDefaultUrlBuilder { private static final String DOUYIN_AUTHORIZE_PATTERN = "{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&scope=user_info"; private static final String DOUYIN_ACCESS_TOKEN_PATTERN = "{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorization_code"; @@ -41,6 +43,6 @@ public class DouyinUrlBuilder extends AbstractUrlBuilder { @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java similarity index 84% rename from src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java index 6a38a71..d9483c1 100644 --- a/src/main/java/me/zhyd/oauth/url/FacebookUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class FacebookUrlBuilder extends AbstractUrlBuilder { +public class AuthFacebookUrlBuilder extends AuthDefaultUrlBuilder { private static final String FACEBOOK_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope="; private static final String FACEBOOK_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; @@ -35,11 +37,11 @@ public class FacebookUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java similarity index 83% rename from src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java index 09b2a9d..d4b3239 100644 --- a/src/main/java/me/zhyd/oauth/url/GiteeUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.*; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class GiteeUrlBuilder extends AbstractUrlBuilder { +public class AuthGiteeUrlBuilder extends AuthDefaultUrlBuilder { private static final String GITEE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; private static final String GITEE_USER_INFO_PATTERN = "{0}?access_token={1}"; @@ -35,11 +37,11 @@ public class GiteeUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java similarity index 83% rename from src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java index d57eea4..f2defbd 100644 --- a/src/main/java/me/zhyd/oauth/url/GithubUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class GithubUrlBuilder extends AbstractUrlBuilder { +public class AuthGithubUrlBuilder extends AuthDefaultUrlBuilder { private static final String GITHUB_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}"; private static final String GITHUB_USER_INFO_PATTERN = "{0}?access_token={1}"; @@ -35,11 +37,11 @@ public class GithubUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java similarity index 83% rename from src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java index f8fbc2d..cc21750 100644 --- a/src/main/java/me/zhyd/oauth/url/GoogleUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class GoogleUrlBuilder extends AbstractUrlBuilder { +public class AuthGoogleUrlBuilder extends AuthDefaultUrlBuilder { private static final String GOOGLE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&scope=openid%20email%20profile&redirect_uri={2}&state={3}"; private static final String GOOGLE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; @@ -35,11 +37,11 @@ public class GoogleUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java similarity index 89% rename from src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java index 269c153..c8be794 100644 --- a/src/main/java/me/zhyd/oauth/url/LinkedinUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class LinkedinUrlBuilder extends AbstractUrlBuilder { +public class AuthLinkedinUrlBuilder extends AuthDefaultUrlBuilder { private static final String LINKEDIN_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope=r_liteprofile%20r_emailaddress%20w_member_social"; private static final String LINKEDIN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; @@ -41,6 +43,6 @@ public class LinkedinUrlBuilder extends AbstractUrlBuilder { @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java similarity index 89% rename from src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java index 5efcbdb..728cf72 100644 --- a/src/main/java/me/zhyd/oauth/url/MiUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class MiUrlBuilder extends AbstractUrlBuilder { +public class AuthMiUrlBuilder extends AuthDefaultUrlBuilder { private static final String MI_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&response_type=code&scope=1%203%204%206&state={3}&skip_confirm=false"; private static final String MI_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&code={4}&grant_type=authorization_code"; @@ -41,6 +43,6 @@ public class MiUrlBuilder extends AbstractUrlBuilder { @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java similarity index 89% rename from src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java index 01671b6..0b87cfa 100644 --- a/src/main/java/me/zhyd/oauth/url/MicrosoftUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class MicrosoftUrlBuilder extends AbstractUrlBuilder { +public class AuthMicrosoftUrlBuilder extends AuthDefaultUrlBuilder { private static final String MICROSOFT_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&response_mode=query&scope=offline_access%20user.read%20mail.read&state={3}"; private static final String MICROSOFT_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&code={4}&grant_type=authorization_code"; @@ -41,6 +43,6 @@ public class MicrosoftUrlBuilder extends AbstractUrlBuilder { @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java similarity index 83% rename from src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java index 6190307..6e55331 100644 --- a/src/main/java/me/zhyd/oauth/url/OschinaUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class OschinaUrlBuilder extends AbstractUrlBuilder { +public class AuthOschinaUrlBuilder extends AuthDefaultUrlBuilder { private static final String OSCHINA_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}&dataType=json"; private static final String OSCHINA_USER_INFO_PATTERN = "{0}?access_token={1}&dataType=json"; @@ -35,11 +37,11 @@ public class OschinaUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java similarity index 86% rename from src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java index fc435a0..70633e2 100644 --- a/src/main/java/me/zhyd/oauth/url/QqUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class QqUrlBuilder extends AbstractUrlBuilder { +public class AuthQqUrlBuilder extends AuthDefaultUrlBuilder { private static final String QQ_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; private static final String QQ_USER_INFO_PATTERN = "{0}?oauth_consumer_key={1}&access_token={2}&openid={3}"; @@ -36,12 +38,12 @@ public class QqUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override diff --git a/src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java similarity index 78% rename from src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java index 14d808d..f4a8cff 100644 --- a/src/main/java/me/zhyd/oauth/url/TaobaoUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class TaobaoUrlBuilder extends AbstractUrlBuilder { +public class AuthTaobaoUrlBuilder extends AuthDefaultUrlBuilder { private static final String TAOBAO_AUTHORIZE_PATTERN = "{0}?response_type=code&client_id={1}&redirect_uri={2}&state={3}&view=web"; private static final String TAOBAO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; @@ -24,7 +26,7 @@ public class TaobaoUrlBuilder extends AbstractUrlBuilder { @Override public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override @@ -34,11 +36,11 @@ public class TaobaoUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java similarity index 83% rename from src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java index dfc4796..96c0379 100644 --- a/src/main/java/me/zhyd/oauth/url/TencentCloudUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class TencentCloudUrlBuilder extends AbstractUrlBuilder { +public class AuthTencentCloudUrlBuilder extends AuthDefaultUrlBuilder { private static final String TENCENT_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; private static final String TENCENT_USER_INFO_PATTERN = "{0}?access_token={1}"; @@ -35,11 +37,11 @@ public class TencentCloudUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java similarity index 83% rename from src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java index 02336b8..595b7d8 100644 --- a/src/main/java/me/zhyd/oauth/url/ToutiaoUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class ToutiaoUrlBuilder extends AbstractUrlBuilder { +public class AuthToutiaoUrlBuilder extends AuthDefaultUrlBuilder { private static final String TOUTIAO_ACCESS_TOKEN_PATTERN = "{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorize_code"; private static final String TOUTIAO_USER_INFO_PATTERN = "{0}?client_key={1}&access_token={2}"; @@ -35,11 +37,11 @@ public class ToutiaoUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java similarity index 88% rename from src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java index 2e676f1..0b513a5 100644 --- a/src/main/java/me/zhyd/oauth/url/WechatUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class WechatUrlBuilder extends AbstractUrlBuilder { +public class AuthWechatUrlBuilder extends AuthDefaultUrlBuilder { private static final String WECHAT_AUTHORIZE_PATTERN = "{0}?appid={1}&redirect_uri={2}&response_type=code&scope=snsapi_login&state={3}#wechat_redirect"; private static final String WECHAT_ACCESS_TOKEN_PATTERN = "{0}?appid={1}&secret={2}&code={3}&grant_type=authorization_code"; @@ -41,6 +43,6 @@ public class WechatUrlBuilder extends AbstractUrlBuilder { @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java similarity index 83% rename from src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java rename to src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java index 258b21d..5da4aa1 100644 --- a/src/main/java/me/zhyd/oauth/url/WeiboUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.url; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.text.MessageFormat; @@ -12,7 +14,7 @@ import java.text.MessageFormat; * @version 1.0 * @since 1.8 */ -public class WeiboUrlBuilder extends AbstractUrlBuilder { +public class AuthWeiboUrlBuilder extends AuthDefaultUrlBuilder { private static final String WEIBO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; private static final String WEIBO_USER_INFO_PATTERN = "{0}?{1}"; @@ -35,11 +37,11 @@ public class WeiboUrlBuilder extends AbstractUrlBuilder { @Override public String getRefreshUrl(String refreshToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } @Override public String getRevokeUrl(String accessToken) { - return null; + throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); } } diff --git a/src/main/java/me/zhyd/oauth/utils/AuthChecker.java b/src/main/java/me/zhyd/oauth/utils/AuthChecker.java index 994424b..b4e3655 100644 --- a/src/main/java/me/zhyd/oauth/utils/AuthChecker.java +++ b/src/main/java/me/zhyd/oauth/utils/AuthChecker.java @@ -3,7 +3,7 @@ package me.zhyd.oauth.utils; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.request.ResponseStatus; +import me.zhyd.oauth.model.AuthResponseStatus; /** * 授权配置类的校验器 @@ -38,15 +38,15 @@ public class AuthChecker { public static void checkConfig(AuthConfig config, AuthSource source) { String redirectUri = config.getRedirectUri(); if (!GlobalAuthUtil.isHttpProtocol(redirectUri) && !GlobalAuthUtil.isHttpsProtocol(redirectUri)) { - throw new AuthException(ResponseStatus.ILLEGAL_REDIRECT_URI); + throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI); } // facebook的回调地址必须为https的链接 if (AuthSource.FACEBOOK == source && !GlobalAuthUtil.isHttpsProtocol(redirectUri)) { - throw new AuthException(ResponseStatus.ILLEGAL_REDIRECT_URI); + throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI); } // 支付宝在创建回调地址时,不允许使用localhost或者127.0.0.1 if (AuthSource.ALIPAY == source && GlobalAuthUtil.isLocalHost(redirectUri)) { - throw new AuthException(ResponseStatus.ILLEGAL_REDIRECT_URI); + throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI); } } @@ -57,7 +57,7 @@ public class AuthChecker { */ public static void checkCode(String code) { if (StringUtils.isEmpty(code)) { - throw new AuthException(ResponseStatus.ILLEGAL_CODE); + throw new AuthException(AuthResponseStatus.ILLEGAL_CODE); } } @@ -74,11 +74,11 @@ public class AuthChecker { } // 如果授权之前使用了state,但是回调时未返回state,则表示当前请求为非法的请求,可能正在被CSRF攻击 if (StringUtils.isEmpty(newState)) { - throw new AuthException(ResponseStatus.ILLEGAL_REQUEST); + throw new AuthException(AuthResponseStatus.ILLEGAL_REQUEST); } // 如果授权前后的state不一致,则表示当前请求为非法的请求,新的state可能为伪造 if (!newState.equals(originalState)) { - throw new AuthException(ResponseStatus.ILLEGAL_REQUEST); + throw new AuthException(AuthResponseStatus.ILLEGAL_REQUEST); } } } diff --git a/src/main/java/me/zhyd/oauth/utils/AuthState.java b/src/main/java/me/zhyd/oauth/utils/AuthState.java index 289cca1..d38c5c4 100644 --- a/src/main/java/me/zhyd/oauth/utils/AuthState.java +++ b/src/main/java/me/zhyd/oauth/utils/AuthState.java @@ -5,7 +5,7 @@ import cn.hutool.core.util.RandomUtil; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.request.ResponseStatus; +import me.zhyd.oauth.model.AuthResponseStatus; import java.nio.charset.Charset; import java.util.concurrent.ConcurrentHashMap; @@ -113,7 +113,7 @@ public class AuthState { String noneSourceState = decodedState.substring(source.length() + 1); if (!noneSourceState.startsWith(currentIp)) { // ip不相同,可能为非法的请求 - throw new AuthException(ResponseStatus.ILLEGAL_REQUEST); + throw new AuthException(AuthResponseStatus.ILLEGAL_REQUEST); } String body = noneSourceState.substring(currentIp.length() + 1); log.debug("body is [{}]", body); diff --git a/update.md b/update.md index 070b618..fe36738 100644 --- a/update.md +++ b/update.md @@ -1,6 +1,8 @@ ### 2019/07/16 1. 重构UrlBuilder类 2. 将CSDN相关的类置为`Deprecated`,后续可能会删除,也可能一直保留。毕竟CSDN的openAPI已经不对外开放了。 +3. `BaseAuthRequest` 改名为 `AuthDefaultRequest` +3. `ResponseStatus` 改名为 `AuthResponseStatus` 并且移动到 `me.zhyd.oauth.model` ### 2019/07/15 1. 新增 `AuthState` 类,内置默认的state生成规则和校验规则 From dc74501b1b1513d0a584158e776da516de1c39c3 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 19:40:20 +0800 Subject: [PATCH 11/44] =?UTF-8?q?:bookmark:=20=E5=8D=87=E7=BA=A7=E5=88=B01?= =?UTF-8?q?.9.0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 65a7890..5e33204 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.zhyd.oauth JustAuth - 1.8.1 + 1.9.0 JustAuth https://gitee.com/yadong.zhang/JustAuth From 4c1fdfc62d5131baf4b9ead975ce2a060e9c0ad2 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 19:49:18 +0800 Subject: [PATCH 12/44] =?UTF-8?q?:twisted=5Frightwards=5Farrows:=20?= =?UTF-8?q?=E6=89=8B=E5=8A=A8=E5=90=88=E5=B9=B6PR=20#18=20=E5=88=B0dev?= =?UTF-8?q?=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/request/AuthMiRequest.java | 4 ++++ src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java | 5 +++++ src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java index 3903a95..27ad736 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; @@ -20,6 +21,7 @@ import java.text.MessageFormat; * @version 1.5 * @since 1.5 */ +@Slf4j public class AuthMiRequest extends AuthDefaultRequest { private static final String PREFIX = "&&&START&&&"; @@ -90,6 +92,8 @@ public class AuthMiRequest extends AuthDefaultRequest { if (!"error".equalsIgnoreCase(userEmailPhone.getString("result"))) { JSONObject emailPhone = userEmailPhone.getJSONObject("data"); authUser.setEmail(emailPhone.getString("email")); + } else { + log.warn("小米开发平台暂时不对外开放用户手机及邮箱信息的获取"); } return authUser; diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java index 7f7cb16..82a1662 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java @@ -48,6 +48,11 @@ public class AuthWeChatRequest extends AuthDefaultRequest { this.checkResponse(object); String location = String.format("%s-%s-%s", object.getString("country"), object.getString("province"), object.getString("city")); + + if (object.containsKey("unionid")){ + authToken.setUnionId(object.getString("unionid")); + } + return AuthUser.builder() .username(object.getString("nickname")) .nickname(object.getString("nickname")) diff --git a/src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java index 728cf72..deae372 100644 --- a/src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java @@ -16,7 +16,7 @@ import java.text.MessageFormat; */ public class AuthMiUrlBuilder extends AuthDefaultUrlBuilder { - private static final String MI_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&response_type=code&scope=1%203%204%206&state={3}&skip_confirm=false"; + private static final String MI_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&response_type=code&scope=user/profile%20user/openIdV2%20user/phoneAndEmail&state={3}&skip_confirm=false"; private static final String MI_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&code={4}&grant_type=authorization_code"; private static final String MI_USER_INFO_PATTERN = "{0}?clientId={1}&token={2}"; private static final String MI_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; From 12c69301827bf2ec3861df554d04d6392bbd59a3 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Tue, 16 Jul 2019 22:12:04 +0800 Subject: [PATCH 13/44] =?UTF-8?q?:art:=20=E8=B0=83=E6=95=B4throw=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E7=9A=84=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthQqRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java index d463f8e..54c79b9 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java @@ -32,7 +32,7 @@ public class AuthCodingRequest extends AuthDefaultRequest { HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.getIntValue("code") != 0) { - throw new AuthException("Unable to get token from coding using code [" + authCallback.getCode() + "]"); + throw new AuthException("Unable to get token from coding using code [" + authCallback.getCode() + "]: " + accessTokenObject); } return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) diff --git a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java index 3841312..fa0ca0a 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java @@ -33,7 +33,7 @@ public class AuthCsdnRequest extends AuthDefaultRequest { HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error_code")) { - throw new AuthException("Unable to get token from csdn using code [" + authCallback.getCode() + "]"); + throw new AuthException("Unable to get token from csdn using code [" + authCallback.getCode() + "]: " + accessTokenObject); } return AuthToken.builder().accessToken(accessTokenObject.getString("access_token")).build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index 54682e9..41368ca 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -32,7 +32,7 @@ public class AuthGiteeRequest extends AuthDefaultRequest { HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { - throw new AuthException("Unable to get token from gitee using code [" + authCallback.getCode() + "]"); + throw new AuthException("Unable to get token from gitee using code [" + authCallback.getCode() + "]: " + accessTokenObject); } return AuthToken.builder().accessToken(accessTokenObject.getString("access_token")).build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java index 4f84417..975ae5a 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java @@ -32,7 +32,7 @@ public class AuthOschinaRequest extends AuthDefaultRequest { HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { - throw new AuthException("Unable to get token from oschina using code [" + authCallback.getCode() + "]"); + throw new AuthException("Unable to get token from oschina using code [" + authCallback.getCode() + "]: " + accessTokenObject); } return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) diff --git a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java index f28031c..db4bc33 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java @@ -37,7 +37,7 @@ public class AuthQqRequest extends AuthDefaultRequest { HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); Map accessTokenObject = GlobalAuthUtil.parseStringToMap(response.body()); if (!accessTokenObject.containsKey("access_token")) { - throw new AuthException("Unable to get token from qq using code [" + authCallback.getCode() + "]"); + throw new AuthException("Unable to get token from qq using code [" + authCallback.getCode() + "]: " + accessTokenObject); } return AuthToken.builder() .accessToken(accessTokenObject.get("access_token")) diff --git a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index 2ca7543..0fedca4 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java @@ -34,7 +34,7 @@ public class AuthTaobaoRequest extends AuthDefaultRequest { HttpResponse response = HttpRequest.post(this.urlBuilder.getAccessTokenUrl(accessCode)).execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { - throw new AuthException(AuthResponseStatus.FAILURE + ":" + accessTokenObject.getString("error_description")); + throw new AuthException(accessTokenObject.getString("error_description")); } authToken.setAccessToken(accessTokenObject.getString("access_token")); authToken.setRefreshToken(accessTokenObject.getString("refresh_token")); From 59b5ba5a1b2f3b87d4fc1ba94fdc8c0836bd3c5d Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Wed, 17 Jul 2019 06:45:21 +0800 Subject: [PATCH 14/44] =?UTF-8?q?:beers:=20=E9=86=89=E9=85=92=E5=86=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/exception/AuthException.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/zhyd/oauth/exception/AuthException.java b/src/main/java/me/zhyd/oauth/exception/AuthException.java index 5391568..9393eba 100644 --- a/src/main/java/me/zhyd/oauth/exception/AuthException.java +++ b/src/main/java/me/zhyd/oauth/exception/AuthException.java @@ -17,7 +17,7 @@ public class AuthException extends RuntimeException { } public AuthException(int errorCode, String errorMsg) { - super(errorCode + ":" + errorMsg); + super(errorMsg); this.errorCode = errorCode; this.errorMsg = errorMsg; } From e0242f992904e06532f0df34fe83020a2b06283c Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Wed, 17 Jul 2019 15:25:48 +0800 Subject: [PATCH 15/44] =?UTF-8?q?:sparkles:=20=E9=9B=86=E6=88=90teambition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhyd/oauth/config/AuthSource.java | 2 +- .../oauth/request/AuthTeambitionRequest.java | 106 ++++++++++++++++++ .../oauth/url/AuthTeambitionUrlBuilder.java | 43 +++++++ 3 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java create mode 100644 src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index 33abc00..edde04d 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -442,7 +442,7 @@ public enum AuthSource { @Override public String userInfo() { - return "https://account.teambition.com/users/me"; + return "https://api.teambition.com/users/me"; } }; diff --git a/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java new file mode 100644 index 0000000..d48adf6 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java @@ -0,0 +1,106 @@ +package me.zhyd.oauth.request; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONObject; +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.*; +import me.zhyd.oauth.url.AuthTeambitionUrlBuilder; + +/** + * 微信登录 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @since 1.8 + */ +public class AuthTeambitionRequest extends AuthDefaultRequest { + public AuthTeambitionRequest(AuthConfig config) { + super(config, AuthSource.TEAMBITION, new AuthTeambitionUrlBuilder()); + } + + /** + * @param authCallback 回调返回的参数 + * @return 所有信息 + */ + @Override + protected AuthToken getAccessToken(AuthCallback authCallback) { + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); + HttpResponse response = HttpRequest.post(accessTokenUrl) + .form("client_id", config.getClientId()) + .form("client_secret", config.getClientSecret()) + .form("code", authCallback.getCode()) + .form("grant_type", "code") + .execute(); + JSONObject accessTokenObject = JSONObject.parseObject(response.body()); + + this.checkResponse(accessTokenObject); + + return AuthToken.builder() + .accessToken(accessTokenObject.getString("access_token")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .build(); + } + + @Override + protected AuthUser getUserInfo(AuthToken authToken) { + String accessToken = authToken.getAccessToken(); + + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(null)) + .header("Authorization", "OAuth2 " + accessToken) + .execute(); + JSONObject object = JSONObject.parseObject(response.body()); + + this.checkResponse(object); + + authToken.setUid(object.getString("_id")); + + return AuthUser.builder() + .uuid(object.getString("_id")) + .username(object.getString("name")) + .nickname(object.getString("name")) + .avatar(object.getString("avatarUrl")) + .blog(object.getString("website")) + .location(object.getString("location")) + .email(object.getString("email")) + .gender(AuthUserGender.UNKNOW) + .token(authToken) + .source(AuthSource.TEAMBITION) + .build(); + } + + @Override + public AuthResponse refresh(AuthToken oldToken) { + String uid = oldToken.getUid(); + String refreshToken = oldToken.getRefreshToken(); + String refreshTokenUrl = this.urlBuilder.getRefreshUrl(refreshToken); + HttpResponse response = HttpRequest.post(refreshTokenUrl) + .form("_userId", uid) + .form("refresh_token", refreshToken) + .execute(); + JSONObject refreshTokenObject = JSONObject.parseObject(response.body()); + + this.checkResponse(refreshTokenObject); + + return AuthResponse.builder() + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(AuthToken.builder() + .accessToken(refreshTokenObject.getString("access_token")) + .refreshToken(refreshTokenObject.getString("refresh_token")) + .build()) + .build(); + } + + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if ((object.containsKey("message") && object.containsKey("name"))) { + throw new AuthException(object.getString("name") + ", " + object.getString("message")); + } + } +} diff --git a/src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java new file mode 100644 index 0000000..7ab6ca5 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java @@ -0,0 +1,43 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; + +import java.text.MessageFormat; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @website https://www.zhyd.me + * @date 2019/7/16 22:22 + * @since 1.8 + */ +public class AuthTeambitionUrlBuilder extends AuthDefaultUrlBuilder { + + private static final String TEAMBITION_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code"; + + @Override + public String getAccessTokenUrl(String code) { + return AuthSource.TEAMBITION.accessToken(); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return AuthSource.TEAMBITION.userInfo(); + } + + @Override + public String getAuthorizeUrl() { + return MessageFormat.format(TEAMBITION_AUTHORIZE_PATTERN, AuthSource.TEAMBITION.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(String refreshToken) { + return AuthSource.TEAMBITION.refresh(); + } + + @Override + public String getRevokeUrl(String accessToken) { + return null; + } +} From 267200c434b2290d1f1e39c5dc74e91df0ac1886 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Wed, 17 Jul 2019 15:29:18 +0800 Subject: [PATCH 16/44] =?UTF-8?q?:sparkles:=20=E9=9B=86=E6=88=90teambition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java index d48adf6..83fc1cd 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java @@ -10,13 +10,14 @@ import me.zhyd.oauth.model.*; import me.zhyd.oauth.url.AuthTeambitionUrlBuilder; /** - * 微信登录 + * Teambition授权登录 * * @author yadong.zhang (yadong.zhang0415(a)gmail.com) * @version 1.0 * @since 1.8 */ public class AuthTeambitionRequest extends AuthDefaultRequest { + public AuthTeambitionRequest(AuthConfig config) { super(config, AuthSource.TEAMBITION, new AuthTeambitionUrlBuilder()); } From abcdc105e03b836d92bdf56438b05393ff7998dc Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Wed, 17 Jul 2019 16:51:30 +0800 Subject: [PATCH 17/44] =?UTF-8?q?:memo:=20=E7=BC=96=E5=86=99=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ update.md | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 79fc132..203cf9a 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ + @@ -120,6 +121,7 @@ authRequest.login(callback); | | [AuthMicrosoftRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java) | 参考文档 | | | [AuthMiRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java) | 参考文档 | | | [AuthToutiaoRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java) | 参考文档 | +| | [AuthTeambitionRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java) | 参考文档 | | | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 无 | _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ diff --git a/update.md b/update.md index fe36738..f285964 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,7 @@ +### 2019/07/17 +1. 优化代码 +2. 集成Teambition登录 + ### 2019/07/16 1. 重构UrlBuilder类 2. 将CSDN相关的类置为`Deprecated`,后续可能会删除,也可能一直保留。毕竟CSDN的openAPI已经不对外开放了。 From d977e05a3d74230bcd36e1caf9994fa279bb79a3 Mon Sep 17 00:00:00 2001 From: Hongwei Peng Date: Wed, 17 Jul 2019 21:17:23 +0800 Subject: [PATCH 18/44] fix bug and enhance --- src/main/java/me/zhyd/oauth/model/AuthUserGender.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/model/AuthUserGender.java b/src/main/java/me/zhyd/oauth/model/AuthUserGender.java index 910a66a..c3d6824 100644 --- a/src/main/java/me/zhyd/oauth/model/AuthUserGender.java +++ b/src/main/java/me/zhyd/oauth/model/AuthUserGender.java @@ -23,12 +23,12 @@ public enum AuthUserGender { if (code == null) { return UNKNOW; } - String[] males = {"m", "男", "1", "male", "F"}; - if (Arrays.asList(males).contains(code)) { + String[] males = {"m", "男", "1", "male"}; + if (Arrays.asList(males).contains(code.toLowerCase())) { return MALE; } String[] females = {"f", "女", "0", "female"}; - if (Arrays.asList(females).contains(code)) { + if (Arrays.asList(females).contains(code.toLowerCase())) { return FEMALE; } return UNKNOW; From 8d1f700e7f4e3f56596800df646ae5cc552e9c1c Mon Sep 17 00:00:00 2001 From: Hongwei Peng Date: Wed, 17 Jul 2019 21:33:24 +0800 Subject: [PATCH 19/44] integrate Renren --- .../java/me/zhyd/oauth/config/AuthSource.java | 27 +++++- .../zhyd/oauth/request/AuthRenrenRequest.java | 92 +++++++++++++++++++ .../zhyd/oauth/url/AuthRenrenUrlBuilder.java | 49 ++++++++++ 3 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java create mode 100644 src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index edde04d..f408265 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -444,6 +444,31 @@ public enum AuthSource { public String userInfo() { return "https://api.teambition.com/users/me"; } + }, + + /** + * 人人网 + */ + RENREN { + @Override + public String authorize() { + return "https://graph.renren.com/oauth/authorize"; + } + + @Override + public String accessToken() { + return "https://graph.renren.com/oauth/token"; + } + + @Override + public String refresh() { + return "https://graph.renren.com/oauth/token"; + } + + @Override + public String userInfo() { + return "https://api.renren.com/v2/user/get"; + } }; /** @@ -485,4 +510,4 @@ public enum AuthSource { throw new AuthException(AuthResponseStatus.UNSUPPORTED); } -} \ No newline at end of file +} diff --git a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java new file mode 100644 index 0000000..8199a84 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java @@ -0,0 +1,92 @@ +package me.zhyd.oauth.request; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthToken; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.AuthRenrenUrlBuilder; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; + +import java.util.Objects; + +import static me.zhyd.oauth.config.AuthSource.RENREN; + +/** + * 人人登录 + * + * @author hongwei.peng (pengisgood(at)gmail(dot)com) + * @version 1.8.1 + * @since 1.8.1 + */ +public class AuthRenrenRequest extends AuthDefaultRequest { + + public AuthRenrenRequest(AuthConfig config) { + super(config, RENREN, new AuthRenrenUrlBuilder()); + } + + @Override + protected AuthToken getAccessToken(AuthCallback authCallback) { + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); + HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + JSONObject accessTokenObject = JSONObject.parseObject(response.body()); + if (!response.isOk()) { + throw new AuthException("Unable to get token from renren using code [" + authCallback.getCode() + "]: " + accessTokenObject); + } + + return AuthToken.builder() + .accessToken(accessTokenObject.getString("access_token")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .openId(accessTokenObject.getJSONObject("user").getString("id")) + .build(); + } + + @Override + protected AuthUser getUserInfo(AuthToken authToken) { + String accessToken = authToken.getAccessToken(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .openId(authToken.getOpenId()) + .accessToken(accessToken) + .build())).execute(); + JSONObject userObj = JSONObject.parseObject(response.body()).getJSONObject("response"); + + return AuthUser.builder() + .uuid(userObj.getString("id")) + .avatar(getAvatarUrl(userObj)) + .nickname(userObj.getString("name")) + .company(getCompany(userObj)) + .gender(getGender(userObj)) + .token(authToken) + .source(RENREN) + .build(); + } + + private String getAvatarUrl(JSONObject userObj) { + JSONArray jsonArray = userObj.getJSONArray("avatar"); + if (Objects.isNull(jsonArray) || jsonArray.isEmpty()) { + return null; + } + return jsonArray.getJSONObject(0).getString("url"); + } + + private AuthUserGender getGender(JSONObject userObj) { + JSONObject basicInformation = userObj.getJSONObject("basicInformation"); + if (Objects.isNull(basicInformation)) { + return AuthUserGender.UNKNOW; + } + return AuthUserGender.getRealGender(basicInformation.getString("sex")); + } + + private String getCompany(JSONObject userObj) { + JSONArray jsonArray = userObj.getJSONArray("work"); + if (Objects.isNull(jsonArray) || jsonArray.isEmpty()) { + return null; + } + return jsonArray.getJSONObject(0).getString("name"); + } +} diff --git a/src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java new file mode 100644 index 0000000..6417f11 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java @@ -0,0 +1,49 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; + +import java.text.MessageFormat; + +import static me.zhyd.oauth.config.AuthSource.RENREN; + +/** + * 人人网相关的URL构建类 + * + * @author hongwei.peng (pengisgood(at)gmail(dot)com) + * @version 1.8.1 + * @since 1.8.1 + */ +public class AuthRenrenUrlBuilder extends AuthDefaultUrlBuilder { + + private static final String RENREN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; + private static final String RENREN_USER_INFO_PATTERN = "{0}?access_token={1}&userId={2}"; + private static final String RENREN_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; + private static final String RENREN_REFRESH_PATTERN = "{0}?refresh_token={1}&client_id={2}&client_secret={3}&grant_type=refresh_token"; + + @Override + public String getAccessTokenUrl(String code) { + return MessageFormat.format(RENREN_ACCESS_TOKEN_PATTERN, RENREN.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(RENREN_USER_INFO_PATTERN, RENREN.userInfo(), userInfoEntity.getAccessToken(), userInfoEntity.getOpenId()); + } + + @Override + public String getAuthorizeUrl() { + return MessageFormat.format(RENREN_AUTHORIZE_PATTERN, RENREN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(String refreshToken) { + return MessageFormat.format(RENREN_REFRESH_PATTERN, RENREN.refresh(), refreshToken, config.getClientId(), config.getClientSecret()); + } + + @Override + public String getRevokeUrl(String accessToken) { + throw new AuthException(AuthResponseStatus.UNSUPPORTED); + } +} From 0ed3092d5396ea6e680db73945f86e940bd6ff6d Mon Sep 17 00:00:00 2001 From: Hongwei Peng Date: Wed, 17 Jul 2019 21:34:41 +0800 Subject: [PATCH 20/44] fix spelling --- src/main/java/me/zhyd/oauth/model/AuthUserGender.java | 6 +++--- src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java | 2 +- .../java/me/zhyd/oauth/request/AuthDingTalkRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java | 2 +- .../java/me/zhyd/oauth/request/AuthLinkedinRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthMiRequest.java | 2 +- .../java/me/zhyd/oauth/request/AuthMicrosoftRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java | 2 +- src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java | 2 +- .../java/me/zhyd/oauth/request/AuthTeambitionRequest.java | 2 +- 13 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/model/AuthUserGender.java b/src/main/java/me/zhyd/oauth/model/AuthUserGender.java index c3d6824..04abe03 100644 --- a/src/main/java/me/zhyd/oauth/model/AuthUserGender.java +++ b/src/main/java/me/zhyd/oauth/model/AuthUserGender.java @@ -10,7 +10,7 @@ import java.util.Arrays; * @since 1.8 */ public enum AuthUserGender { - MALE(1, "男"), FEMALE(0, "女"), UNKNOW(-1, "未知"); + MALE(1, "男"), FEMALE(0, "女"), UNKNOWN(-1, "未知"); private int code; private String desc; @@ -21,7 +21,7 @@ public enum AuthUserGender { public static AuthUserGender getRealGender(String code) { if (code == null) { - return UNKNOW; + return UNKNOWN; } String[] males = {"m", "男", "1", "male"}; if (Arrays.asList(males).contains(code.toLowerCase())) { @@ -31,7 +31,7 @@ public enum AuthUserGender { if (Arrays.asList(females).contains(code.toLowerCase())) { return FEMALE; } - return UNKNOW; + return UNKNOWN; } public int getCode() { diff --git a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java index fa0ca0a..012eccc 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java @@ -53,7 +53,7 @@ public class AuthCsdnRequest extends AuthDefaultRequest { .username(object.getString("username")) .remark(object.getString("description")) .blog(object.getString("website")) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .token(authToken) .source(AuthSource.CSDN) .build(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java index d61912c..88f61de 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java @@ -63,7 +63,7 @@ public class AuthDingTalkRequest extends AuthDefaultRequest { .uuid(object.getString("unionid")) .nickname(object.getString("nick")) .username(object.getString("nick")) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .source(AuthSource.DINGTALK) .token(token) .build(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java index 338c1f5..feabc75 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java @@ -49,7 +49,7 @@ public class AuthDouyinRequest extends AuthDefaultRequest { .nickname(userInfoObject.getString("nickname")) .avatar(userInfoObject.getString("avatar")) .remark(userInfoObject.getString("description")) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .token(authToken) .source(AuthSource.DOUYIN) .build(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index 41368ca..88db0cd 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -55,7 +55,7 @@ public class AuthGiteeRequest extends AuthDefaultRequest { .location(object.getString("address")) .email(object.getString("email")) .remark(object.getString("bio")) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .token(authToken) .source(AuthSource.GITEE) .build(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java index 76b1d23..5bccd1e 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java @@ -58,7 +58,7 @@ public class AuthGithubRequest extends AuthDefaultRequest { .location(object.getString("location")) .email(object.getString("email")) .remark(object.getString("bio")) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .token(authToken) .source(AuthSource.GITHUB) .build(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java index 6935060..62ed5f0 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java @@ -61,7 +61,7 @@ public class AuthGoogleRequest extends AuthDefaultRequest { .nickname(object.getString("name")) .location(object.getString("locale")) .email(object.getString("email")) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .token(authToken) .source(AuthSource.GOOGLE) .build(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index e6d4130..110647f 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -81,7 +81,7 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { .avatar(avatar) .email(email) .token(authToken) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .source(AuthSource.LINKEDIN) .build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java index 27ad736..296b17c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java @@ -78,7 +78,7 @@ public class AuthMiRequest extends AuthDefaultRequest { .nickname(user.getString("miliaoNick")) .avatar(user.getString("miliaoIcon")) .email(user.getString("mail")) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .token(authToken) .source(AuthSource.MI) .build(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java index 7b2dec1..da30f93 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java @@ -83,7 +83,7 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { .nickname(object.getString("displayName")) .location(object.getString("officeLocation")) .email(object.getString("mail")) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .token(authToken) .source(AuthSource.MICROSOFT) .build(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java index 8199a84..dc74e89 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java @@ -77,7 +77,7 @@ public class AuthRenrenRequest extends AuthDefaultRequest { private AuthUserGender getGender(JSONObject userObj) { JSONObject basicInformation = userObj.getJSONObject("basicInformation"); if (Objects.isNull(basicInformation)) { - return AuthUserGender.UNKNOW; + return AuthUserGender.UNKNOWN; } return AuthUserGender.getRealGender(basicInformation.getString("sex")); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index 0fedca4..cf20590 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java @@ -47,7 +47,7 @@ public class AuthTaobaoRequest extends AuthDefaultRequest { .uuid(accessTokenObject.getString("taobao_user_id")) .username(nick) .nickname(nick) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .token(authToken) .source(AuthSource.TAOBAO) .build(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java index 83fc1cd..673db40 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java @@ -66,7 +66,7 @@ public class AuthTeambitionRequest extends AuthDefaultRequest { .blog(object.getString("website")) .location(object.getString("location")) .email(object.getString("email")) - .gender(AuthUserGender.UNKNOW) + .gender(AuthUserGender.UNKNOWN) .token(authToken) .source(AuthSource.TEAMBITION) .build(); From a5da3b9765b22816a9f27ad385af2572f4e3dcbf Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 09:27:59 +0800 Subject: [PATCH 21/44] =?UTF-8?q?:twisted=5Frightwards=5Farrows:=20?= =?UTF-8?q?=E5=90=88=E5=B9=B6github=20pr#19?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ update.md | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 203cf9a..7469f0c 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ + @@ -122,6 +123,7 @@ authRequest.login(callback); | | [AuthMiRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java) | 参考文档 | | | [AuthToutiaoRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java) | 参考文档 | | | [AuthTeambitionRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java) | 参考文档 | +| | [AuthRenrenRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java) | 参考文档 | | | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 无 | _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ diff --git a/update.md b/update.md index f285964..66ac4a3 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,7 @@ +### 2019/07/18 +1. 合并github上@pengisgood 的pr#19,集成人人 + + ### 2019/07/17 1. 优化代码 2. 集成Teambition登录 From b5d8dbaedef24ddd9fe48173e5ab8e40a77f1532 Mon Sep 17 00:00:00 2001 From: Hongwei Peng Date: Thu, 18 Jul 2019 12:50:57 +0800 Subject: [PATCH 22/44] update contributor --- developer.md | 1 + 1 file changed, 1 insertion(+) diff --git a/developer.md b/developer.md index 0d94b18..d02b93a 100644 --- a/developer.md +++ b/developer.md @@ -3,4 +3,5 @@ - · yadong.zhang : [Github] | [Gitee] | [个人网站] - · yangkai.shen : [Github] | [个人网站] - · skqing : [Gitee] | [个人网站] +- · pengisgood : [Github] | [个人网站] - 千年等一回,我只为等你... From 090d7d366284a7f308bfb7e4a15195644ea1b2b0 Mon Sep 17 00:00:00 2001 From: Hongwei Peng Date: Thu, 18 Jul 2019 14:58:27 +0800 Subject: [PATCH 23/44] integrate Pinterest --- .../java/me/zhyd/oauth/config/AuthSource.java | 20 +++++ .../oauth/request/AuthPinterestRequest.java | 76 +++++++++++++++++++ .../oauth/url/AuthPinterestUrlBuilder.java | 48 ++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java create mode 100644 src/main/java/me/zhyd/oauth/url/AuthPinterestUrlBuilder.java diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index f408265..029259f 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -469,6 +469,26 @@ public enum AuthSource { public String userInfo() { return "https://api.renren.com/v2/user/get"; } + }, + + /** + * Pinterest + */ + PINTEREST { + @Override + public String authorize() { + return "https://api.pinterest.com/oauth"; + } + + @Override + public String accessToken() { + return "https://api.pinterest.com/v1/oauth/token"; + } + + @Override + public String userInfo() { + return "https://api.pinterest.com/v1/me"; + } }; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java new file mode 100644 index 0000000..f6bdcb7 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java @@ -0,0 +1,76 @@ +package me.zhyd.oauth.request; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONObject; +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthToken; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.AuthPinterestUrlBuilder; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; + +import java.util.Objects; + +import static me.zhyd.oauth.config.AuthSource.PINTEREST; + +/** + * Pinterest登录 + * + * @author hongwei.peng (pengisgood(at)gmail(dot)com) + * @version 1.9.0 + * @since 1.9.0 + */ +public class AuthPinterestRequest extends AuthDefaultRequest { + + public AuthPinterestRequest(AuthConfig config) { + super(config, PINTEREST, new AuthPinterestUrlBuilder()); + } + + @Override + protected AuthToken getAccessToken(AuthCallback authCallback) { + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); + HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + JSONObject accessTokenObject = JSONObject.parseObject(response.body()); + if (!response.isOk()) { + throw new AuthException("Unable to get token from Pinterest using code [" + authCallback.getCode() + "]: " + accessTokenObject); + } + + return AuthToken.builder() + .accessToken(accessTokenObject.getString("access_token")) + .tokenType(accessTokenObject.getString("token_type")) + .build(); + } + + @Override + protected AuthUser getUserInfo(AuthToken authToken) { + String accessToken = authToken.getAccessToken(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); + JSONObject userObj = JSONObject.parseObject(response.body()).getJSONObject("data"); + + return AuthUser.builder() + .uuid(userObj.getString("id")) + .avatar(getAvatarUrl(userObj)) + .username(userObj.getString("username")) + .nickname(userObj.getString("first_name") + " " + userObj.getString("last_name")) + .gender(AuthUserGender.UNKNOWN) + .remark(userObj.getString("bio")) + .token(authToken) + .source(PINTEREST) + .build(); + } + + private String getAvatarUrl(JSONObject userObj) { + // image is a map data structure + JSONObject jsonObject = userObj.getJSONObject("image"); + if (Objects.isNull(jsonObject)) { + return null; + } + return jsonObject.getJSONObject("60x60").getString("url"); + } + +} diff --git a/src/main/java/me/zhyd/oauth/url/AuthPinterestUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthPinterestUrlBuilder.java new file mode 100644 index 0000000..c321479 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/AuthPinterestUrlBuilder.java @@ -0,0 +1,48 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; + +import java.text.MessageFormat; + +import static me.zhyd.oauth.config.AuthSource.PINTEREST; + +/** + * Pinterest相关的URL构建类 + * + * @author hongwei.peng (pengisgood(at)gmail(dot)com) + * @version 1.9.0 + * @since 1.9.0 + */ +public class AuthPinterestUrlBuilder extends AuthDefaultUrlBuilder { + + private static final String PINTEREST_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; + private static final String PINTEREST_USER_INFO_PATTERN = "{0}?access_token={1}&fields=id,username,first_name,last_name,bio,image"; + private static final String PINTEREST_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}&scope=read_public"; + + @Override + public String getAccessTokenUrl(String code) { + return MessageFormat.format(PINTEREST_ACCESS_TOKEN_PATTERN, PINTEREST.accessToken(), config.getClientId(), config.getClientSecret(), code); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(PINTEREST_USER_INFO_PATTERN, PINTEREST.userInfo(), userInfoEntity.getAccessToken()); + } + + @Override + public String getAuthorizeUrl() { + return MessageFormat.format(PINTEREST_AUTHORIZE_PATTERN, PINTEREST.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(String refreshToken) { + throw new AuthException(AuthResponseStatus.UNSUPPORTED); + } + + @Override + public String getRevokeUrl(String accessToken) { + throw new AuthException(AuthResponseStatus.UNSUPPORTED); + } +} From 917239a89a33c92ee39d8e0d5008bf30303cbc4e Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 15:22:52 +0800 Subject: [PATCH 24/44] =?UTF-8?q?:memo:=20=E7=BC=96=E5=86=99=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + pom.xml | 7 ++++++- update.md | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7469f0c..6f3c904 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ authRequest.login(callback); | | [AuthToutiaoRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java) | 参考文档 | | | [AuthTeambitionRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java) | 参考文档 | | | [AuthRenrenRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java) | 参考文档 | +| | [AuthPinterestRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java) | 参考文档 | | | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 无 | _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ diff --git a/pom.xml b/pom.xml index 5e33204..c0d9d7d 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ - yadong.zhang + Yadong.Zhang yadong.zhang0415@gmail.com https://www.zhyd.me @@ -39,6 +39,11 @@ shenyangkai1994@gmail.com https://xkcoding.com + + Hongwei.Peng + pengisgood@gmail.com + https://github.com/pengisgood + diff --git a/update.md b/update.md index 66ac4a3..12664fb 100644 --- a/update.md +++ b/update.md @@ -1,6 +1,6 @@ ### 2019/07/18 -1. 合并github上@pengisgood 的pr#19,集成人人 - +1. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#19](https://github.com/zhangyd-c/JustAuth/pull/19),集成人人 +2. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#20](https://github.com/zhangyd-c/JustAuth/pull/20),集成Pinterest ### 2019/07/17 1. 优化代码 From 49f169abb9ab9bad6b047959ef2e6b5eeb757727 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 15:26:07 +0800 Subject: [PATCH 25/44] =?UTF-8?q?:memo:=20=E7=BC=96=E5=86=99=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6f3c904..f982237 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ + From e8cadef4ce6843e747f5a22866877d7ea5c0cfac Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 15:29:16 +0800 Subject: [PATCH 26/44] =?UTF-8?q?:memo:=20=E7=BC=96=E5=86=99=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index f982237..cd1c132 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,10 @@ + + + + From 44d4323fb2226510732c0d095b2ed2149eccd39c Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 15:51:42 +0800 Subject: [PATCH 27/44] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20example.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/example.md b/example.md index 022ca61..fb5f25c 100644 --- a/example.md +++ b/example.md @@ -84,4 +84,12 @@ _注:非全部平台,部分平台可能不存在图例_ 暂无 +#### 授权Pinterest + +![授权Pinterest](https://images.gitee.com/uploads/images/2019/0718/155012_6290f500_784199.jpeg "在这里输入图片标题") + +#### 授权Renren + +![授权Renre](https://images.gitee.com/uploads/images/2019/0718/155035_8e26c10a_784199.jpeg "在这里输入图片标题") + _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ \ No newline at end of file From 5694d4828864465e8f3ff08b419b33079185d0b0 Mon Sep 17 00:00:00 2001 From: "Yangkai.Shen" <237497819@qq.com> Date: Thu, 18 Jul 2019 16:53:54 +0800 Subject: [PATCH 28/44] =?UTF-8?q?:art:=20=E5=A2=9E=E5=8A=A0=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=B7=A5=E5=85=B7=E7=B1=BB=E5=8F=8A=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E3=80=81=E9=87=8D=E8=BD=BDAuthState=E9=83=A8=E5=88=86=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhyd/oauth/utils/AuthState.java | 20 ++++++ .../me/zhyd/oauth/utils/GlobalAuthUtil.java | 19 ++++- .../java/me/zhyd/oauth/utils/UrlBuilder.java | 70 +++++++++++++++++++ .../me/zhyd/oauth/utils/UrlBuilderTest.java | 39 +++++++++++ 4 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 src/main/java/me/zhyd/oauth/utils/UrlBuilder.java create mode 100644 src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java diff --git a/src/main/java/me/zhyd/oauth/utils/AuthState.java b/src/main/java/me/zhyd/oauth/utils/AuthState.java index d38c5c4..948ac96 100644 --- a/src/main/java/me/zhyd/oauth/utils/AuthState.java +++ b/src/main/java/me/zhyd/oauth/utils/AuthState.java @@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64; import cn.hutool.core.util.RandomUtil; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; +import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthResponseStatus; @@ -30,6 +31,16 @@ public class AuthState { */ private static ConcurrentHashMap stateBucket = new ConcurrentHashMap<>(); + /** + * 生成随机的state + * + * @param source oauth平台 + * @return state + */ + public static String create(AuthSource source) { + return create(source.name()); + } + /** * 生成随机的state * @@ -158,6 +169,15 @@ public class AuthState { stateBucket.remove(key); } + /** + * 登录成功后,清除state + * + * @param source oauth平台 + */ + public static void delete(AuthSource source) { + delete(source.name()); + } + private static String getCurrentIp() { String currentIp = IpUtils.getIp(); return StringUtils.isEmpty(currentIp) ? EMPTY_STR : currentIp; diff --git a/src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java b/src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java index 22bb699..a5712f8 100644 --- a/src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java +++ b/src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java @@ -1,6 +1,8 @@ package me.zhyd.oauth.utils; import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import me.zhyd.oauth.exception.AuthException; import javax.crypto.Mac; @@ -12,9 +14,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * 全局的工具类 @@ -82,6 +82,19 @@ public class GlobalAuthUtil { return res; } + public static String parseMapToString(Map params, boolean encode) { + List paramList = new ArrayList<>(); + params.forEach((k, v) -> { + if (ObjectUtil.isNull(v)) { + paramList.add(k + "="); + } else { + String valueString = v.toString(); + paramList.add(k + "=" + (encode ? urlEncode(valueString) : valueString)); + } + }); + return CollUtil.join(paramList, "&"); + } + public static boolean isHttpProtocol(String url) { if (StringUtils.isEmpty(url)) { return false; diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java new file mode 100644 index 0000000..4757da2 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -0,0 +1,70 @@ +package me.zhyd.oauth.utils; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import lombok.Data; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + *

+ * 构造URL + *

+ * + * @author yangkai.shen + * @date Created in 2019-07-18 15:47 + */ +@Data +public class UrlBuilder { + private String baseUrl; + + private final Map params = new LinkedHashMap<>(4); + + /** + * @param baseUrl 基础路径 + * @return the new {@code UrlBuilder} + */ + public static UrlBuilder fromBaseUrl(String baseUrl) { + UrlBuilder builder = new UrlBuilder(); + builder.setBaseUrl(baseUrl); + return builder; + } + + /** + * 添加参数 + * + * @param key 参数名称 + * @param value 参数值 + * @return this UrlBuilder + */ + public UrlBuilder queryParam(String key, Object value) { + Assert.notBlank(key, "参数名不能为空"); + + String valueAsString = (value != null ? value.toString() : null); + this.params.put(key, valueAsString); + + return this; + } + + /** + * 构造url + * + * @return url + */ + public String build() { + return this.build(false); + } + + /** + * 构造url + * + * @param encode 转码 + * @return url + */ + public String build(boolean encode) { + String baseUrl = StrUtil.addSuffixIfNot(this.baseUrl, "?"); + String paramString = GlobalAuthUtil.parseMapToString(this.params, encode); + return baseUrl + paramString; + } +} diff --git a/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java b/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java new file mode 100644 index 0000000..778a204 --- /dev/null +++ b/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java @@ -0,0 +1,39 @@ +package me.zhyd.oauth.utils; + +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.request.AuthWeChatRequest; +import org.junit.Assert; +import org.junit.Test; + +/** + *

+ * UrlBuilder测试类 + *

+ * + * @author yangkai.shen + * @date Created in 2019-07-18 16:36 + */ +public class UrlBuilderTest { + @Test + public void testUrlBuilder() { + AuthConfig config = new AuthConfig(); + config.setClientId("appid-110110110"); + config.setClientSecret("secret-110110110"); + config.setRedirectUri("https://xkcoding.com"); + config.setState(AuthState.create(AuthSource.WECHAT)); + // @formatter:off + String build = UrlBuilder.fromBaseUrl(AuthSource.WECHAT.authorize()) + .queryParam("appid", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("response_type", "code") + .queryParam("scope", "snsapi_login") + .queryParam("state", config.getState().concat("#wechat_redirect")) + .build(false); + // @formatter:on + AuthWeChatRequest request = new AuthWeChatRequest(config); + String authorize = request.authorize(); + Assert.assertEquals(build, authorize); + AuthState.delete(AuthSource.WECHAT); + } +} From 698c922b6b370183fc6808ec3ff3e64bb824a91c Mon Sep 17 00:00:00 2001 From: Hongwei Peng Date: Thu, 18 Jul 2019 18:05:22 +0800 Subject: [PATCH 29/44] integrate stack overflow --- example.md | 10 ++- .../java/me/zhyd/oauth/config/AuthConfig.java | 7 ++ .../java/me/zhyd/oauth/config/AuthSource.java | 20 +++++ .../request/AuthStackOverflowRequest.java | 78 +++++++++++++++++++ .../url/AuthStackOverflowUrlBuilder.java | 48 ++++++++++++ 5 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java create mode 100644 src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java diff --git a/example.md b/example.md index fb5f25c..8579a12 100644 --- a/example.md +++ b/example.md @@ -84,6 +84,8 @@ _注:非全部平台,部分平台可能不存在图例_ 暂无 +_请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ + #### 授权Pinterest ![授权Pinterest](https://images.gitee.com/uploads/images/2019/0718/155012_6290f500_784199.jpeg "在这里输入图片标题") @@ -92,4 +94,10 @@ _注:非全部平台,部分平台可能不存在图例_ ![授权Renre](https://images.gitee.com/uploads/images/2019/0718/155035_8e26c10a_784199.jpeg "在这里输入图片标题") -_请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ \ No newline at end of file +#### 授权Stack Overflow + +暂无 + +#### 授权Twitter + +暂无 diff --git a/src/main/java/me/zhyd/oauth/config/AuthConfig.java b/src/main/java/me/zhyd/oauth/config/AuthConfig.java index 8b1f7da..57b9656 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthConfig.java +++ b/src/main/java/me/zhyd/oauth/config/AuthConfig.java @@ -51,4 +51,11 @@ public class AuthConfig { * 1.8.0版本新增参数 */ private String state; + + /** + * Stack Overflow Key + *

+ * 1.9.0版本新增参数 + */ + private String stackOverflowKey; } diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index 029259f..159ce0e 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -489,6 +489,26 @@ public enum AuthSource { public String userInfo() { return "https://api.pinterest.com/v1/me"; } + }, + + /** + * Stack Overflow + */ + STACK_OVERFLOW { + @Override + public String authorize() { + return "https://stackoverflow.com/oauth"; + } + + @Override + public String accessToken() { + return "https://stackoverflow.com/oauth/access_token/json"; + } + + @Override + public String userInfo() { + return "https://api.stackexchange.com/2.2/me"; + } }; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java new file mode 100644 index 0000000..5f002e7 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java @@ -0,0 +1,78 @@ +package me.zhyd.oauth.request; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthToken; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.url.AuthStackOverflowUrlBuilder; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; + +import java.util.HashMap; +import java.util.Map; + +import static me.zhyd.oauth.config.AuthSource.STACK_OVERFLOW; + +/** + * Stack Overflow登录 + * + * @author hongwei.peng (pengisgood(at)gmail(dot)com) + * @version 1.9.0 + * @since 1.9.0 + */ +public class AuthStackOverflowRequest extends AuthDefaultRequest { + + public AuthStackOverflowRequest(AuthConfig config) { + super(config, STACK_OVERFLOW, new AuthStackOverflowUrlBuilder()); + } + + @Override + protected AuthToken getAccessToken(AuthCallback authCallback) { + String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); + HttpResponse response = HttpRequest.post(accessTokenUrl) + .contentType("application/x-www-form-urlencoded") + .form(buildBody(accessTokenUrl)) + .execute(); + JSONObject accessTokenObject = JSONObject.parseObject(response.body()); + if (!response.isOk()) { + throw new AuthException("Unable to get token from Stack Overflow using code [" + authCallback.getCode() + "]: " + accessTokenObject); + } + + return AuthToken.builder() + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires")) + .build(); + } + + @Override + protected AuthUser getUserInfo(AuthToken authToken) { + String accessToken = authToken.getAccessToken(); + HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() + .accessToken(accessToken) + .build())).execute(); + JSONObject userObj = JSONObject.parseObject(response.body()).getJSONArray("items").getJSONObject(0); + + return AuthUser.builder() + .uuid(userObj.getString("user_id")) + .avatar(userObj.getString("profile_image")) + .location(userObj.getString("location")) + .nickname(userObj.getString("display_name")) + .blog(userObj.getString("website_url")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(STACK_OVERFLOW) + .build(); + } + + private Map buildBody(String accessTokenUrl) { + Map paramMap = new HashMap<>(); + HttpUtil.decodeParamMap(accessTokenUrl, "UTF-8").forEach(paramMap::put); + return paramMap; + } + +} diff --git a/src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java new file mode 100644 index 0000000..1498e98 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java @@ -0,0 +1,48 @@ +package me.zhyd.oauth.url; + +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthResponseStatus; +import me.zhyd.oauth.url.entity.AuthUserInfoEntity; + +import java.text.MessageFormat; + +import static me.zhyd.oauth.config.AuthSource.STACK_OVERFLOW; + +/** + * Stack Overflow相关的URL构建类 + * + * @author hongwei.peng (pengisgood(at)gmail(dot)com) + * @version 1.9.0 + * @since 1.9.0 + */ +public class AuthStackOverflowUrlBuilder extends AuthDefaultUrlBuilder { + + private static final String SO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&code={4}"; + private static final String SO_USER_INFO_PATTERN = "{0}?access_token={1}&site=stackoverflow&key={2}"; + private static final String SO_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; + + @Override + public String getAccessTokenUrl(String code) { + return MessageFormat.format(SO_ACCESS_TOKEN_PATTERN, STACK_OVERFLOW.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), code); + } + + @Override + public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { + return MessageFormat.format(SO_USER_INFO_PATTERN, STACK_OVERFLOW.userInfo(), userInfoEntity.getAccessToken(), config.getStackOverflowKey()); + } + + @Override + public String getAuthorizeUrl() { + return MessageFormat.format(SO_AUTHORIZE_PATTERN, STACK_OVERFLOW.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); + } + + @Override + public String getRefreshUrl(String refreshToken) { + throw new AuthException(AuthResponseStatus.UNSUPPORTED); + } + + @Override + public String getRevokeUrl(String accessToken) { + throw new AuthException(AuthResponseStatus.UNSUPPORTED); + } +} From d0375ce31a8b2cacab1e81900e16406770f0344e Mon Sep 17 00:00:00 2001 From: Hongwei Peng Date: Thu, 18 Jul 2019 18:13:34 +0800 Subject: [PATCH 30/44] update document --- README.md | 3 ++- example.md | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index cd1c132..825d7cb 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@

+
@@ -178,4 +179,4 @@ _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经 | 支付宝 | 微信 | | :------------: | :------------: | -| | | \ No newline at end of file +| | | diff --git a/example.md b/example.md index 8579a12..cc87789 100644 --- a/example.md +++ b/example.md @@ -80,12 +80,6 @@ _注:非全部平台,部分平台可能不存在图例_ 暂无 -#### 授权csdn - -暂无 - -_请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ - #### 授权Pinterest ![授权Pinterest](https://images.gitee.com/uploads/images/2019/0718/155012_6290f500_784199.jpeg "在这里输入图片标题") @@ -101,3 +95,9 @@ _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经 #### 授权Twitter 暂无 + +#### 授权csdn + +暂无 + +_请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ From 66ee684e1fa83f67b6c8ae521b4a99eff0681a03 Mon Sep 17 00:00:00 2001 From: Hongwei Peng Date: Thu, 18 Jul 2019 18:23:45 +0800 Subject: [PATCH 31/44] refactor: extract common method --- .../me/zhyd/oauth/request/AuthLinkedinRequest.java | 2 +- .../zhyd/oauth/request/AuthMicrosoftRequest.java | 8 ++++---- .../oauth/request/AuthStackOverflowRequest.java | 14 ++------------ .../java/me/zhyd/oauth/utils/GlobalAuthUtil.java | 7 +++++++ 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index 110647f..ac48430 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -140,7 +140,7 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { private AuthToken getToken(String accessTokenUrl) { HttpResponse response = HttpRequest.post(accessTokenUrl) .header("Host", "www.linkedin.com") - .header("Content-Type", "application/x-www-form-urlencoded") + .contentType("application/x-www-form-urlencoded") .execute(); String accessTokenStr = response.body(); JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr); diff --git a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java index da30f93..71b2129 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java @@ -14,6 +14,8 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.util.HashMap; import java.util.Map; +import static me.zhyd.oauth.utils.GlobalAuthUtil.parseQueryToMap; + /** * 微软登录 * @@ -40,12 +42,10 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { * @return token对象 */ private AuthToken getToken(String accessTokenUrl) { - Map paramMap = new HashMap<>(6); - HttpUtil.decodeParamMap(accessTokenUrl, "UTF-8").forEach(paramMap::put); HttpResponse response = HttpRequest.post(accessTokenUrl) .header("Host", "https://login.microsoftonline.com") - .header("Content-Type", "application/x-www-form-urlencoded") - .form(paramMap) + .contentType("application/x-www-form-urlencoded") + .form(parseQueryToMap(accessTokenUrl)) .execute(); String accessTokenStr = response.body(); JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr); diff --git a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java index 5f002e7..be5c186 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java @@ -2,7 +2,6 @@ package me.zhyd.oauth.request; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; -import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.exception.AuthException; @@ -13,10 +12,8 @@ import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.url.AuthStackOverflowUrlBuilder; import me.zhyd.oauth.url.entity.AuthUserInfoEntity; -import java.util.HashMap; -import java.util.Map; - import static me.zhyd.oauth.config.AuthSource.STACK_OVERFLOW; +import static me.zhyd.oauth.utils.GlobalAuthUtil.parseQueryToMap; /** * Stack Overflow登录 @@ -36,7 +33,7 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest { String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl) .contentType("application/x-www-form-urlencoded") - .form(buildBody(accessTokenUrl)) + .form(parseQueryToMap(accessTokenUrl)) .execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (!response.isOk()) { @@ -68,11 +65,4 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest { .source(STACK_OVERFLOW) .build(); } - - private Map buildBody(String accessTokenUrl) { - Map paramMap = new HashMap<>(); - HttpUtil.decodeParamMap(accessTokenUrl, "UTF-8").forEach(paramMap::put); - return paramMap; - } - } diff --git a/src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java b/src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java index 22bb699..f313704 100644 --- a/src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java +++ b/src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java @@ -1,6 +1,7 @@ package me.zhyd.oauth.utils; import cn.hutool.core.codec.Base64; +import cn.hutool.http.HttpUtil; import me.zhyd.oauth.exception.AuthException; import javax.crypto.Mac; @@ -82,6 +83,12 @@ public class GlobalAuthUtil { return res; } + public static Map parseQueryToMap(String url) { + Map paramMap = new HashMap<>(); + HttpUtil.decodeParamMap(url, "UTF-8").forEach(paramMap::put); + return paramMap; + } + public static boolean isHttpProtocol(String url) { if (StringUtils.isEmpty(url)) { return false; From 6dc42ac8b366eae49acd1ba0a653e6a186982766 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 19:25:23 +0800 Subject: [PATCH 32/44] =?UTF-8?q?:memo:=20=E7=BC=96=E5=86=99=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- update.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 825d7cb..b39e7bb 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ - + @@ -131,6 +131,7 @@ authRequest.login(callback); | | [AuthTeambitionRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java) | 参考文档 | | | [AuthRenrenRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java) | 参考文档 | | | [AuthPinterestRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java) | 参考文档 | +| | [AuthStackOverflowRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java) | 参考文档 | | | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 无 | _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ diff --git a/update.md b/update.md index 12664fb..60e02b7 100644 --- a/update.md +++ b/update.md @@ -1,6 +1,7 @@ ### 2019/07/18 1. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#19](https://github.com/zhangyd-c/JustAuth/pull/19),集成人人 2. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#20](https://github.com/zhangyd-c/JustAuth/pull/20),集成Pinterest +2. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#21](https://github.com/zhangyd-c/JustAuth/pull/21),集成StackOverflow ### 2019/07/17 1. 优化代码 From a6f25ec31236ab36b689b7f58346e6b12f8afa7e Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 19:27:08 +0800 Subject: [PATCH 33/44] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20example.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/example.md b/example.md index cc87789..02e2022 100644 --- a/example.md +++ b/example.md @@ -82,15 +82,15 @@ _注:非全部平台,部分平台可能不存在图例_ #### 授权Pinterest -![授权Pinterest](https://images.gitee.com/uploads/images/2019/0718/155012_6290f500_784199.jpeg "在这里输入图片标题") +![授权Pinterest](https://images.gitee.com/uploads/images/2019/0718/155012_6290f500_784199.jpeg "授权Pinterest") #### 授权Renren -![授权Renre](https://images.gitee.com/uploads/images/2019/0718/155035_8e26c10a_784199.jpeg "在这里输入图片标题") +![授权Renre](https://images.gitee.com/uploads/images/2019/0718/155035_8e26c10a_784199.jpeg "授权Renren") #### 授权Stack Overflow -暂无 +![授权Stack Overflow](https://images.gitee.com/uploads/images/2019/0718/192639_cc301ba7_784199.png "授权Stack Overflow") #### 授权Twitter From 72792c3c83b93d3dc0d383a53297dfa5dfb12806 Mon Sep 17 00:00:00 2001 From: "Yangkai.Shen" <237497819@qq.com> Date: Thu, 18 Jul 2019 20:37:12 +0800 Subject: [PATCH 34/44] =?UTF-8?q?:rotating=5Flight:=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8=E8=A7=84=E8=8C=83=EF=BC=8C=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E4=BB=A3=E7=A0=81=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3d1c15e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# JustAuth 开发组IDE 编辑器标准 +root = true + +# 空格替代Tab缩进在各种编辑工具下效果一致 +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true + +[*.java] +indent_size = 4 + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false + From 0d4e52d615b069a405994550d60bb290a8b5edc1 Mon Sep 17 00:00:00 2001 From: "Yangkai.Shen" <237497819@qq.com> Date: Thu, 18 Jul 2019 20:37:41 +0800 Subject: [PATCH 35/44] =?UTF-8?q?:recycle:=20=E7=A7=BB=E9=99=A4=20UrlBuild?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhyd/oauth/request/AuthAlipayRequest.java | 52 +++++--- .../zhyd/oauth/request/AuthBaiduRequest.java | 62 +++++---- .../zhyd/oauth/request/AuthCodingRequest.java | 63 +++++---- .../zhyd/oauth/request/AuthCsdnRequest.java | 29 ++--- .../oauth/request/AuthDefaultRequest.java | 109 ++++++++++++++-- .../oauth/request/AuthDingTalkRequest.java | 70 ++++++---- .../zhyd/oauth/request/AuthDouyinRequest.java | 114 ++++++++++++----- .../oauth/request/AuthFacebookRequest.java | 56 ++++---- .../zhyd/oauth/request/AuthGiteeRequest.java | 39 +++--- .../zhyd/oauth/request/AuthGithubRequest.java | 39 +++--- .../zhyd/oauth/request/AuthGoogleRequest.java | 75 +++++++---- .../oauth/request/AuthLinkedinRequest.java | 106 ++++++++++------ .../me/zhyd/oauth/request/AuthMiRequest.java | 88 ++++++++----- .../oauth/request/AuthMicrosoftRequest.java | 120 +++++++++++++----- .../oauth/request/AuthOschinaRequest.java | 78 ++++++++---- .../me/zhyd/oauth/request/AuthQqRequest.java | 63 +++++---- .../zhyd/oauth/request/AuthRenrenRequest.java | 29 +++-- .../zhyd/oauth/request/AuthTaobaoRequest.java | 43 +++++-- .../oauth/request/AuthTeambitionRequest.java | 71 +++++------ .../request/AuthTencentCloudRequest.java | 67 ++++++---- .../oauth/request/AuthToutiaoRequest.java | 90 +++++++++---- .../zhyd/oauth/request/AuthWeChatRequest.java | 113 ++++++++++++----- .../zhyd/oauth/request/AuthWeiboRequest.java | 69 +++++----- .../zhyd/oauth/url/AuthAlipayUrlBuilder.java | 45 ------- .../zhyd/oauth/url/AuthBaiduUrlBuilder.java | 48 ------- .../zhyd/oauth/url/AuthCodingUrlBuilder.java | 47 ------- .../me/zhyd/oauth/url/AuthCsdnUrlBuilder.java | 48 ------- .../zhyd/oauth/url/AuthDefaultUrlBuilder.java | 83 ------------ .../oauth/url/AuthDingtalkUrlBuilder.java | 46 ------- .../zhyd/oauth/url/AuthDouyinUrlBuilder.java | 48 ------- .../oauth/url/AuthFacebookUrlBuilder.java | 47 ------- .../zhyd/oauth/url/AuthGiteeUrlBuilder.java | 47 ------- .../zhyd/oauth/url/AuthGithubUrlBuilder.java | 47 ------- .../zhyd/oauth/url/AuthGoogleUrlBuilder.java | 47 ------- .../oauth/url/AuthLinkedinUrlBuilder.java | 48 ------- .../me/zhyd/oauth/url/AuthMiUrlBuilder.java | 48 ------- .../oauth/url/AuthMicrosoftUrlBuilder.java | 48 ------- .../zhyd/oauth/url/AuthOschinaUrlBuilder.java | 47 ------- .../me/zhyd/oauth/url/AuthQqUrlBuilder.java | 53 -------- .../zhyd/oauth/url/AuthRenrenUrlBuilder.java | 49 ------- .../zhyd/oauth/url/AuthTaobaoUrlBuilder.java | 46 ------- .../oauth/url/AuthTeambitionUrlBuilder.java | 43 ------- .../oauth/url/AuthTencentCloudUrlBuilder.java | 47 ------- .../zhyd/oauth/url/AuthToutiaoUrlBuilder.java | 47 ------- .../zhyd/oauth/url/AuthWechatUrlBuilder.java | 48 ------- .../zhyd/oauth/url/AuthWeiboUrlBuilder.java | 47 ------- .../oauth/url/entity/AuthUserInfoEntity.java | 38 ------ .../java/me/zhyd/oauth/utils/UrlBuilder.java | 6 +- .../me/zhyd/oauth/utils/UrlBuilderTest.java | 16 +-- 49 files changed, 1086 insertions(+), 1743 deletions(-) delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index 16536a8..0f3750f 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -14,8 +14,8 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthAlipayUrlBuilder; import me.zhyd.oauth.utils.StringUtils; +import me.zhyd.oauth.utils.UrlBuilder; /** * 支付宝登录 @@ -29,9 +29,9 @@ public class AuthAlipayRequest extends AuthDefaultRequest { private AlipayClient alipayClient; public AuthAlipayRequest(AuthConfig config) { - super(config, AuthSource.ALIPAY, new AuthAlipayUrlBuilder()); + super(config, AuthSource.ALIPAY); this.alipayClient = new DefaultAlipayClient(AuthSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config - .getAlipayPublicKey(), "RSA2"); + .getAlipayPublicKey(), "RSA2"); } @Override @@ -49,11 +49,11 @@ public class AuthAlipayRequest extends AuthDefaultRequest { throw new AuthException(response.getSubMsg()); } return AuthToken.builder() - .accessToken(response.getAccessToken()) - .uid(response.getUserId()) - .expireIn(Integer.parseInt(response.getExpiresIn())) - .refreshToken(response.getRefreshToken()) - .build(); + .accessToken(response.getAccessToken()) + .uid(response.getUserId()) + .expireIn(Integer.parseInt(response.getExpiresIn())) + .refreshToken(response.getRefreshToken()) + .build(); } @Override @@ -70,19 +70,33 @@ public class AuthAlipayRequest extends AuthDefaultRequest { throw new AuthException(response.getSubMsg()); } - String province = response.getProvince(), - city = response.getCity(); + String province = response.getProvince(), city = response.getCity(); String location = String.format("%s %s", StringUtils.isEmpty(province) ? "" : province, StringUtils.isEmpty(city) ? "" : city); return AuthUser.builder() - .uuid(response.getUserId()) - .username(StringUtils.isEmpty(response.getUserName()) ? response.getNickName() : response.getUserName()) - .nickname(response.getNickName()) - .avatar(response.getAvatar()) - .location(location) - .gender(AuthUserGender.getRealGender(response.getGender())) - .token(authToken) - .source(AuthSource.ALIPAY) - .build(); + .uuid(response.getUserId()) + .username(StringUtils.isEmpty(response.getUserName()) ? response.getNickName() : response.getUserName()) + .nickname(response.getNickName()) + .avatar(response.getAvatar()) + .location(location) + .gender(AuthUserGender.getRealGender(response.getGender())) + .token(authToken) + .source(AuthSource.ALIPAY) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("app_id", config.getClientId()) + .queryParam("scope", "auth_user") + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java index bb2082f..402134a 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java @@ -8,8 +8,7 @@ import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.enums.AuthBaiduErrorCode; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.AuthBaiduUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; /** * 百度账号登录 @@ -21,32 +20,28 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthBaiduRequest extends AuthDefaultRequest { public AuthBaiduRequest(AuthConfig config) { - super(config, AuthSource.BAIDU, new AuthBaiduUrlBuilder()); + super(config, AuthSource.BAIDU); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); AuthBaiduErrorCode errorCode = AuthBaiduErrorCode.getErrorCode(accessTokenObject.getString("error")); if (AuthBaiduErrorCode.OK != errorCode) { throw new AuthException(errorCode.getDesc()); } return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .scope(accessTokenObject.getString("scope")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .scope(accessTokenObject.getString("scope")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); AuthBaiduErrorCode errorCode = AuthBaiduErrorCode.getErrorCode(object.getString("error")); @@ -54,29 +49,46 @@ public class AuthBaiduRequest extends AuthDefaultRequest { throw new AuthException(errorCode.getDesc()); } return AuthUser.builder() - .uuid(object.getString("userid")) - .username(object.getString("username")) - .nickname(object.getString("username")) - .gender(AuthUserGender.getRealGender(object.getString("sex"))) - .token(authToken) - .source(AuthSource.BAIDU) - .build(); + .uuid(object.getString("userid")) + .username(object.getString("username")) + .nickname(object.getString("username")) + .gender(AuthUserGender.getRealGender(object.getString("sex"))) + .token(authToken) + .source(AuthSource.BAIDU) + .build(); } @Override public AuthResponse revoke(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getRevokeUrl(accessToken)).execute(); + HttpResponse response = HttpRequest.get(UrlBuilder.fromBaseUrl(source.revoke()) + .queryParam("access_token", accessToken) + .build()).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); if (object.containsKey("error_code")) { return AuthResponse.builder() - .code(AuthResponseStatus.FAILURE.getCode()) - .msg(object.getString("error_msg")) - .build(); + .code(AuthResponseStatus.FAILURE.getCode()) + .msg(object.getString("error_msg")) + .build(); } AuthResponseStatus status = object.getIntValue("result") == 1 ? AuthResponseStatus.SUCCESS : AuthResponseStatus.FAILURE; return AuthResponse.builder().code(status.getCode()).msg(status.getMsg()).build(); } + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("display", "popup") + .queryParam("state", getRealState(config.getState())) + .build(); + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java index 54c79b9..bf98f46 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java @@ -10,8 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthCodingUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; /** * Cooding登录 @@ -23,30 +22,26 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthCodingRequest extends AuthDefaultRequest { public AuthCodingRequest(AuthConfig config) { - super(config, AuthSource.CODING, new AuthCodingUrlBuilder()); + super(config, AuthSource.CODING); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); + HttpResponse response = doGetAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.getIntValue("code") != 0) { throw new AuthException("Unable to get token from coding using code [" + authCallback.getCode() + "]: " + accessTokenObject); } return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); if (object.getIntValue("code") != 0) { throw new AuthException(object.getString("msg")); @@ -54,18 +49,34 @@ public class AuthCodingRequest extends AuthDefaultRequest { object = object.getJSONObject("data"); return AuthUser.builder() - .uuid(object.getString("id")) - .username(object.getString("name")) - .avatar("https://coding.net/" + object.getString("avatar")) - .blog("https://coding.net/" + object.getString("path")) - .nickname(object.getString("name")) - .company(object.getString("company")) - .location(object.getString("location")) - .gender(AuthUserGender.getRealGender(object.getString("sex"))) - .email(object.getString("email")) - .remark(object.getString("slogan")) - .token(authToken) - .source(AuthSource.CODING) - .build(); + .uuid(object.getString("id")) + .username(object.getString("name")) + .avatar("https://coding.net/" + object.getString("avatar")) + .blog("https://coding.net/" + object.getString("path")) + .nickname(object.getString("name")) + .company(object.getString("company")) + .location(object.getString("location")) + .gender(AuthUserGender.getRealGender(object.getString("sex"))) + .email(object.getString("email")) + .remark(object.getString("slogan")) + .token(authToken) + .source(AuthSource.CODING) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("scope", "user") + .queryParam("state", getRealState(config.getState())) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java index 012eccc..1320f46 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; @@ -10,8 +9,6 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthCsdnUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * CSDN登录 @@ -24,13 +21,12 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthCsdnRequest extends AuthDefaultRequest { public AuthCsdnRequest(AuthConfig config) { - super(config, AuthSource.CSDN, new AuthCsdnUrlBuilder()); + super(config, AuthSource.CSDN); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error_code")) { throw new AuthException("Unable to get token from csdn using code [" + authCallback.getCode() + "]: " + accessTokenObject); @@ -40,22 +36,19 @@ public class AuthCsdnRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); if (object.containsKey("error_code")) { throw new AuthException(object.getString("error")); } return AuthUser.builder() - .uuid(object.getString("username")) - .username(object.getString("username")) - .remark(object.getString("description")) - .blog(object.getString("website")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(AuthSource.CSDN) - .build(); + .uuid(object.getString("username")) + .username(object.getString("username")) + .remark(object.getString("description")) + .blog(object.getString("website")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(AuthSource.CSDN) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java index 065e4d1..911b210 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java @@ -1,17 +1,21 @@ package me.zhyd.oauth.request; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import lombok.Data; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.AuthDefaultUrlBuilder; import me.zhyd.oauth.utils.AuthChecker; +import me.zhyd.oauth.utils.StringUtils; +import me.zhyd.oauth.utils.UrlBuilder; /** * 默认的request处理类 * * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @author yangkai.shen (https://xkcoding.com) * @version 1.0 * @since 1.8 */ @@ -19,7 +23,6 @@ import me.zhyd.oauth.utils.AuthChecker; public abstract class AuthDefaultRequest implements AuthRequest { protected AuthConfig config; protected AuthSource source; - protected AuthDefaultUrlBuilder urlBuilder; public AuthDefaultRequest(AuthConfig config, AuthSource source) { this.config = config; @@ -31,12 +34,6 @@ public abstract class AuthDefaultRequest implements AuthRequest { AuthChecker.checkConfig(config, source); } - public AuthDefaultRequest(AuthConfig config, AuthSource source, AuthDefaultUrlBuilder urlBuilder) { - this(config, source); - this.urlBuilder = urlBuilder; - this.urlBuilder.setAuthConfig(config); - } - protected abstract AuthToken getAccessToken(AuthCallback authCallback); protected abstract AuthUser getUserInfo(AuthToken authToken); @@ -70,6 +67,100 @@ public abstract class AuthDefaultRequest implements AuthRequest { */ @Override public String authorize() { - return this.urlBuilder.getAuthorizeUrl(); + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .build(); + } + + /** + * 返回获取accessToken的url + * + * @return 返回获取accessToken的url + */ + protected String accessTokenUrl(String code) { + return UrlBuilder.fromBaseUrl(source.accessToken()) + .queryParam("code", code) + .queryParam("client_id", config.getClientId()) + .queryParam("client_secret", config.getClientSecret()) + .queryParam("grant_type", "authorization_code") + .queryParam("redirect_uri", config.getRedirectUri()) + .build(); + } + + /** + * 返回获取accessToken的url + * + * @return 返回获取accessToken的url + */ + protected String refreshTokenUrl(String refreshToken) { + return UrlBuilder.fromBaseUrl(source.refresh()) + .queryParam("client_id", config.getClientId()) + .queryParam("client_secret", config.getClientSecret()) + .queryParam("refresh_token", refreshToken) + .queryParam("grant_type", "refresh_token") + .queryParam("redirect_uri", config.getRedirectUri()) + .build(); + } + + /** + * 返回获取userInfo的url + * + * @return 返回获取userInfo的url + */ + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()).queryParam("access_token", authToken.getAccessToken()).build(); + } + + /** + * 获取state,如果为空, 则默认去当前日期的时间戳 + * + * @param state 原始的state + * @return 返回不为null的state + */ + protected String getRealState(String state) { + return StringUtils.isEmpty(state) ? String.valueOf(System.currentTimeMillis()) : state; + } + + /** + * 通用的 authorizationCode 协议 + * + * @param code code码 + * @return HttpResponse + */ + protected HttpResponse doPostAuthorizationCode(String code) { + return HttpRequest.post(accessTokenUrl(code)).execute(); + } + + /** + * 通用的 authorizationCode 协议 + * + * @param code code码 + * @return HttpResponse + */ + protected HttpResponse doGetAuthorizationCode(String code) { + return HttpRequest.get(accessTokenUrl(code)).execute(); + } + + /** + * 通用的 用户信息 + * + * @param authToken token封装 + * @return HttpResponse + */ + protected HttpResponse doPostUserInfo(AuthToken authToken) { + return HttpRequest.post(userInfoUrl(authToken)).execute(); + } + + /** + * 通用的 用户信息 + * + * @param authToken token封装 + * @return HttpResponse + */ + protected HttpResponse doGetUserInfo(AuthToken authToken) { + return HttpRequest.get(userInfoUrl(authToken)).execute(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java index 88f61de..a5b423c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java @@ -12,9 +12,8 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthDingtalkUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; +import me.zhyd.oauth.utils.UrlBuilder; /** * 钉钉登录 @@ -26,7 +25,7 @@ import me.zhyd.oauth.utils.GlobalAuthUtil; public class AuthDingTalkRequest extends AuthDefaultRequest { public AuthDingTalkRequest(AuthConfig config) { - super(config, AuthSource.DINGTALK, new AuthDingtalkUrlBuilder()); + super(config, AuthSource.DINGTALK); } @Override @@ -37,17 +36,9 @@ public class AuthDingTalkRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { String code = authToken.getAccessCode(); - // 根据timestamp, appSecret计算签名值 - String timestamp = System.currentTimeMillis() + ""; - String urlEncodeSignature = GlobalAuthUtil.generateDingTalkSignature(config.getClientSecret(), timestamp); JSONObject param = new JSONObject(); param.put("tmp_auth_code", code); - HttpResponse response = HttpRequest.post(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .signature(urlEncodeSignature) - .timestamp(timestamp) - .clientId(config.getClientId()) - .build() - )).body(param.toJSONString()).execute(); + HttpResponse response = HttpRequest.post(userInfoUrl(authToken)).body(param.toJSONString()).execute(); String userInfo = response.body(); JSONObject object = JSON.parseObject(userInfo); AuthDingTalkErrorCode errorCode = AuthDingTalkErrorCode.getErrorCode(object.getIntValue("errcode")); @@ -56,16 +47,51 @@ public class AuthDingTalkRequest extends AuthDefaultRequest { } object = object.getJSONObject("user_info"); AuthToken token = AuthToken.builder() - .openId(object.getString("openid")) - .unionId(object.getString("unionid")) - .build(); + .openId(object.getString("openid")) + .unionId(object.getString("unionid")) + .build(); return AuthUser.builder() - .uuid(object.getString("unionid")) - .nickname(object.getString("nick")) - .username(object.getString("nick")) - .gender(AuthUserGender.UNKNOWN) - .source(AuthSource.DINGTALK) - .token(token) - .build(); + .uuid(object.getString("unionid")) + .nickname(object.getString("nick")) + .username(object.getString("nick")) + .gender(AuthUserGender.UNKNOWN) + .source(AuthSource.DINGTALK) + .token(token) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("appid", config.getClientId()) + .queryParam("scope", "snsapi_login") + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + // 根据timestamp, appSecret计算签名值 + String timestamp = System.currentTimeMillis() + ""; + String urlEncodeSignature = GlobalAuthUtil.generateDingTalkSignature(config.getClientSecret(), timestamp); + + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("signature", urlEncodeSignature) + .queryParam("timestamp", timestamp) + .queryParam("accessKey", config.getClientId()) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java index feabc75..b5f1f62 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java @@ -7,8 +7,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.AuthDouyinUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; /** @@ -21,47 +20,39 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthDouyinRequest extends AuthDefaultRequest { public AuthDouyinRequest(AuthConfig config) { - super(config, AuthSource.DOUYIN, new AuthDouyinUrlBuilder()); + super(config, AuthSource.DOUYIN); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - return this.getToken(accessTokenUrl); + return this.getToken(accessTokenUrl(authCallback.getCode())); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - String openId = authToken.getOpenId(); - String url = this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .openId(openId) - .build()); - HttpResponse response = HttpRequest.get(url).execute(); + HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); JSONObject userInfoObject = this.checkResponse(object); return AuthUser.builder() - .uuid(userInfoObject.getString("union_id")) - .username(userInfoObject.getString("nickname")) - .nickname(userInfoObject.getString("nickname")) - .avatar(userInfoObject.getString("avatar")) - .remark(userInfoObject.getString("description")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(AuthSource.DOUYIN) - .build(); + .uuid(userInfoObject.getString("union_id")) + .username(userInfoObject.getString("nickname")) + .nickname(userInfoObject.getString("nickname")) + .avatar(userInfoObject.getString("avatar")) + .remark(userInfoObject.getString("description")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(AuthSource.DOUYIN) + .build(); } @Override public AuthResponse refresh(AuthToken oldToken) { - String refreshTokenUrl = this.urlBuilder.getRefreshUrl(oldToken.getRefreshToken()); return AuthResponse.builder() - .code(AuthResponseStatus.SUCCESS.getCode()) - .data(this.getToken(refreshTokenUrl)) - .build(); + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(refreshTokenUrl(oldToken.getRefreshToken())) + .build(); } /** @@ -93,11 +84,72 @@ public class AuthDouyinRequest extends AuthDefaultRequest { JSONObject accessTokenObject = this.checkResponse(object); return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .openId(accessTokenObject.getString("open_id")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .scope(accessTokenObject.getString("scope")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .openId(accessTokenObject.getString("open_id")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .scope(accessTokenObject.getString("scope")) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_key", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .queryParam("scope", "user_info") + .build(); + } + + /** + * 返回获取accessToken的url + * + * @param code + * @return 返回获取accessToken的url + */ + @Override + protected String accessTokenUrl(String code) { + return UrlBuilder.fromBaseUrl(source.accessToken()) + .queryParam("code", code) + .queryParam("client_key", config.getClientId()) + .queryParam("client_secret", config.getClientSecret()) + .queryParam("grant_type", "authorization_code") + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("access_token", authToken.getAccessToken()) + .queryParam("open_id", authToken.getOpenId()) + .build(); + } + + /** + * 返回获取accessToken的url + * + * @param refreshToken + * @return 返回获取accessToken的url + */ + @Override + protected String refreshTokenUrl(String refreshToken) { + return UrlBuilder.fromBaseUrl(source.refresh()) + .queryParam("client_key", config.getClientId()) + .queryParam("refresh_token", refreshToken) + .queryParam("grant_type", "refresh_token") + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java index ccf32d3..fafc280 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; @@ -10,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthFacebookUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; /** * Facebook登录 @@ -23,13 +21,12 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthFacebookRequest extends AuthDefaultRequest { public AuthFacebookRequest(AuthConfig config) { - super(config, AuthSource.FACEBOOK, new AuthFacebookUrlBuilder()); + super(config, AuthSource.FACEBOOK); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { @@ -37,18 +34,15 @@ public class AuthFacebookRequest extends AuthDefaultRequest { } return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .tokenType(accessTokenObject.getString("token_type")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .tokenType(accessTokenObject.getString("token_type")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); if (object.containsKey("error")) { @@ -63,15 +57,29 @@ public class AuthFacebookRequest extends AuthDefaultRequest { } } return AuthUser.builder() - .uuid(object.getString("id")) - .username(object.getString("name")) - .nickname(object.getString("name")) - .avatar(picture) - .location(object.getString("locale")) - .email(object.getString("email")) - .gender(AuthUserGender.getRealGender(object.getString("gender"))) - .token(authToken) - .source(AuthSource.FACEBOOK) - .build(); + .uuid(object.getString("id")) + .username(object.getString("name")) + .nickname(object.getString("name")) + .avatar(picture) + .location(object.getString("locale")) + .email(object.getString("email")) + .gender(AuthUserGender.getRealGender(object.getString("gender"))) + .token(authToken) + .source(AuthSource.FACEBOOK) + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("access_token", authToken.getAccessToken()) + .queryParam("fields", "id,name,birthday,gender,hometown,email,devices,picture.width(400)") + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index 88db0cd..409b516 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; @@ -10,8 +9,6 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthGiteeUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; /** * Gitee登录 @@ -23,13 +20,12 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthGiteeRequest extends AuthDefaultRequest { public AuthGiteeRequest(AuthConfig config) { - super(config, AuthSource.GITEE, new AuthGiteeUrlBuilder()); + super(config, AuthSource.GITEE); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { throw new AuthException("Unable to get token from gitee using code [" + authCallback.getCode() + "]: " + accessTokenObject); @@ -39,25 +35,22 @@ public class AuthGiteeRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); return AuthUser.builder() - .uuid(object.getString("id")) - .username(object.getString("login")) - .avatar(object.getString("avatar_url")) - .blog(object.getString("blog")) - .nickname(object.getString("name")) - .company(object.getString("company")) - .location(object.getString("address")) - .email(object.getString("email")) - .remark(object.getString("bio")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(AuthSource.GITEE) - .build(); + .uuid(object.getString("id")) + .username(object.getString("login")) + .avatar(object.getString("avatar_url")) + .blog(object.getString("blog")) + .nickname(object.getString("name")) + .company(object.getString("company")) + .location(object.getString("address")) + .email(object.getString("email")) + .remark(object.getString("bio")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(AuthSource.GITEE) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java index 5bccd1e..7763f40 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; @@ -10,8 +9,6 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthGithubUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; import java.util.Map; @@ -26,13 +23,12 @@ import java.util.Map; public class AuthGithubRequest extends AuthDefaultRequest { public AuthGithubRequest(AuthConfig config) { - super(config, AuthSource.GITHUB, new AuthGithubUrlBuilder()); + super(config, AuthSource.GITHUB); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); Map res = GlobalAuthUtil.parseStringToMap(response.body()); if (res.containsKey("error")) { throw new AuthException(res.get("error") + ":" + res.get("error_description")); @@ -42,25 +38,22 @@ public class AuthGithubRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); return AuthUser.builder() - .uuid(object.getString("id")) - .username(object.getString("login")) - .avatar(object.getString("avatar_url")) - .blog(object.getString("blog")) - .nickname(object.getString("name")) - .company(object.getString("company")) - .location(object.getString("location")) - .email(object.getString("email")) - .remark(object.getString("bio")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(AuthSource.GITHUB) - .build(); + .uuid(object.getString("id")) + .username(object.getString("login")) + .avatar(object.getString("avatar_url")) + .blog(object.getString("blog")) + .nickname(object.getString("name")) + .company(object.getString("company")) + .location(object.getString("location")) + .email(object.getString("email")) + .remark(object.getString("bio")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(AuthSource.GITHUB) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java index 62ed5f0..9c7aee9 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; @@ -10,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthGoogleUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; /** * Google登录 @@ -23,47 +21,70 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthGoogleRequest extends AuthDefaultRequest { public AuthGoogleRequest(AuthConfig config) { - super(config, AuthSource.GOOGLE, new AuthGoogleUrlBuilder()); + super(config, AuthSource.GOOGLE); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error") || accessTokenObject.containsKey("error_description")) { throw new AuthException("get google access_token has error:[" + accessTokenObject.getString("error") + "], error_description:[" + accessTokenObject - .getString("error_description") + "]"); + .getString("error_description") + "]"); } return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .scope(accessTokenObject.getString("scope")) - .tokenType(accessTokenObject.getString("token_type")) - .idToken(accessTokenObject.getString("id_token")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .scope(accessTokenObject.getString("scope")) + .tokenType(accessTokenObject.getString("token_type")) + .idToken(accessTokenObject.getString("id_token")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getIdToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); return AuthUser.builder() - .uuid(object.getString("sub")) - .username(object.getString("name")) - .avatar(object.getString("picture")) - .nickname(object.getString("name")) - .location(object.getString("locale")) - .email(object.getString("email")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(AuthSource.GOOGLE) - .build(); + .uuid(object.getString("sub")) + .username(object.getString("name")) + .avatar(object.getString("picture")) + .nickname(object.getString("name")) + .location(object.getString("locale")) + .email(object.getString("email")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(AuthSource.GOOGLE) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("scope", "openid%20email%20profile") + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()).queryParam("id_token", authToken.getAccessToken()).build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index 110647f..c044a0d 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -8,9 +8,8 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.AuthLinkedinUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.StringUtils; +import me.zhyd.oauth.utils.UrlBuilder; /** @@ -23,23 +22,22 @@ import me.zhyd.oauth.utils.StringUtils; public class AuthLinkedinRequest extends AuthDefaultRequest { public AuthLinkedinRequest(AuthConfig config) { - super(config, AuthSource.LINKEDIN, new AuthLinkedinUrlBuilder()); + super(config, AuthSource.LINKEDIN); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - return this.getToken(accessTokenUrl); + return this.getToken(accessTokenUrl(authCallback.getCode())); } @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder().build())) - .header("Host", "api.linkedin.com") - .header("Connection", "Keep-Alive") - .header("Authorization", "Bearer " + accessToken) - .execute(); + HttpResponse response = HttpRequest.get(userInfoUrl(authToken)) + .header("Host", "api.linkedin.com") + .header("Connection", "Keep-Alive") + .header("Authorization", "Bearer " + accessToken) + .execute(); JSONObject userInfoObject = JSONObject.parseObject(response.body()); this.checkResponse(userInfoObject); @@ -65,7 +63,7 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { JSONObject profilePictureObject = userInfoObject.getJSONObject("profilePicture"); if (profilePictureObject.containsKey("displayImage~")) { JSONArray displayImageElements = profilePictureObject.getJSONObject("displayImage~") - .getJSONArray("elements"); + .getJSONArray("elements"); if (null != displayImageElements && displayImageElements.size() > 0) { JSONObject largestImageObj = displayImageElements.getJSONObject(displayImageElements.size() - 1); avatar = largestImageObj.getJSONArray("identifiers").getJSONObject(0).getString("identifier"); @@ -75,31 +73,31 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { // 获取用户邮箱地址 String email = this.getUserEmail(accessToken); return AuthUser.builder() - .uuid(userInfoObject.getString("id")) - .username(userName) - .nickname(userName) - .avatar(avatar) - .email(email) - .token(authToken) - .gender(AuthUserGender.UNKNOWN) - .source(AuthSource.LINKEDIN) - .build(); + .uuid(userInfoObject.getString("id")) + .username(userName) + .nickname(userName) + .avatar(avatar) + .email(email) + .token(authToken) + .gender(AuthUserGender.UNKNOWN) + .source(AuthSource.LINKEDIN) + .build(); } private String getUserEmail(String accessToken) { String email = null; HttpResponse emailResponse = HttpRequest.get("https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))") - .header("Host", "api.linkedin.com") - .header("Connection", "Keep-Alive") - .header("Authorization", "Bearer " + accessToken) - .execute(); + .header("Host", "api.linkedin.com") + .header("Connection", "Keep-Alive") + .header("Authorization", "Bearer " + accessToken) + .execute(); System.out.println(emailResponse.body()); JSONObject emailObj = JSONObject.parseObject(emailResponse.body()); if (emailObj.containsKey("elements")) { email = emailObj.getJSONArray("elements") - .getJSONObject(0) - .getJSONObject("handle~") - .getString("emailAddress"); + .getJSONObject(0) + .getJSONObject("handle~") + .getString("emailAddress"); } return email; } @@ -115,14 +113,15 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { @Override public AuthResponse refresh(AuthToken oldToken) { - if (StringUtils.isEmpty(oldToken.getRefreshToken())) { + String refreshToken = oldToken.getRefreshToken(); + if (StringUtils.isEmpty(refreshToken)) { throw new AuthException(AuthResponseStatus.UNSUPPORTED); } - String refreshTokenUrl = this.urlBuilder.getRefreshUrl(oldToken.getRefreshToken()); + String refreshTokenUrl = refreshTokenUrl(refreshToken); return AuthResponse.builder() - .code(AuthResponseStatus.SUCCESS.getCode()) - .data(this.getToken(refreshTokenUrl)) - .build(); + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(this.getToken(refreshTokenUrl)) + .build(); } private void checkResponse(JSONObject userInfoObject) { @@ -139,18 +138,47 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { */ private AuthToken getToken(String accessTokenUrl) { HttpResponse response = HttpRequest.post(accessTokenUrl) - .header("Host", "www.linkedin.com") - .header("Content-Type", "application/x-www-form-urlencoded") - .execute(); + .header("Host", "www.linkedin.com") + .header("Content-Type", "application/x-www-form-urlencoded") + .execute(); String accessTokenStr = response.body(); JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr); this.checkResponse(accessTokenObject); return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .queryParam("scope", "r_liteprofile%20r_emailaddress%20w_member_social") + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("projection", "(id,firstName,lastName,profilePicture(displayImage~:playableStreams))") + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java index 296b17c..337d298 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java @@ -9,8 +9,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.AuthMiUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; import java.text.MessageFormat; @@ -26,13 +25,12 @@ public class AuthMiRequest extends AuthDefaultRequest { private static final String PREFIX = "&&&START&&&"; public AuthMiRequest(AuthConfig config) { - super(config, AuthSource.MI, new AuthMiUrlBuilder()); + super(config, AuthSource.MI); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - return getToken(accessTokenUrl); + return getToken(accessTokenUrl(authCallback.getCode())); } private AuthToken getToken(String accessTokenUrl) { @@ -45,25 +43,21 @@ public class AuthMiRequest extends AuthDefaultRequest { } return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .scope(accessTokenObject.getString("scope")) - .tokenType(accessTokenObject.getString("token_type")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .openId(accessTokenObject.getString("openId")) - .macAlgorithm(accessTokenObject.getString("mac_algorithm")) - .macKey(accessTokenObject.getString("mac_key")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .scope(accessTokenObject.getString("scope")) + .tokenType(accessTokenObject.getString("token_type")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .openId(accessTokenObject.getString("openId")) + .macAlgorithm(accessTokenObject.getString("mac_algorithm")) + .macKey(accessTokenObject.getString("mac_key")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { // 获取用户信息 - HttpResponse userResponse = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .clientId(config.getClientId()) - .accessToken(authToken.getAccessToken()) - .build())) - .execute(); + HttpResponse userResponse = doGetUserInfo(authToken); JSONObject userProfile = JSONObject.parseObject(userResponse.body()); if ("error".equalsIgnoreCase(userProfile.getString("result"))) { @@ -73,19 +67,19 @@ public class AuthMiRequest extends AuthDefaultRequest { JSONObject user = userProfile.getJSONObject("data"); AuthUser authUser = AuthUser.builder() - .uuid(authToken.getOpenId()) - .username(user.getString("miliaoNick")) - .nickname(user.getString("miliaoNick")) - .avatar(user.getString("miliaoIcon")) - .email(user.getString("mail")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(AuthSource.MI) - .build(); + .uuid(authToken.getOpenId()) + .username(user.getString("miliaoNick")) + .nickname(user.getString("miliaoNick")) + .avatar(user.getString("miliaoIcon")) + .email(user.getString("mail")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(AuthSource.MI) + .build(); // 获取用户邮箱手机号等信息 String emailPhoneUrl = MessageFormat.format("{0}?clientId={1}&token={2}", "https://open.account.xiaomi.com/user/phoneAndEmail", config - .getClientId(), authToken.getAccessToken()); + .getClientId(), authToken.getAccessToken()); HttpResponse emailResponse = HttpRequest.get(emailPhoneUrl).execute(); JSONObject userEmailPhone = JSONObject.parseObject(emailResponse.body()); @@ -107,8 +101,40 @@ public class AuthMiRequest extends AuthDefaultRequest { */ @Override public AuthResponse refresh(AuthToken authToken) { - String miRefreshUrl = this.urlBuilder.getRefreshUrl(authToken.getRefreshToken()); + return AuthResponse.builder() + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(getToken(refreshTokenUrl(authToken.getRefreshToken()))) + .build(); + } - return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(getToken(miRefreshUrl)).build(); + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .queryParam("scope", "user/profile%20user/openIdV2%20user/phoneAndEmail") + .queryParam("skip_confirm", "false") + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("clientId", config.getClientId()) + .queryParam("token", authToken.getAccessToken()) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java index da30f93..993e7f7 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java @@ -8,8 +8,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.AuthMicrosoftUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; import java.util.HashMap; import java.util.Map; @@ -23,14 +22,12 @@ import java.util.Map; */ public class AuthMicrosoftRequest extends AuthDefaultRequest { public AuthMicrosoftRequest(AuthConfig config) { - super(config, AuthSource.MICROSOFT, new AuthMicrosoftUrlBuilder()); + super(config, AuthSource.MICROSOFT); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - - return getToken(accessTokenUrl); + return getToken(accessTokenUrl(authCallback.getCode())); } /** @@ -43,22 +40,22 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { Map paramMap = new HashMap<>(6); HttpUtil.decodeParamMap(accessTokenUrl, "UTF-8").forEach(paramMap::put); HttpResponse response = HttpRequest.post(accessTokenUrl) - .header("Host", "https://login.microsoftonline.com") - .header("Content-Type", "application/x-www-form-urlencoded") - .form(paramMap) - .execute(); + .header("Host", "https://login.microsoftonline.com") + .header("Content-Type", "application/x-www-form-urlencoded") + .form(paramMap) + .execute(); String accessTokenStr = response.body(); JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr); this.checkResponse(accessTokenObject); return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .scope(accessTokenObject.getString("scope")) - .tokenType(accessTokenObject.getString("token_type")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .scope(accessTokenObject.getString("scope")) + .tokenType(accessTokenObject.getString("token_type")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .build(); } private void checkResponse(JSONObject response) { @@ -72,21 +69,19 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { String token = authToken.getAccessToken(); String tokenType = authToken.getTokenType(); String jwt = tokenType + " " + token; - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder().build())) - .header("Authorization", jwt) - .execute(); + HttpResponse response = HttpRequest.get(userInfoUrl(authToken)).header("Authorization", jwt).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); return AuthUser.builder() - .uuid(object.getString("id")) - .username(object.getString("userPrincipalName")) - .nickname(object.getString("displayName")) - .location(object.getString("officeLocation")) - .email(object.getString("mail")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(AuthSource.MICROSOFT) - .build(); + .uuid(object.getString("id")) + .username(object.getString("userPrincipalName")) + .nickname(object.getString("displayName")) + .location(object.getString("officeLocation")) + .email(object.getString("mail")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(AuthSource.MICROSOFT) + .build(); } /** @@ -97,8 +92,73 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { */ @Override public AuthResponse refresh(AuthToken authToken) { - String refreshTokenUrl = this.urlBuilder.getRefreshUrl(authToken.getRefreshToken()); + return AuthResponse.builder() + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(getToken(refreshTokenUrl(authToken.getRefreshToken()))) + .build(); + } - return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(getToken(refreshTokenUrl)).build(); + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("response_mode", "query") + .queryParam("scope", "offline_access%20user.read%20mail.read") + .queryParam("state", getRealState(config.getState())) + .build(); + } + + /** + * 返回获取accessToken的url + * + * @param code + * @return 返回获取accessToken的url + */ + @Override + protected String accessTokenUrl(String code) { + return UrlBuilder.fromBaseUrl(source.accessToken()) + .queryParam("code", code) + .queryParam("client_id", config.getClientId()) + .queryParam("client_secret", config.getClientSecret()) + .queryParam("grant_type", "authorization_code") + .queryParam("scope", "user.read%20mail.read") + .queryParam("redirect_uri", config.getRedirectUri()) + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()).build(); + } + + /** + * 返回获取accessToken的url + * + * @param refreshToken + * @return 返回获取accessToken的url + */ + @Override + protected String refreshTokenUrl(String refreshToken) { + return UrlBuilder.fromBaseUrl(source.refresh()) + .queryParam("client_id", config.getClientId()) + .queryParam("client_secret", config.getClientSecret()) + .queryParam("refresh_token", refreshToken) + .queryParam("grant_type", "refresh_token") + .queryParam("scope", "user.read%20mail.read") + .queryParam("redirect_uri", config.getRedirectUri()) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java index 975ae5a..945ff6a 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; @@ -10,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthOschinaUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; /** * oschina登录 @@ -23,46 +21,74 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthOschinaRequest extends AuthDefaultRequest { public AuthOschinaRequest(AuthConfig config) { - super(config, AuthSource.OSCHINA, new AuthOschinaUrlBuilder()); + super(config, AuthSource.OSCHINA); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { throw new AuthException("Unable to get token from oschina using code [" + authCallback.getCode() + "]: " + accessTokenObject); } return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .uid(accessTokenObject.getString("uid")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .uid(accessTokenObject.getString("uid")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); if (object.containsKey("error")) { throw new AuthException(object.getString("error_description")); } return AuthUser.builder() - .uuid(object.getString("id")) - .username(object.getString("name")) - .nickname(object.getString("name")) - .avatar(object.getString("avatar")) - .blog(object.getString("url")) - .location(object.getString("location")) - .gender(AuthUserGender.getRealGender(object.getString("gender"))) - .email(object.getString("email")) - .token(authToken) - .source(AuthSource.OSCHINA) - .build(); + .uuid(object.getString("id")) + .username(object.getString("name")) + .nickname(object.getString("name")) + .avatar(object.getString("avatar")) + .blog(object.getString("url")) + .location(object.getString("location")) + .gender(AuthUserGender.getRealGender(object.getString("gender"))) + .email(object.getString("email")) + .token(authToken) + .source(AuthSource.OSCHINA) + .build(); + } + + /** + * 返回获取accessToken的url + * + * @param code + * @return 返回获取accessToken的url + */ + @Override + protected String accessTokenUrl(String code) { + return UrlBuilder.fromBaseUrl(source.accessToken()) + .queryParam("code", code) + .queryParam("client_id", config.getClientId()) + .queryParam("client_secret", config.getClientSecret()) + .queryParam("grant_type", "authorization_code") + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("dataType", "json") + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("access_token", authToken.getAccessToken()) + .queryParam("dataType", "json") + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java index db4bc33..2452650 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java @@ -11,10 +11,9 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthQqUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.GlobalAuthUtil; import me.zhyd.oauth.utils.StringUtils; +import me.zhyd.oauth.utils.UrlBuilder; import java.util.Map; @@ -28,34 +27,27 @@ import java.util.Map; */ public class AuthQqRequest extends AuthDefaultRequest { public AuthQqRequest(AuthConfig config) { - super(config, AuthSource.QQ, new AuthQqUrlBuilder()); + super(config, AuthSource.QQ); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); + HttpResponse response = doGetAuthorizationCode(authCallback.getCode()); Map accessTokenObject = GlobalAuthUtil.parseStringToMap(response.body()); if (!accessTokenObject.containsKey("access_token")) { throw new AuthException("Unable to get token from qq using code [" + authCallback.getCode() + "]: " + accessTokenObject); } return AuthToken.builder() - .accessToken(accessTokenObject.get("access_token")) - .expireIn(Integer.valueOf(accessTokenObject.get("expires_in"))) - .refreshToken(accessTokenObject.get("refresh_token")) - .build(); + .accessToken(accessTokenObject.get("access_token")) + .expireIn(Integer.valueOf(accessTokenObject.get("expires_in"))) + .refreshToken(accessTokenObject.get("refresh_token")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); String openId = this.getOpenId(authToken); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .clientId(config.getClientId()) - .accessToken(accessToken) - .openId(openId) - .build())) - .execute(); + HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); if (object.getIntValue("ret") != 0) { throw new AuthException(object.getString("msg")); @@ -67,20 +59,22 @@ public class AuthQqRequest extends AuthDefaultRequest { String location = String.format("%s-%s", object.getString("province"), object.getString("city")); return AuthUser.builder() - .username(object.getString("nickname")) - .nickname(object.getString("nickname")) - .avatar(avatar) - .location(location) - .uuid(openId) - .gender(AuthUserGender.getRealGender(object.getString("gender"))) - .token(authToken) - .source(AuthSource.QQ) - .build(); + .username(object.getString("nickname")) + .nickname(object.getString("nickname")) + .avatar(avatar) + .location(location) + .uuid(openId) + .gender(AuthUserGender.getRealGender(object.getString("gender"))) + .token(authToken) + .source(AuthSource.QQ) + .build(); } private String getOpenId(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getOpenIdUrl(accessToken, config.isUnionId())).execute(); + HttpResponse response = HttpRequest.get(UrlBuilder.fromBaseUrl("https://graph.qq.com/oauth2.0/me") + .queryParam("access_token", authToken.getAccessToken()) + .queryParam("unionid", config.isUnionId() ? 1 : 0) + .build()).execute(); if (response.isOk()) { String body = response.body(); String removePrefix = StrUtil.replace(body, "callback(", ""); @@ -99,4 +93,19 @@ public class AuthQqRequest extends AuthDefaultRequest { throw new AuthException("request error"); } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("access_token", authToken.getAccessToken()) + .queryParam("oauth_consumer_key", config.getClientId()) + .queryParam("openid", authToken.getOpenId()) + .build(); + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java index dc74e89..47ce130 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -10,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthRenrenUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; import java.util.Objects; @@ -27,13 +25,12 @@ import static me.zhyd.oauth.config.AuthSource.RENREN; public class AuthRenrenRequest extends AuthDefaultRequest { public AuthRenrenRequest(AuthConfig config) { - super(config, RENREN, new AuthRenrenUrlBuilder()); + super(config, RENREN); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (!response.isOk()) { throw new AuthException("Unable to get token from renren using code [" + authCallback.getCode() + "]: " + accessTokenObject); @@ -48,11 +45,7 @@ public class AuthRenrenRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .openId(authToken.getOpenId()) - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); JSONObject userObj = JSONObject.parseObject(response.body()).getJSONObject("response"); return AuthUser.builder() @@ -89,4 +82,18 @@ public class AuthRenrenRequest extends AuthDefaultRequest { } return jsonArray.getJSONObject(0).getString("name"); } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("access_token", authToken.getAccessToken()) + .queryParam("userId", authToken.getOpenId()) + .build(); + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index cf20590..838ec66 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java @@ -1,14 +1,16 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.AuthTaobaoUrlBuilder; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthToken; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.utils.GlobalAuthUtil; +import me.zhyd.oauth.utils.UrlBuilder; /** * 淘宝登录 @@ -20,7 +22,7 @@ import me.zhyd.oauth.utils.GlobalAuthUtil; public class AuthTaobaoRequest extends AuthDefaultRequest { public AuthTaobaoRequest(AuthConfig config) { - super(config, AuthSource.TAOBAO, new AuthTaobaoUrlBuilder()); + super(config, AuthSource.TAOBAO); } @Override @@ -30,8 +32,7 @@ public class AuthTaobaoRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessCode = authToken.getAccessCode(); - HttpResponse response = HttpRequest.post(this.urlBuilder.getAccessTokenUrl(accessCode)).execute(); + HttpResponse response = doPostAuthorizationCode(authToken.getAccessCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error")) { throw new AuthException(accessTokenObject.getString("error_description")); @@ -44,12 +45,28 @@ public class AuthTaobaoRequest extends AuthDefaultRequest { String nick = GlobalAuthUtil.urlDecode(accessTokenObject.getString("taobao_user_nick")); return AuthUser.builder() - .uuid(accessTokenObject.getString("taobao_user_id")) - .username(nick) - .nickname(nick) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(AuthSource.TAOBAO) - .build(); + .uuid(accessTokenObject.getString("taobao_user_id")) + .username(nick) + .nickname(nick) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(AuthSource.TAOBAO) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .queryParam("view", "web") + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java index 673db40..46dab25 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java @@ -7,7 +7,6 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.AuthTeambitionUrlBuilder; /** * Teambition授权登录 @@ -19,7 +18,7 @@ import me.zhyd.oauth.url.AuthTeambitionUrlBuilder; public class AuthTeambitionRequest extends AuthDefaultRequest { public AuthTeambitionRequest(AuthConfig config) { - super(config, AuthSource.TEAMBITION, new AuthTeambitionUrlBuilder()); + super(config, AuthSource.TEAMBITION); } /** @@ -28,30 +27,29 @@ public class AuthTeambitionRequest extends AuthDefaultRequest { */ @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl) - .form("client_id", config.getClientId()) - .form("client_secret", config.getClientSecret()) - .form("code", authCallback.getCode()) - .form("grant_type", "code") - .execute(); + HttpResponse response = HttpRequest.post(source.accessToken()) + .form("client_id", config.getClientId()) + .form("client_secret", config.getClientSecret()) + .form("code", authCallback.getCode()) + .form("grant_type", "code") + .execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); this.checkResponse(accessTokenObject); return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(null)) - .header("Authorization", "OAuth2 " + accessToken) - .execute(); + HttpResponse response = HttpRequest.get(source.userInfo()) + .header("Authorization", "OAuth2 " + accessToken) + .execute(); JSONObject object = JSONObject.parseObject(response.body()); this.checkResponse(object); @@ -59,39 +57,38 @@ public class AuthTeambitionRequest extends AuthDefaultRequest { authToken.setUid(object.getString("_id")); return AuthUser.builder() - .uuid(object.getString("_id")) - .username(object.getString("name")) - .nickname(object.getString("name")) - .avatar(object.getString("avatarUrl")) - .blog(object.getString("website")) - .location(object.getString("location")) - .email(object.getString("email")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(AuthSource.TEAMBITION) - .build(); + .uuid(object.getString("_id")) + .username(object.getString("name")) + .nickname(object.getString("name")) + .avatar(object.getString("avatarUrl")) + .blog(object.getString("website")) + .location(object.getString("location")) + .email(object.getString("email")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(AuthSource.TEAMBITION) + .build(); } @Override public AuthResponse refresh(AuthToken oldToken) { String uid = oldToken.getUid(); String refreshToken = oldToken.getRefreshToken(); - String refreshTokenUrl = this.urlBuilder.getRefreshUrl(refreshToken); - HttpResponse response = HttpRequest.post(refreshTokenUrl) - .form("_userId", uid) - .form("refresh_token", refreshToken) - .execute(); + HttpResponse response = HttpRequest.post(source.refresh()) + .form("_userId", uid) + .form("refresh_token", refreshToken) + .execute(); JSONObject refreshTokenObject = JSONObject.parseObject(response.body()); this.checkResponse(refreshTokenObject); return AuthResponse.builder() - .code(AuthResponseStatus.SUCCESS.getCode()) - .data(AuthToken.builder() - .accessToken(refreshTokenObject.getString("access_token")) - .refreshToken(refreshTokenObject.getString("refresh_token")) - .build()) - .build(); + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(AuthToken.builder() + .accessToken(refreshTokenObject.getString("access_token")) + .refreshToken(refreshTokenObject.getString("refresh_token")) + .build()) + .build(); } /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java index 91b2b2a..b0204fb 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; @@ -10,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthTencentCloudUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; /** * 腾讯云登录 @@ -23,48 +21,61 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthTencentCloudRequest extends AuthDefaultRequest { public AuthTencentCloudRequest(AuthConfig config) { - super(config, AuthSource.TENCENT_CLOUD, new AuthTencentCloudUrlBuilder()); + super(config, AuthSource.TENCENT_CLOUD); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); + HttpResponse response = doGetAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.getIntValue("code") != 0) { - throw new AuthException("Unable to get token from tencent cloud using code [" + authCallback.getCode() + "]: " + accessTokenObject.get("msg")); + throw new AuthException("Unable to get token from tencent cloud using code [" + authCallback.getCode() + "]: " + accessTokenObject + .get("msg")); } return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); if (object.getIntValue("code") != 0) { throw new AuthException(object.getString("msg")); } object = object.getJSONObject("data"); return AuthUser.builder() - .uuid(object.getString("id")) - .username(object.getString("name")) - .avatar("https://dev.tencent.com/" + object.getString("avatar")) - .blog("https://dev.tencent.com/" + object.getString("path")) - .nickname(object.getString("name")) - .company(object.getString("company")) - .location(object.getString("location")) - .gender(AuthUserGender.getRealGender(object.getString("sex"))) - .email(object.getString("email")) - .remark(object.getString("slogan")) - .token(authToken) - .source(AuthSource.TENCENT_CLOUD) - .build(); + .uuid(object.getString("id")) + .username(object.getString("name")) + .avatar("https://dev.tencent.com/" + object.getString("avatar")) + .blog("https://dev.tencent.com/" + object.getString("path")) + .nickname(object.getString("name")) + .company(object.getString("company")) + .location(object.getString("location")) + .gender(AuthUserGender.getRealGender(object.getString("sex"))) + .email(object.getString("email")) + .remark(object.getString("slogan")) + .token(authToken) + .source(AuthSource.TENCENT_CLOUD) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("scope", "user") + .queryParam("state", getRealState(config.getState())) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java index 45431f2..19ab8bf 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; @@ -11,8 +10,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthToutiaoUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; /** * 今日头条登录 @@ -24,32 +22,29 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; public class AuthToutiaoRequest extends AuthDefaultRequest { public AuthToutiaoRequest(AuthConfig config) { - super(config, AuthSource.TOUTIAO, new AuthToutiaoUrlBuilder()); + super(config, AuthSource.TOUTIAO); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.get(accessTokenUrl).execute(); + HttpResponse response = doGetAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (accessTokenObject.containsKey("error_code")) { - throw new AuthException(AuthToutiaoErrorCode.getErrorCode(accessTokenObject.getIntValue("error_code")).getDesc()); + throw new AuthException(AuthToutiaoErrorCode.getErrorCode(accessTokenObject.getIntValue("error_code")) + .getDesc()); } return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .openId(accessTokenObject.getString("open_id")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .openId(accessTokenObject.getString("open_id")) + .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - HttpResponse userResponse = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .clientId(config.getClientId()) - .accessToken(authToken.getAccessToken()) - .build())).execute(); + HttpResponse userResponse = doGetUserInfo(authToken); JSONObject userProfile = JSONObject.parseObject(userResponse.body()); @@ -63,14 +58,61 @@ public class AuthToutiaoRequest extends AuthDefaultRequest { String anonymousUserName = "匿名用户"; return AuthUser.builder() - .uuid(user.getString("uid")) - .username(isAnonymousUser ? anonymousUserName : user.getString("screen_name")) - .nickname(isAnonymousUser ? anonymousUserName : user.getString("screen_name")) - .avatar(user.getString("avatar_url")) - .remark(user.getString("description")) - .gender(AuthUserGender.getRealGender(user.getString("gender"))) - .token(authToken) - .source(AuthSource.TOUTIAO) - .build(); + .uuid(user.getString("uid")) + .username(isAnonymousUser ? anonymousUserName : user.getString("screen_name")) + .nickname(isAnonymousUser ? anonymousUserName : user.getString("screen_name")) + .avatar(user.getString("avatar_url")) + .remark(user.getString("description")) + .gender(AuthUserGender.getRealGender(user.getString("gender"))) + .token(authToken) + .source(AuthSource.TOUTIAO) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_key", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .queryParam("auth_only", 1) + .queryParam("display", 0) + .build(); + } + + /** + * 返回获取accessToken的url + * + * @param code + * @return 返回获取accessToken的url + */ + @Override + protected String accessTokenUrl(String code) { + return UrlBuilder.fromBaseUrl(source.accessToken()) + .queryParam("code", code) + .queryParam("client_key", config.getClientId()) + .queryParam("client_secret", config.getClientSecret()) + .queryParam("grant_type", "authorization_code") + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("client_key", config.getClientId()) + .queryParam("access_token", authToken.getAccessToken()) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java index 82a1662..1aeee68 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java @@ -7,8 +7,7 @@ import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; -import me.zhyd.oauth.url.AuthWechatUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; /** * 微信登录 @@ -19,7 +18,7 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; */ public class AuthWeChatRequest extends AuthDefaultRequest { public AuthWeChatRequest(AuthConfig config) { - super(config, AuthSource.WECHAT, new AuthWechatUrlBuilder()); + super(config, AuthSource.WECHAT); } /** @@ -30,48 +29,42 @@ public class AuthWeChatRequest extends AuthDefaultRequest { */ @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - return this.getToken(accessTokenUrl); + return this.getToken(accessTokenUrl(authCallback.getCode())); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); String openId = authToken.getOpenId(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .openId(openId) - .build())).execute(); + HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); this.checkResponse(object); String location = String.format("%s-%s-%s", object.getString("country"), object.getString("province"), object.getString("city")); - if (object.containsKey("unionid")){ + if (object.containsKey("unionid")) { authToken.setUnionId(object.getString("unionid")); } return AuthUser.builder() - .username(object.getString("nickname")) - .nickname(object.getString("nickname")) - .avatar(object.getString("headimgurl")) - .location(location) - .uuid(openId) - .gender(AuthUserGender.getRealGender(object.getString("sex"))) - .token(authToken) - .source(AuthSource.WECHAT) - .build(); + .username(object.getString("nickname")) + .nickname(object.getString("nickname")) + .avatar(object.getString("headimgurl")) + .location(location) + .uuid(openId) + .gender(AuthUserGender.getRealGender(object.getString("sex"))) + .token(authToken) + .source(AuthSource.WECHAT) + .build(); } @Override public AuthResponse refresh(AuthToken oldToken) { - String refreshTokenUrl = this.urlBuilder.getRefreshUrl(oldToken.getRefreshToken()); return AuthResponse.builder() - .code(AuthResponseStatus.SUCCESS.getCode()) - .data(this.getToken(refreshTokenUrl)) - .build(); + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(this.getToken(refreshTokenUrl(oldToken.getRefreshToken()))) + .build(); } /** @@ -98,10 +91,72 @@ public class AuthWeChatRequest extends AuthDefaultRequest { this.checkResponse(accessTokenObject); return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .openId(accessTokenObject.getString("openid")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .openId(accessTokenObject.getString("openid")) + .build(); + } + + /** + * 返回认证url,可自行跳转页面 + * + * @return 返回授权地址 + */ + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("appid", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("scope", "snsapi_login") + .queryParam("state", getRealState(config.getState()).concat("#wechat_redirect")) + .build(); + } + + /** + * 返回获取accessToken的url + * + * @param code + * @return 返回获取accessToken的url + */ + @Override + protected String accessTokenUrl(String code) { + return UrlBuilder.fromBaseUrl(source.accessToken()) + .queryParam("code", code) + .queryParam("appid", config.getClientId()) + .queryParam("secret", config.getClientSecret()) + .queryParam("grant_type", "authorization_code") + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("access_token", authToken.getAccessToken()) + .queryParam("openid", authToken.getOpenId()) + .queryParam("lang", "zh_CN") + .build(); + } + + /** + * 返回获取accessToken的url + * + * @param refreshToken + * @return 返回获取accessToken的url + */ + @Override + protected String refreshTokenUrl(String refreshToken) { + return UrlBuilder.fromBaseUrl(source.refresh()) + .queryParam("appid", config.getClientId()) + .queryParam("refresh_token", refreshToken) + .queryParam("grant_type", "refresh_token") + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java index a428f77..97555dc 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java @@ -10,10 +10,9 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthWeiboUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import me.zhyd.oauth.utils.IpUtils; import me.zhyd.oauth.utils.StringUtils; +import me.zhyd.oauth.utils.UrlBuilder; /** @@ -26,24 +25,24 @@ import me.zhyd.oauth.utils.StringUtils; public class AuthWeiboRequest extends AuthDefaultRequest { public AuthWeiboRequest(AuthConfig config) { - super(config, AuthSource.WEIBO, new AuthWeiboUrlBuilder()); + super(config, AuthSource.WEIBO); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); String accessTokenStr = response.body(); JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr); if (accessTokenObject.containsKey("error")) { - throw new AuthException("Unable to get token from weibo using code [" + authCallback.getCode() + "]:" + accessTokenObject.getString("error_description")); + throw new AuthException("Unable to get token from weibo using code [" + authCallback.getCode() + "]:" + accessTokenObject + .getString("error_description")); } return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .uid(accessTokenObject.getString("uid")) - .openId(accessTokenObject.getString("uid")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .build(); + .accessToken(accessTokenObject.getString("access_token")) + .uid(accessTokenObject.getString("uid")) + .openId(accessTokenObject.getString("uid")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .build(); } @Override @@ -51,29 +50,41 @@ public class AuthWeiboRequest extends AuthDefaultRequest { String accessToken = authToken.getAccessToken(); String uid = authToken.getUid(); String oauthParam = String.format("uid=%s&access_token=%s", uid, accessToken); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .extra(oauthParam) - .build())) - .header("Authorization", "OAuth2 " + oauthParam) - .header("API-RemoteIP", IpUtils.getIp()) - .execute(); + HttpResponse response = HttpRequest.get(userInfoUrl(authToken)) + .header("Authorization", "OAuth2 " + oauthParam) + .header("API-RemoteIP", IpUtils.getIp()) + .execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); if (object.containsKey("error")) { throw new AuthException(object.getString("error")); } return AuthUser.builder() - .uuid(object.getString("id")) - .username(object.getString("name")) - .avatar(object.getString("profile_image_url")) - .blog(StringUtils.isEmpty(object.getString("url")) ? "https://weibo.com/" + object.getString("profile_url") : object - .getString("url")) - .nickname(object.getString("screen_name")) - .location(object.getString("location")) - .remark(object.getString("description")) - .gender(AuthUserGender.getRealGender(object.getString("gender"))) - .token(authToken) - .source(AuthSource.WEIBO) - .build(); + .uuid(object.getString("id")) + .username(object.getString("name")) + .avatar(object.getString("profile_image_url")) + .blog(StringUtils.isEmpty(object.getString("url")) ? "https://weibo.com/" + object.getString("profile_url") : object + .getString("url")) + .nickname(object.getString("screen_name")) + .location(object.getString("location")) + .remark(object.getString("description")) + .gender(AuthUserGender.getRealGender(object.getString("gender"))) + .token(authToken) + .source(AuthSource.WEIBO) + .build(); + } + + /** + * 返回获取userInfo的url + * + * @param authToken + * @return 返回获取userInfo的url + */ + @Override + protected String userInfoUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.userInfo()) + .queryParam("access_token", authToken.getAccessToken()) + .queryParam("uid", authToken.getUid()) + .build(); } } diff --git a/src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java deleted file mode 100644 index b4d0fd2..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java +++ /dev/null @@ -1,45 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * Baidu相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthAlipayUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String ALIPAY_AUTHORIZE_PATTERN = "{0}?app_id={1}&scope=auth_user&redirect_uri={2}&state={3}"; - - @Override - public String getAccessTokenUrl(String code) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(ALIPAY_AUTHORIZE_PATTERN, AuthSource.ALIPAY.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java deleted file mode 100644 index 7a8540f..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * Baidu相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthBaiduUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String BAIDU_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String BAIDU_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String BAIDU_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&display=popup&state={3}"; - private static final String BAIDU_REVOKE_PATTERN = "{0}?access_token={1}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(BAIDU_ACCESS_TOKEN_PATTERN, AuthSource.BAIDU.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(BAIDU_USER_INFO_PATTERN, AuthSource.BAIDU.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(BAIDU_AUTHORIZE_PATTERN, AuthSource.BAIDU.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - return MessageFormat.format(BAIDU_REVOKE_PATTERN, AuthSource.BAIDU.revoke(), accessToken); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java deleted file mode 100644 index e4651db..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * Coding相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthCodingUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String CODING_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; - private static final String CODING_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String CODING_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(CODING_ACCESS_TOKEN_PATTERN, AuthSource.CODING.accessToken(), config.getClientId(), config.getClientSecret(), code); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(CODING_USER_INFO_PATTERN, AuthSource.CODING.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(CODING_AUTHORIZE_PATTERN, AuthSource.CODING.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java deleted file mode 100644 index 8b5cf66..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * csdn相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -@Deprecated -public class AuthCsdnUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String CSDN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String CSDN_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String CSDN_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(CSDN_ACCESS_TOKEN_PATTERN, AuthSource.CSDN.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(CSDN_USER_INFO_PATTERN, AuthSource.CSDN.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(CSDN_AUTHORIZE_PATTERN, AuthSource.CSDN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java deleted file mode 100644 index b23c087..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java +++ /dev/null @@ -1,83 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; -import me.zhyd.oauth.utils.StringUtils; - -/** - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public abstract class AuthDefaultUrlBuilder { - - protected AuthConfig config; - - /** - * 获取AccessToken的URL - * - * @param code 第三方平台返回的code - * @return AccessTokenUrl - */ - public abstract String getAccessTokenUrl(String code); - - /** - * 获取用户信息的URL - * - * @param userInfoEntity 传递生成 UserInfoUrl 必须的参数 - * @return UserInfoUrl - */ - public abstract String getUserInfoUrl(AuthUserInfoEntity userInfoEntity); - - /** - * 获取跳转授权页面的URL - * - * @return AuthorizeUrl - */ - public abstract String getAuthorizeUrl(); - - /** - * 获取刷新token的URL - * - * @param refreshToken 授权后取得的refresh token - * @return RefreshUrl - */ - public abstract String getRefreshUrl(String refreshToken); - - /** - * 获取取消授权的URL - * - * @param accessToken 授权后的token - * @return RevokeUrl - */ - public abstract String getRevokeUrl(String accessToken); - - /** - * 获取openId的地址,目前只有qq平台需要,故不需要子类强制重写 - * - * @param accessToken 用户授权后返回的accesstoken - * @param unionid 是否需要申请unionid,目前只针对qq登录 - * 注:qq授权登录时,获取unionid需要单独发送邮件申请权限。如果个人开发者账号中申请了该权限,可以将该值置为true,在获取openId时就会同步获取unionId - * 参考链接:http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D - * @return openIdUrl - */ - public String getOpenIdUrl(String accessToken, boolean unionid) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - /** - * 获取state,如果为空, 则默认去当前日期的时间戳 - * - * @param state 原始的state - * @return 返回不为null的state - */ - protected String getRealState(String state) { - return StringUtils.isEmpty(state) ? String.valueOf(System.currentTimeMillis()) : state; - } - - public void setAuthConfig(AuthConfig config) { - this.config = config; - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java deleted file mode 100644 index f04b9b8..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java +++ /dev/null @@ -1,46 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * 钉钉相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthDingtalkUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String DING_TALK_QRCONNECT_PATTERN = "{0}?appid={1}&response_type=code&scope=snsapi_login&redirect_uri={2}&state={3}"; - private static final String DING_TALK_USER_INFO_PATTERN = "{0}?signature={1}×tamp={2}&accessKey={3}"; - - @Override - public String getAccessTokenUrl(String code) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(DING_TALK_USER_INFO_PATTERN, AuthSource.DINGTALK.userInfo(), userInfoEntity.getSignature(), userInfoEntity.getTimestamp(), userInfoEntity.getClientId()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(DING_TALK_QRCONNECT_PATTERN, AuthSource.DINGTALK.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java deleted file mode 100644 index 49b17e8..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * 抖音相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthDouyinUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String DOUYIN_AUTHORIZE_PATTERN = "{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&scope=user_info"; - private static final String DOUYIN_ACCESS_TOKEN_PATTERN = "{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorization_code"; - private static final String DOUYIN_USER_INFO_PATTERN = "{0}?access_token={1}&open_id={2}"; - private static final String DOUYIN_REFRESH_TOKEN_PATTERN = "{0}?client_key={1}&refresh_token={2}&grant_type=refresh_token"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(DOUYIN_ACCESS_TOKEN_PATTERN, AuthSource.DOUYIN.accessToken(), config.getClientId(), config.getClientSecret(), code); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(DOUYIN_USER_INFO_PATTERN, AuthSource.DOUYIN.userInfo(), userInfoEntity.getAccessToken(), userInfoEntity.getOpenId()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(DOUYIN_AUTHORIZE_PATTERN, AuthSource.DOUYIN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - return MessageFormat.format(DOUYIN_REFRESH_TOKEN_PATTERN, AuthSource.DOUYIN.refresh(), config.getClientId(), refreshToken); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java deleted file mode 100644 index d9483c1..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * Facebook相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthFacebookUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String FACEBOOK_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope="; - private static final String FACEBOOK_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; - private static final String FACEBOOK_USER_INFO_PATTERN = "{0}?access_token={1}&fields=id,name,birthday,gender,hometown,email,devices,picture.width(400)"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(FACEBOOK_ACCESS_TOKEN_PATTERN, AuthSource.FACEBOOK.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(FACEBOOK_USER_INFO_PATTERN, AuthSource.FACEBOOK.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(FACEBOOK_AUTHORIZE_PATTERN, AuthSource.FACEBOOK.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java deleted file mode 100644 index d4b3239..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.*; - -import java.text.MessageFormat; - -/** - * Gitee相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthGiteeUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String GITEE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String GITEE_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String GITEE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(GITEE_ACCESS_TOKEN_PATTERN, AuthSource.GITEE.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(GITEE_USER_INFO_PATTERN, AuthSource.GITEE.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(GITEE_AUTHORIZE_PATTERN, AuthSource.GITEE.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java deleted file mode 100644 index f2defbd..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * Github相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthGithubUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String GITHUB_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}"; - private static final String GITHUB_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String GITHUB_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(GITHUB_ACCESS_TOKEN_PATTERN, AuthSource.GITHUB.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(GITHUB_USER_INFO_PATTERN, AuthSource.GITHUB.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(GITHUB_AUTHORIZE_PATTERN, AuthSource.GITHUB.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java deleted file mode 100644 index cc21750..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * Google相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthGoogleUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String GOOGLE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&scope=openid%20email%20profile&redirect_uri={2}&state={3}"; - private static final String GOOGLE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; - private static final String GOOGLE_USER_INFO_PATTERN = "{0}?id_token={1}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(GOOGLE_ACCESS_TOKEN_PATTERN, AuthSource.GOOGLE.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(GOOGLE_USER_INFO_PATTERN, AuthSource.GOOGLE.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(GOOGLE_AUTHORIZE_PATTERN, AuthSource.GOOGLE.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java deleted file mode 100644 index c8be794..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * Microsoft相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthLinkedinUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String LINKEDIN_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope=r_liteprofile%20r_emailaddress%20w_member_social"; - private static final String LINKEDIN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; - private static final String LINKEDIN_USER_INFO_PATTERN = "{0}?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))"; - private static final String LINKEDIN_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&refresh_token={3}&grant_type=refresh_token"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(LINKEDIN_ACCESS_TOKEN_PATTERN, AuthSource.LINKEDIN.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(LINKEDIN_USER_INFO_PATTERN, AuthSource.LINKEDIN.userInfo()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(LINKEDIN_AUTHORIZE_PATTERN, AuthSource.LINKEDIN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - return MessageFormat.format(LINKEDIN_REFRESH_TOKEN_PATTERN, AuthSource.LINKEDIN.refresh(), config.getClientId(), config.getClientSecret(), refreshToken); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java deleted file mode 100644 index deae372..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * 小米相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthMiUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String MI_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&response_type=code&scope=user/profile%20user/openIdV2%20user/phoneAndEmail&state={3}&skip_confirm=false"; - private static final String MI_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&code={4}&grant_type=authorization_code"; - private static final String MI_USER_INFO_PATTERN = "{0}?clientId={1}&token={2}"; - private static final String MI_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(MI_ACCESS_TOKEN_PATTERN, AuthSource.MI.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), code); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(MI_USER_INFO_PATTERN, AuthSource.MI.userInfo(), userInfoEntity.getClientId(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(MI_AUTHORIZE_PATTERN, AuthSource.MI.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - return MessageFormat.format(MI_REFRESH_TOKEN_PATTERN, AuthSource.MI.refresh(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), refreshToken); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java deleted file mode 100644 index 0b87cfa..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * Microsoft相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthMicrosoftUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String MICROSOFT_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&response_mode=query&scope=offline_access%20user.read%20mail.read&state={3}"; - private static final String MICROSOFT_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&code={4}&grant_type=authorization_code"; - private static final String MICROSOFT_USER_INFO_PATTERN = "{0}"; - private static final String MICROSOFT_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(MICROSOFT_ACCESS_TOKEN_PATTERN, AuthSource.MICROSOFT.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), code); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(MICROSOFT_USER_INFO_PATTERN, AuthSource.MICROSOFT.userInfo()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(MICROSOFT_AUTHORIZE_PATTERN, AuthSource.MICROSOFT.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - return MessageFormat.format(MICROSOFT_REFRESH_TOKEN_PATTERN, AuthSource.MICROSOFT.refresh(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), refreshToken); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java deleted file mode 100644 index 6e55331..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * OSChina相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthOschinaUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String OSCHINA_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}&dataType=json"; - private static final String OSCHINA_USER_INFO_PATTERN = "{0}?access_token={1}&dataType=json"; - private static final String OSCHINA_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(OSCHINA_ACCESS_TOKEN_PATTERN, AuthSource.OSCHINA.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(OSCHINA_USER_INFO_PATTERN, AuthSource.OSCHINA.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(OSCHINA_AUTHORIZE_PATTERN, AuthSource.OSCHINA.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java deleted file mode 100644 index 70633e2..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java +++ /dev/null @@ -1,53 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * QQ相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthQqUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String QQ_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String QQ_USER_INFO_PATTERN = "{0}?oauth_consumer_key={1}&access_token={2}&openid={3}"; - private static final String QQ_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - private static final String QQ_OPENID_PATTERN = "{0}?access_token={1}&unionid={2}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(QQ_ACCESS_TOKEN_PATTERN, AuthSource.QQ.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(QQ_USER_INFO_PATTERN, AuthSource.QQ.userInfo(), userInfoEntity.getClientId(), userInfoEntity.getAccessToken(), userInfoEntity.getOpenId()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(QQ_AUTHORIZE_PATTERN, AuthSource.QQ.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getOpenIdUrl(String accessToken, boolean unionid) { - return MessageFormat.format(QQ_OPENID_PATTERN, "https://graph.qq.com/oauth2.0/me", accessToken, unionid ? 1 : 0); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java deleted file mode 100644 index 6417f11..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java +++ /dev/null @@ -1,49 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -import static me.zhyd.oauth.config.AuthSource.RENREN; - -/** - * 人人网相关的URL构建类 - * - * @author hongwei.peng (pengisgood(at)gmail(dot)com) - * @version 1.8.1 - * @since 1.8.1 - */ -public class AuthRenrenUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String RENREN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String RENREN_USER_INFO_PATTERN = "{0}?access_token={1}&userId={2}"; - private static final String RENREN_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - private static final String RENREN_REFRESH_PATTERN = "{0}?refresh_token={1}&client_id={2}&client_secret={3}&grant_type=refresh_token"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(RENREN_ACCESS_TOKEN_PATTERN, RENREN.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(RENREN_USER_INFO_PATTERN, RENREN.userInfo(), userInfoEntity.getAccessToken(), userInfoEntity.getOpenId()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(RENREN_AUTHORIZE_PATTERN, RENREN.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - return MessageFormat.format(RENREN_REFRESH_PATTERN, RENREN.refresh(), refreshToken, config.getClientId(), config.getClientSecret()); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.UNSUPPORTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java deleted file mode 100644 index f4a8cff..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java +++ /dev/null @@ -1,46 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * 淘宝相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthTaobaoUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String TAOBAO_AUTHORIZE_PATTERN = "{0}?response_type=code&client_id={1}&redirect_uri={2}&state={3}&view=web"; - private static final String TAOBAO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(TAOBAO_ACCESS_TOKEN_PATTERN, AuthSource.TAOBAO.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(TAOBAO_AUTHORIZE_PATTERN, AuthSource.TAOBAO.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java deleted file mode 100644 index 7ab6ca5..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java +++ /dev/null @@ -1,43 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @website https://www.zhyd.me - * @date 2019/7/16 22:22 - * @since 1.8 - */ -public class AuthTeambitionUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String TEAMBITION_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code"; - - @Override - public String getAccessTokenUrl(String code) { - return AuthSource.TEAMBITION.accessToken(); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return AuthSource.TEAMBITION.userInfo(); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(TEAMBITION_AUTHORIZE_PATTERN, AuthSource.TEAMBITION.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - return AuthSource.TEAMBITION.refresh(); - } - - @Override - public String getRevokeUrl(String accessToken) { - return null; - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java deleted file mode 100644 index 96c0379..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * 今日头条相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthTencentCloudUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String TENCENT_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; - private static final String TENCENT_USER_INFO_PATTERN = "{0}?access_token={1}"; - private static final String TENCENT_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(TENCENT_ACCESS_TOKEN_PATTERN, AuthSource.TENCENT_CLOUD.accessToken(), config.getClientId(), config.getClientSecret(), code); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(TENCENT_USER_INFO_PATTERN, AuthSource.TENCENT_CLOUD.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(TENCENT_AUTHORIZE_PATTERN, AuthSource.TENCENT_CLOUD.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java deleted file mode 100644 index 595b7d8..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * 今日头条相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthToutiaoUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String TOUTIAO_ACCESS_TOKEN_PATTERN = "{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorize_code"; - private static final String TOUTIAO_USER_INFO_PATTERN = "{0}?client_key={1}&access_token={2}"; - private static final String TOUTIAO_AUTHORIZE_PATTERN = "{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&auth_only=1&display=0"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(TOUTIAO_ACCESS_TOKEN_PATTERN, AuthSource.TOUTIAO.accessToken(), config.getClientId(), config.getClientSecret(), code); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(TOUTIAO_USER_INFO_PATTERN, AuthSource.TOUTIAO.userInfo(), userInfoEntity.getClientId(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(TOUTIAO_AUTHORIZE_PATTERN, AuthSource.TOUTIAO.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java deleted file mode 100644 index 0b513a5..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * 微信相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthWechatUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String WECHAT_AUTHORIZE_PATTERN = "{0}?appid={1}&redirect_uri={2}&response_type=code&scope=snsapi_login&state={3}#wechat_redirect"; - private static final String WECHAT_ACCESS_TOKEN_PATTERN = "{0}?appid={1}&secret={2}&code={3}&grant_type=authorization_code"; - private static final String WECHAT_REFRESH_TOKEN_PATTERN = "{0}?appid={1}&grant_type=refresh_token&refresh_token={2}"; - private static final String WECHAT_USER_INFO_PATTERN = "{0}?access_token={1}&openid={2}&lang=zh_CN"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(WECHAT_ACCESS_TOKEN_PATTERN, AuthSource.WECHAT.accessToken(), config.getClientId(), config.getClientSecret(), code); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(WECHAT_USER_INFO_PATTERN, AuthSource.WECHAT.userInfo(), userInfoEntity.getAccessToken(), userInfoEntity.getOpenId()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(WECHAT_AUTHORIZE_PATTERN, AuthSource.WECHAT.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - return MessageFormat.format(WECHAT_REFRESH_TOKEN_PATTERN, AuthSource.WECHAT.refresh(), config.getClientId(), refreshToken); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java deleted file mode 100644 index 5da4aa1..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -/** - * 微博相关的URL构建类 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public class AuthWeiboUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String WEIBO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"; - private static final String WEIBO_USER_INFO_PATTERN = "{0}?{1}"; - private static final String WEIBO_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(WEIBO_ACCESS_TOKEN_PATTERN, AuthSource.WEIBO.accessToken(), config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(WEIBO_USER_INFO_PATTERN, AuthSource.WEIBO.userInfo(), userInfoEntity.getExtra()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(WEIBO_AUTHORIZE_PATTERN, AuthSource.WEIBO.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.NOT_IMPLEMENTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java b/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java deleted file mode 100644 index 54fb17e..0000000 --- a/src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java +++ /dev/null @@ -1,38 +0,0 @@ -package me.zhyd.oauth.url.entity; - -import lombok.Builder; -import lombok.Getter; - -/** - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -@Getter -@Builder -public class AuthUserInfoEntity { - /** - * 授权返回的token - */ - private String accessToken; - /** - * 用户openId - */ - private String openId; - /** - * client key - */ - private String clientId; - /** - * 额外的属性 - */ - private String extra; - /** - * 额外的属性 - */ - private String signature; - /** - * 额外的属性 - */ - private String timestamp; -} diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java index 4757da2..34a48bd 100644 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -1,6 +1,7 @@ package me.zhyd.oauth.utils; import cn.hutool.core.lang.Assert; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import lombok.Data; @@ -12,7 +13,7 @@ import java.util.Map; * 构造URL *

* - * @author yangkai.shen + * @author yangkai.shen (https://xkcoding.com) * @date Created in 2019-07-18 15:47 */ @Data @@ -63,6 +64,9 @@ public class UrlBuilder { * @return url */ public String build(boolean encode) { + if (MapUtil.isEmpty(this.params)) { + return this.baseUrl; + } String baseUrl = StrUtil.addSuffixIfNot(this.baseUrl, "?"); String paramString = GlobalAuthUtil.parseMapToString(this.params, encode); return baseUrl + paramString; diff --git a/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java b/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java index 778a204..763ee29 100644 --- a/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java +++ b/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java @@ -11,7 +11,7 @@ import org.junit.Test; * UrlBuilder测试类 *

* - * @author yangkai.shen + * @author yangkai.shen (https://xkcoding.com) * @date Created in 2019-07-18 16:36 */ public class UrlBuilderTest { @@ -22,15 +22,13 @@ public class UrlBuilderTest { config.setClientSecret("secret-110110110"); config.setRedirectUri("https://xkcoding.com"); config.setState(AuthState.create(AuthSource.WECHAT)); - // @formatter:off String build = UrlBuilder.fromBaseUrl(AuthSource.WECHAT.authorize()) - .queryParam("appid", config.getClientId()) - .queryParam("redirect_uri", config.getRedirectUri()) - .queryParam("response_type", "code") - .queryParam("scope", "snsapi_login") - .queryParam("state", config.getState().concat("#wechat_redirect")) - .build(false); - // @formatter:on + .queryParam("appid", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("response_type", "code") + .queryParam("scope", "snsapi_login") + .queryParam("state", config.getState().concat("#wechat_redirect")) + .build(false); AuthWeChatRequest request = new AuthWeChatRequest(config); String authorize = request.authorize(); Assert.assertEquals(build, authorize); From 9aa693d2da6a19f52980d58afbd7c8afa033eee9 Mon Sep 17 00:00:00 2001 From: Hongwei Peng Date: Thu, 18 Jul 2019 21:06:03 +0800 Subject: [PATCH 36/44] add refresh token method --- .../zhyd/oauth/request/AuthRenrenRequest.java | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java index dc74e89..8468958 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; @@ -16,6 +17,7 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity; import java.util.Objects; import static me.zhyd.oauth.config.AuthSource.RENREN; +import static me.zhyd.oauth.model.AuthResponseStatus.SUCCESS; /** * 人人登录 @@ -32,26 +34,14 @@ public class AuthRenrenRequest extends AuthDefaultRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); - JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - if (!response.isOk()) { - throw new AuthException("Unable to get token from renren using code [" + authCallback.getCode() + "]: " + accessTokenObject); - } - - return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .openId(accessTokenObject.getJSONObject("user").getString("id")) - .build(); + return getToken(this.urlBuilder.getAccessTokenUrl(authCallback.getCode())); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() .openId(authToken.getOpenId()) - .accessToken(accessToken) + .accessToken(authToken.getAccessToken()) .build())).execute(); JSONObject userObj = JSONObject.parseObject(response.body()).getJSONObject("response"); @@ -66,6 +56,30 @@ public class AuthRenrenRequest extends AuthDefaultRequest { .build(); } + @Override + public AuthResponse refresh(AuthToken authToken) { + return AuthResponse.builder() + .code(SUCCESS.getCode()) + .data(getToken(this.urlBuilder.getRefreshUrl(authToken.getRefreshToken()))) + .build(); + } + + private AuthToken getToken(String url) { + HttpResponse response = HttpRequest.post(url).execute(); + JSONObject jsonObject = JSONObject.parseObject(response.body()); + if (!response.isOk()) { + throw new AuthException("Failed to get token from Renren: " + jsonObject); + } + + return AuthToken.builder() + .tokenType(jsonObject.getString("token_type")) + .expireIn(jsonObject.getIntValue("expires_in")) + .accessToken(jsonObject.getString("access_token")) + .refreshToken(jsonObject.getString("refresh_token")) + .openId(jsonObject.getJSONObject("user").getString("id")) + .build(); + } + private String getAvatarUrl(JSONObject userObj) { JSONArray jsonArray = userObj.getJSONArray("avatar"); if (Objects.isNull(jsonArray) || jsonArray.isEmpty()) { From d1d7587f4ed7766ac915402480d05c74a89f2474 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 21:55:23 +0800 Subject: [PATCH 37/44] :twisted_rightwards_arrows: merge --- .../oauth/request/AuthPinterestRequest.java | 16 +++---- .../zhyd/oauth/request/AuthRenrenRequest.java | 13 ++--- .../request/AuthStackOverflowRequest.java | 16 +++---- .../oauth/url/AuthPinterestUrlBuilder.java | 48 ------------------- .../url/AuthStackOverflowUrlBuilder.java | 48 ------------------- .../java/me/zhyd/oauth/utils/UrlBuilder.java | 10 ++-- 6 files changed, 26 insertions(+), 125 deletions(-) delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthPinterestUrlBuilder.java delete mode 100644 src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java diff --git a/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java index f6bdcb7..ce00122 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java @@ -9,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthPinterestUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; import java.util.Objects; @@ -26,13 +25,12 @@ import static me.zhyd.oauth.config.AuthSource.PINTEREST; public class AuthPinterestRequest extends AuthDefaultRequest { public AuthPinterestRequest(AuthConfig config) { - super(config, PINTEREST, new AuthPinterestUrlBuilder()); + super(config, PINTEREST); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); - HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); + HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); if (!response.isOk()) { throw new AuthException("Unable to get token from Pinterest using code [" + authCallback.getCode() + "]: " + accessTokenObject); @@ -46,10 +44,10 @@ public class AuthPinterestRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + String userinfoUrl = UrlBuilder.fromBaseUrl(userInfoUrl(authToken)) + .queryParam("fields", "id,username,first_name,last_name,bio,image") + .build(); + HttpResponse response = HttpRequest.post(userinfoUrl).execute(); JSONObject userObj = JSONObject.parseObject(response.body()).getJSONObject("data"); return AuthUser.builder() diff --git a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java index 616b786..eb541cc 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java @@ -1,15 +1,12 @@ package me.zhyd.oauth.request; +import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthResponse; -import me.zhyd.oauth.model.AuthToken; -import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.model.*; import me.zhyd.oauth.utils.UrlBuilder; import java.util.Objects; @@ -32,14 +29,12 @@ public class AuthRenrenRequest extends AuthDefaultRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - return getToken(this.urlBuilder.getAccessTokenUrl(authCallback.getCode())); + return this.getToken(accessTokenUrl(authCallback.getCode())); } @Override protected AuthUser getUserInfo(AuthToken authToken) { - HttpResponse response = doGetUserInfo(authToken); - JSONObject userObj = JSONObject.parseObject(response.body()).getJSONObject("response"); return AuthUser.builder() @@ -57,7 +52,7 @@ public class AuthRenrenRequest extends AuthDefaultRequest { public AuthResponse refresh(AuthToken authToken) { return AuthResponse.builder() .code(SUCCESS.getCode()) - .data(getToken(this.urlBuilder.getRefreshUrl(authToken.getRefreshToken()))) + .data(getToken(this.refreshTokenUrl(authToken.getRefreshToken()))) .build(); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java index be5c186..db9b3d7 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java @@ -9,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUserGender; -import me.zhyd.oauth.url.AuthStackOverflowUrlBuilder; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; +import me.zhyd.oauth.utils.UrlBuilder; import static me.zhyd.oauth.config.AuthSource.STACK_OVERFLOW; import static me.zhyd.oauth.utils.GlobalAuthUtil.parseQueryToMap; @@ -25,12 +24,12 @@ import static me.zhyd.oauth.utils.GlobalAuthUtil.parseQueryToMap; public class AuthStackOverflowRequest extends AuthDefaultRequest { public AuthStackOverflowRequest(AuthConfig config) { - super(config, STACK_OVERFLOW, new AuthStackOverflowUrlBuilder()); + super(config, STACK_OVERFLOW); } @Override protected AuthToken getAccessToken(AuthCallback authCallback) { - String accessTokenUrl = this.urlBuilder.getAccessTokenUrl(authCallback.getCode()); + String accessTokenUrl = accessTokenUrl(authCallback.getCode()); HttpResponse response = HttpRequest.post(accessTokenUrl) .contentType("application/x-www-form-urlencoded") .form(parseQueryToMap(accessTokenUrl)) @@ -48,10 +47,11 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(this.urlBuilder.getUserInfoUrl(AuthUserInfoEntity.builder() - .accessToken(accessToken) - .build())).execute(); + String userInfoUrl = UrlBuilder.fromBaseUrl(userInfoUrl(authToken)) + .queryParam("site", "stackoverflow") + .queryParam("key", this.config.getStackOverflowKey()) + .build(); + HttpResponse response = HttpRequest.get(userInfoUrl).execute(); JSONObject userObj = JSONObject.parseObject(response.body()).getJSONArray("items").getJSONObject(0); return AuthUser.builder() diff --git a/src/main/java/me/zhyd/oauth/url/AuthPinterestUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthPinterestUrlBuilder.java deleted file mode 100644 index c321479..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthPinterestUrlBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -import static me.zhyd.oauth.config.AuthSource.PINTEREST; - -/** - * Pinterest相关的URL构建类 - * - * @author hongwei.peng (pengisgood(at)gmail(dot)com) - * @version 1.9.0 - * @since 1.9.0 - */ -public class AuthPinterestUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String PINTEREST_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"; - private static final String PINTEREST_USER_INFO_PATTERN = "{0}?access_token={1}&fields=id,username,first_name,last_name,bio,image"; - private static final String PINTEREST_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}&scope=read_public"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(PINTEREST_ACCESS_TOKEN_PATTERN, PINTEREST.accessToken(), config.getClientId(), config.getClientSecret(), code); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(PINTEREST_USER_INFO_PATTERN, PINTEREST.userInfo(), userInfoEntity.getAccessToken()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(PINTEREST_AUTHORIZE_PATTERN, PINTEREST.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.UNSUPPORTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.UNSUPPORTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java b/src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java deleted file mode 100644 index 1498e98..0000000 --- a/src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.zhyd.oauth.url; - -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthResponseStatus; -import me.zhyd.oauth.url.entity.AuthUserInfoEntity; - -import java.text.MessageFormat; - -import static me.zhyd.oauth.config.AuthSource.STACK_OVERFLOW; - -/** - * Stack Overflow相关的URL构建类 - * - * @author hongwei.peng (pengisgood(at)gmail(dot)com) - * @version 1.9.0 - * @since 1.9.0 - */ -public class AuthStackOverflowUrlBuilder extends AuthDefaultUrlBuilder { - - private static final String SO_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&redirect_uri={3}&code={4}"; - private static final String SO_USER_INFO_PATTERN = "{0}?access_token={1}&site=stackoverflow&key={2}"; - private static final String SO_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"; - - @Override - public String getAccessTokenUrl(String code) { - return MessageFormat.format(SO_ACCESS_TOKEN_PATTERN, STACK_OVERFLOW.accessToken(), config.getClientId(), config.getClientSecret(), config.getRedirectUri(), code); - } - - @Override - public String getUserInfoUrl(AuthUserInfoEntity userInfoEntity) { - return MessageFormat.format(SO_USER_INFO_PATTERN, STACK_OVERFLOW.userInfo(), userInfoEntity.getAccessToken(), config.getStackOverflowKey()); - } - - @Override - public String getAuthorizeUrl() { - return MessageFormat.format(SO_AUTHORIZE_PATTERN, STACK_OVERFLOW.authorize(), config.getClientId(), config.getRedirectUri(), this.getRealState(config.getState())); - } - - @Override - public String getRefreshUrl(String refreshToken) { - throw new AuthException(AuthResponseStatus.UNSUPPORTED); - } - - @Override - public String getRevokeUrl(String accessToken) { - throw new AuthException(AuthResponseStatus.UNSUPPORTED); - } -} diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java index 34a48bd..11fb1c4 100644 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -3,7 +3,7 @@ package me.zhyd.oauth.utils; import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; -import lombok.Data; +import lombok.Setter; import java.util.LinkedHashMap; import java.util.Map; @@ -16,11 +16,15 @@ import java.util.Map; * @author yangkai.shen (https://xkcoding.com) * @date Created in 2019-07-18 15:47 */ -@Data +@Setter public class UrlBuilder { - private String baseUrl; private final Map params = new LinkedHashMap<>(4); + private String baseUrl; + + private UrlBuilder() { + + } /** * @param baseUrl 基础路径 From f2fb9428081fd088a1745f407af2f8161a30342a Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 21:57:29 +0800 Subject: [PATCH 38/44] =?UTF-8?q?:beers:=20=E9=86=89=E9=85=92=E5=86=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/utils/UrlBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java index 11fb1c4..de27091 100644 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -19,7 +19,7 @@ import java.util.Map; @Setter public class UrlBuilder { - private final Map params = new LinkedHashMap<>(4); + private final Map params = new LinkedHashMap<>(7); private String baseUrl; private UrlBuilder() { From 188e98c0f2f4674aa72f2e33eda510aff59a0829 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 21:59:05 +0800 Subject: [PATCH 39/44] =?UTF-8?q?:beers:=20=E9=86=89=E9=85=92=E5=86=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/utils/UrlBuilder.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java index de27091..f34be27 100644 --- a/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java +++ b/src/main/java/me/zhyd/oauth/utils/UrlBuilder.java @@ -15,6 +15,8 @@ import java.util.Map; * * @author yangkai.shen (https://xkcoding.com) * @date Created in 2019-07-18 15:47 + * @version 1.0 + * @since 1.8 */ @Setter public class UrlBuilder { From d7d87c7f044a718d8b04e4fcd2627334d1bbc7a7 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 22:42:14 +0800 Subject: [PATCH 40/44] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20example.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/example.md b/example.md index 02e2022..2d60551 100644 --- a/example.md +++ b/example.md @@ -70,7 +70,7 @@ _注:非全部平台,部分平台可能不存在图例_ #### 授权微软 -暂无 +![授权微软](https://images.gitee.com/uploads/images/2019/0718/224146_681aa535_784199.png "授权微软") #### 授权小米 @@ -80,6 +80,10 @@ _注:非全部平台,部分平台可能不存在图例_ 暂无 +#### 授权Teambition + +![授权Teambition](https://images.gitee.com/uploads/images/2019/0718/224119_3da514ab_784199.png "授权Teambition") + #### 授权Pinterest ![授权Pinterest](https://images.gitee.com/uploads/images/2019/0718/155012_6290f500_784199.jpeg "授权Pinterest") From 6505df15a7e536fab1274b79821e0ec41d4bbd94 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 22:48:23 +0800 Subject: [PATCH 41/44] =?UTF-8?q?:beers:=20=E8=B0=83=E6=95=B4=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java | 8 +++++++- .../java/me/zhyd/oauth/request/AuthGithubRequest.java | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index 409b516..41a6c37 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -30,7 +30,13 @@ public class AuthGiteeRequest extends AuthDefaultRequest { if (accessTokenObject.containsKey("error")) { throw new AuthException("Unable to get token from gitee using code [" + authCallback.getCode() + "]: " + accessTokenObject); } - return AuthToken.builder().accessToken(accessTokenObject.getString("access_token")).build(); + return AuthToken.builder() + .accessToken(accessTokenObject.getString("access_token")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .scope(accessTokenObject.getString("scope")) + .tokenType(accessTokenObject.getString("token_type")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .build(); } @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java index 7763f40..1123bea 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java @@ -33,7 +33,11 @@ public class AuthGithubRequest extends AuthDefaultRequest { if (res.containsKey("error")) { throw new AuthException(res.get("error") + ":" + res.get("error_description")); } - return AuthToken.builder().accessToken(res.get("access_token")).build(); + return AuthToken.builder() + .accessToken(res.get("access_token")) + .scope(res.get("scope")) + .tokenType(res.get("token_type")) + .build(); } @Override From f815f12acce6dd96ff6814f0be8af55a9399a092 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Thu, 18 Jul 2019 23:41:34 +0800 Subject: [PATCH 42/44] =?UTF-8?q?:beers:=20=E8=B0=83=E6=95=B4=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../zhyd/oauth/request/AuthPinterestRequest.java | 11 +++++++++++ .../oauth/request/AuthStackOverflowRequest.java | 14 +++++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b39e7bb..d330815 100644 --- a/README.md +++ b/README.md @@ -131,7 +131,7 @@ authRequest.login(callback); | | [AuthTeambitionRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java) | 参考文档 | | | [AuthRenrenRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java) | 参考文档 | | | [AuthPinterestRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java) | 参考文档 | -| | [AuthStackOverflowRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java) | 参考文档 | +| | [AuthStackOverflowRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java) | 参考文档 | | | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 无 | _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ diff --git a/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java index ce00122..d9725e2 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java @@ -71,4 +71,15 @@ public class AuthPinterestRequest extends AuthDefaultRequest { return jsonObject.getJSONObject("60x60").getString("url"); } + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .queryParam("scope", "read_public") + .build(); + } + } diff --git a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java index db9b3d7..d30392a 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java @@ -47,7 +47,8 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { - String userInfoUrl = UrlBuilder.fromBaseUrl(userInfoUrl(authToken)) + String userInfoUrl = UrlBuilder.fromBaseUrl(this.source.userInfo()) + .queryParam("access_token", authToken.getAccessToken()) .queryParam("site", "stackoverflow") .queryParam("key", this.config.getStackOverflowKey()) .build(); @@ -65,4 +66,15 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest { .source(STACK_OVERFLOW) .build(); } + + @Override + public String authorize() { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("client_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(config.getState())) + .queryParam("scope", "read_inbox") + .build(); + } } From 81691a34629fe84687d28f82b442da05f7fbe6db Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Fri, 19 Jul 2019 14:26:42 +0800 Subject: [PATCH 43/44] =?UTF-8?q?:beers:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhyd/oauth/config/AuthConfig.java | 6 +- .../java/me/zhyd/oauth/config/AuthSource.java | 5 + .../zhyd/oauth/enums/AuthBaiduErrorCode.java | 62 --- .../oauth/enums/AuthDingTalkErrorCode.java | 404 ------------------ .../oauth/enums/AuthToutiaoErrorCode.java | 18 +- .../{model => enums}/AuthUserGender.java | 20 +- .../me/zhyd/oauth/model/AuthResponse.java | 1 - .../zhyd/oauth/model/AuthResponseStatus.java | 18 +- .../java/me/zhyd/oauth/model/AuthUser.java | 2 +- .../zhyd/oauth/request/AuthAlipayRequest.java | 2 +- .../zhyd/oauth/request/AuthBaiduRequest.java | 51 ++- .../zhyd/oauth/request/AuthCodingRequest.java | 3 +- .../zhyd/oauth/request/AuthCsdnRequest.java | 2 +- .../oauth/request/AuthDefaultRequest.java | 29 ++ .../oauth/request/AuthDingTalkRequest.java | 11 +- .../zhyd/oauth/request/AuthDouyinRequest.java | 1 + .../oauth/request/AuthFacebookRequest.java | 2 +- .../zhyd/oauth/request/AuthGiteeRequest.java | 2 +- .../zhyd/oauth/request/AuthGithubRequest.java | 2 +- .../zhyd/oauth/request/AuthGoogleRequest.java | 2 +- .../oauth/request/AuthLinkedinRequest.java | 1 + .../me/zhyd/oauth/request/AuthMiRequest.java | 1 + .../oauth/request/AuthMicrosoftRequest.java | 5 +- .../oauth/request/AuthOschinaRequest.java | 2 +- .../oauth/request/AuthPinterestRequest.java | 2 +- .../me/zhyd/oauth/request/AuthQqRequest.java | 2 +- .../zhyd/oauth/request/AuthRenrenRequest.java | 1 + .../request/AuthStackOverflowRequest.java | 2 +- .../zhyd/oauth/request/AuthTaobaoRequest.java | 2 +- .../oauth/request/AuthTeambitionRequest.java | 1 + .../request/AuthTencentCloudRequest.java | 2 +- .../oauth/request/AuthToutiaoRequest.java | 2 +- .../zhyd/oauth/request/AuthWeChatRequest.java | 1 + .../zhyd/oauth/request/AuthWeiboRequest.java | 2 +- update.md | 16 +- 35 files changed, 129 insertions(+), 556 deletions(-) delete mode 100644 src/main/java/me/zhyd/oauth/enums/AuthBaiduErrorCode.java delete mode 100644 src/main/java/me/zhyd/oauth/enums/AuthDingTalkErrorCode.java rename src/main/java/me/zhyd/oauth/{model => enums}/AuthUserGender.java (75%) diff --git a/src/main/java/me/zhyd/oauth/config/AuthConfig.java b/src/main/java/me/zhyd/oauth/config/AuthConfig.java index 57b9656..2e65bcd 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthConfig.java +++ b/src/main/java/me/zhyd/oauth/config/AuthConfig.java @@ -1,6 +1,7 @@ package me.zhyd.oauth.config; -import lombok.*; +import lombok.Builder; +import lombok.Getter; /** * JustAuth配置类 @@ -9,11 +10,8 @@ import lombok.*; * @version 1.0 * @since 1.8 */ -@Setter @Getter @Builder -@NoArgsConstructor -@AllArgsConstructor public class AuthConfig { /** diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index 159ce0e..75eef7a 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -110,6 +110,11 @@ public enum AuthSource { public String revoke() { return "https://openapi.baidu.com/rest/2.0/passport/auth/revokeAuthorization"; } + + @Override + public String refresh() { + return "https://openapi.baidu.com/oauth/2.0/token"; + } }, /** * csdn diff --git a/src/main/java/me/zhyd/oauth/enums/AuthBaiduErrorCode.java b/src/main/java/me/zhyd/oauth/enums/AuthBaiduErrorCode.java deleted file mode 100644 index 0fb6f7a..0000000 --- a/src/main/java/me/zhyd/oauth/enums/AuthBaiduErrorCode.java +++ /dev/null @@ -1,62 +0,0 @@ -package me.zhyd.oauth.enums; - -import me.zhyd.oauth.utils.StringUtils; - -/** - * 百度授权登录时的异常状态码 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public enum AuthBaiduErrorCode { - OK("ok", "ok", "ok"), - INVALID_REQUEST("invalid_request", "invalid refresh token", "请求缺少某个必需参数,包含一个不支持的参数或参数值,或者格式不正确。"), - INVALID_CLIENT("invalid_client", "unknown client id", "client_id”、“client_secret”参数无效。"), - INVALID_GRANT("invalid_grant", "The provided authorization grant is revoked", "提供的Access Grant是无效的、过期的或已撤销的,例如,Authorization Code无效(一个授权码只能使用一次)、Refresh Token无效、redirect_uri与获取Authorization Code时提供的不一致、Devie Code无效(一个设备授权码只能使用一次)等。"), - UNAUTHORIZED_CLIENT("unauthorized_client", "The client is not authorized to use this authorization grant type", "应用没有被授权,无法使用所指定的grant_type。"), - UNSUPPORTED_GRANT_TYPE("unsupported_grant_type", "The authorization grant type is not supported", "“grant_type”百度OAuth2.0服务不支持该参数。"), - INVALID_SCOPE("invalid_scope", "The requested scope is exceeds the scope granted by the resource owner", "请求的“scope”参数是无效的、未知的、格式不正确的、或所请求的权限范围超过了数据拥有者所授予的权限范围。"), - EXPIRED_TOKEN("expired_token", "refresh token has been used", "提供的Refresh Token已过期"), - REDIRECT_URI_MISMATCH("redirect_uri_mismatch", "Invalid redirect uri", "“redirect_uri”所在的根域与开发者注册应用时所填写的根域名不匹配。"), - UNSUPPORTED_RESPONSE_TYPE("unsupported_response_type", "The response type is not supported", "“response_type”参数值不为百度OAuth2.0服务所支持,或者应用已经主动禁用了对应的授权模式"), - SLOW_DOWN("slow_down", "The device is polling too frequently", "Device Flow中,设备通过Device Code换取Access Token的接口过于频繁,两次尝试的间隔应大于5秒。"), - AUTHORIZATION_PENDING("authorization_pending", "User has not yet completed the authorization", "Device Flow中,用户还没有对Device Code完成授权操作。"), - AUTHORIZATION_DECLINED("authorization_declined", "User has declined the authorization", "Device Flow中,用户拒绝了对Device Code的授权操作。"), - INVALID_REFERER("invalid_referer", "Invalid Referer", "Implicit Grant模式中,浏览器请求的Referer与根域名绑定不匹配"); - - private String code; - private String msg; - private String desc; - - AuthBaiduErrorCode(String code, String msg, String desc) { - this.code = code; - this.msg = msg; - this.desc = desc; - } - - public static AuthBaiduErrorCode getErrorCode(String code) { - if (StringUtils.isEmpty(code)) { - return OK; - } - AuthBaiduErrorCode[] errorCodes = AuthBaiduErrorCode.values(); - for (AuthBaiduErrorCode errorCode : errorCodes) { - if (code.equalsIgnoreCase(errorCode.getCode())) { - return errorCode; - } - } - return OK; - } - - public String getCode() { - return code; - } - - public String getMsg() { - return msg; - } - - public String getDesc() { - return desc; - } -} diff --git a/src/main/java/me/zhyd/oauth/enums/AuthDingTalkErrorCode.java b/src/main/java/me/zhyd/oauth/enums/AuthDingTalkErrorCode.java deleted file mode 100644 index fb593d2..0000000 --- a/src/main/java/me/zhyd/oauth/enums/AuthDingTalkErrorCode.java +++ /dev/null @@ -1,404 +0,0 @@ -package me.zhyd.oauth.enums; - -/** - * 钉钉授权登录时的异常状态码 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @since 1.8 - */ -public enum AuthDingTalkErrorCode { - EC1_MINUS(-1, "系统繁忙", "服务器暂不可用,建议稍候再重试1次,最多重试3次"), - EC0(0, "请求成功", "接口调用成功"), - EC404(404, "请求的URI地址不存在", "地址不存在,检查下url是否和文档里写的一致"), - EC33001(33001, "无效的企业ID", "请确认下access_token是否正确"), - EC33002(33002, "无效的微应用的名称", "校验下微应用的名称字段,不能为空且长度不能超过10个字符"), - EC33003(33003, "无效的微应用的描述", "校验下微应用的描述字段,不能为空且长度不能超过20个字符"), - EC33004(33004, "无效的微应用的ICON", "校验下微应用的icon字段,不能为空且确保图标存在"), - EC33005(33005, "无效的微应用的移动端主页", "校验下微应用的移动端主页,不能为空且必须以http开头或https开头"), - EC33006(33006, "无效的微应用的PC端主页", "校验下微应用的PC端主页,必须以http开头或https开头"), - EC33007(33007, "微应用的移动端的主页与PC端主页不同", "校验下微应用的PC端主页,确保它和移动端主页的域名保持一致"), - EC33008(33008, "无效的微应用OA后台的主页", "校验下微应用的后台管理的主页失败,必须以http开头或https开头"), - EC34001(34001, "无效的会话id", "检查下所传的chatId字段是否为空"), - EC34002(34002, "无效的会话消息的发送者", "检查下sender字段是否为空"), - EC34003(34003, "无效的会话消息的发送者的企业Id", "检查下发送者的企业Id"), - EC34004(34004, "无效的会话消息的类型", "检查下msgtype字段,是否为空,是否是定义的那几种类型"), - EC34005(34005, "无效的会话音频消息的播放时间", "该错误码已废弃"), - EC34006(34006, "发送者不在企业中", "检查下发送者是否在企业中"), - EC34007(34007, "发送者不在会话中", "检查下发送者是否在会话id中"), - EC34008(34008, "图片不能为空", "如果发的是图片消息,检查下图片是否为空"), - EC34009(34009, "链接内容不能为空", "检查下messageUrl字段是否为空"), - EC34010(34010, "文件不能为空", "检查下media_id字段是否为空"), - EC34011(34011, "音频文件不能为空", "检查下media_id字段是否为空"), - EC34012(34012, "找不到发送者的企业", "检查下发送者是否是真实的"), - EC34013(34013, "找不到群会话对象", "检查下chatid是否真实存在"), - EC34014(34014, "会话消息的json结构无效或不完整", "检查下消息的json格式是否正确,json的key对应msgtype的value值"), - EC34015(34015, "发送群会话消息失败", "消息发送失败,建议稍后再重试下"), - EC34016(34016, "消息内容长度超过限制", "检查下消息的content字段长度是否超过5000,title字段长度是否超过64,markdown字段长度是否超过5000,single_title字段长度是否超过20,single_url字段长度是否超过500,btn_json_list字段长度是否超过1000"), - EC40001(40001, "获取access_token时Secret错误,或者access_token无效", "检查下access_token是否正确"), - EC40002(40002, "不合法的凭证类型", "无"), - EC40003(40003, "不合法的UserID", "确保该id在通讯录中存在,且是在你所传access_token对应的企业里"), - EC40004(40004, "不合法的媒体文件类型", "检查下type字段,只支持image,voice,file"), - EC40005(40005, "不合法的文件类型", "如果是文件类型,检查下是否是支持的那几种,目前只支持doc,docx,xls,xlsx,ppt,pptx,zip,pdf,rar"), - EC40006(40006, "不合法的文件大小", "检查下文件大小,image类型最大1MB,file类型最大10MB,voice类型最大2MB"), - EC40007(40007, "不合法的媒体文件id", "检查下mediaId是否为空,是否真实存在"), - EC40008(40008, "不合法的消息类型", "检查下msgtype是否为空,确保它在开放平台定义的几种类型里,具体见消息类型及格式"), - EC40009(40009, "不合法的部门id", "检查下部门id是否为空,是否为数字且大于0"), - EC40010(40010, "不合法的父部门id", "检查下父部门id是否为一个数字"), - EC40011(40011, "不合法的排序order", "检查下order字段是否为空,是否为数字且大于0"), - EC40012(40012, "不合法的发送者", "检查下sender字段是否为空,是否真实存在"), - EC40013(40013, "不合法的corpid", "检查下corpid是否有效"), - EC40014(40014, "不合法的access_token", "检查下access_token是否正确,注意access_token这个参数应该是带在url后面的"), - EC40015(40015, "发送者不在会话中", "检查下sender字段和cid字段是否能对应上"), - EC40016(40016, "不合法的会话ID", "检查下cid字段是否为空,是否有效"), - EC40017(40017, "在会话中没有找到与发送者在同一企业的人", "cid对应的消息接收者为空,检查下cid字段"), - EC40018(40018, "不允许以递归方式查询部门用户列表", "检查下fetchChild字段,目前不支持递归查询"), - EC40019(40019, "该手机号码对应的用户最多可以加入5个非认证企业", "无"), - EC40020(40020, "当前团队人数已经达到上限,用电脑登录钉钉企业管理后台,升级成为认证企业", "无"), - EC40021(40021, "更换的号码已注册过钉钉,无法使用该号码", "无"), - EC40022(40022, "企业中的手机号码和登录钉钉的手机号码不一致,暂时不支持修改用户信息,可以删除后重新添加", "无"), - EC40023(40023, "部门人数达到上限", "部门人数不能超过1000"), - EC40024(40024, "(安全校验不通过)保存失败,团队人数超限。请在手机钉钉绑定支付宝完成实名认证,或者申请企业认证,人数上限自动扩充", "无"), - EC40025(40025, "无效的部门JSONArray对象,合法格式需要用中括号括起来,且如果属于多部门,部门id需要用逗号分隔", "无"), - EC40029(40029, "不合法的oauth_code", "无"), - EC40031(40031, "不合法的UserID列表", "指定的UserID列表,至少存在一个UserID不在通讯录中"), - EC40032(40032, "不合法的UserID列表长度", "检查下列表是否为空,且长度合适。创建部门接口的userPerimits最多接收10000个"), - EC40033(40033, "不合法的请求字符,不能包含\\uxxxx格式的字符", "无"), - EC40035(40035, "不合法的参数", "检查下有没有传请求参数,一般发生在http post形式的接口里,没有传参数"), - EC40038(40038, "不合法的请求格式", "检查下参数中是不是少了某个字段,具体参考各个文档的参数介绍"), - EC40039(40039, "不合法的URL长度", "无"), - EC40048(40048, "url中包含不合法domain", "发消息接口中消息url链接不安全"), - EC40055(40055, "不合法的agent结构", "已废弃"), - EC40056(40056, "不合法的agentid", "检查下agentid字段是否为空,是否真实存在"), - EC40057(40057, "不合法的callbackurl", "无"), - EC40061(40061, "设置应用头像失败", "无"), - EC40062(40062, "不合法的应用模式", "无"), - EC40063(40063, "不合法的分机号", "tel字段长度超长,长度不能超过50"), - EC40064(40064, "不合法的工作地址", "workPlace长度超长,长度不能超过50个字符"), - EC40065(40065, "不合法的备注", "remark长度超长,长度不能超过1024个字符"), - EC40066(40066, "不合法的部门列表", "部门id列表长度太长,不能超过10000,并且每个id必须是数字"), - EC40067(40067, "标题长度不合法", "检查下标题长度"), - EC40068(40068, "不合法的偏移量", "偏移量必须大于0"), - EC40069(40069, "不合法的分页大小", "分页大小不合法,具体参考每个接口的参数定义"), - EC40070(40070, "不合法的排序参数", "具体参考获取部门成员接口里面对order字段的定义"), - EC40073(40073, "不存在的openid", "openid不能为空"), - EC40077(40077, "不存在的预授权码", "无"), - EC40078(40078, "不存在的临时授权码", "临时授权码不能为空,且只能被使用一次"), - EC40079(40079, "不存在的授权信息", "检查下企业是否授权"), - EC40080(40080, "不合法的suitesecret", "无"), - EC40082(40082, "不合法的suitetoken", "检查下token"), - EC40083(40083, "不合法的suiteid", "suiteKey字段不合法"), - EC40084(40084, "不合法的永久授权码", "检查下永久授权码是否正确"), - EC40085(40085, "不存在的suiteticket", "检查下suiteticket是否正确,确保是由回调接口正确来接收suiteticket"), - EC40086(40086, "不合法的第三方应用appid", "appid字段不能为空"), - EC40087(40087, "创建永久授权码失败", "稍后再重试下,确保参数都传对"), - EC40088(40088, "不合法的套件key或secret", "稍后再重试下,确保suiteKey和suiteSecret都传对且一一对应"), - EC40089(40089, "不合法的corpid或corpsecret", "稍后再重试下,确保corpid和corpsecret字段传对且一一对应"), - EC40090(40090, "套件已经不存在", "检查下suiteKey字段是否正确"), - EC40091(40091, "用户授权码创建失败,需要用户重新授权", "创建永久授权码失败,需要用户重新授权产生临时授权码"), - EC40103(40103, "用户开启了账号保护,无法被加入到您的团队", "用户在钉钉“我的-设置-隐私”出开启了账号保护"), - EC40104(40104, "无效手机号", "检查手机号格式是否正确"), - EC41001(41001, "缺少access_token参数", "检查下access_token是否传了,注意该参数必须跟在请求url中"), - EC41002(41002, "缺少corpid参数", "检查下corpid是否为空"), - EC41003(41003, "缺少refresh_token参数", "检查下refresh_token是否为空"), - EC41004(41004, "缺少secret参数", "检查下secret参数是否为空"), - EC41005(41005, "缺少多媒体文件数据", "无"), - EC41006(41006, "缺少media_id参数", "检查下media_id参数是否为空"), - EC41007(41007, "无效的ssocode", "sso的永久授权code无效,检查下是否为空"), - EC41008(41008, "缺少oauth", "无"), - EC41009(41009, "缺少UserID", "检查下UserID是否为空"), - EC41010(41010, "缺少url", "检查下url是否为空"), - EC41011(41011, "缺少agentid", "检查下agentid是否为空"), - EC41012(41012, "缺少应用头像mediaid", "检查下mediaid是否为空"), - EC41013(41013, "缺少应用名字", "检查应用名字是否为空"), - EC41014(41014, "缺少应用描述", "检查应用描述是否为空"), - EC41015(41015, "缺少JSON参数", "检查JSON参数是否为空"), - EC41021(41021, "缺少suitekey", "检查suitekey参数是否为空"), - EC41022(41022, "缺少suitetoken", "检查suitetoken参数是否为空"), - EC41023(41023, "缺少suiteticket", "检查suiteticket参数是否为空"), - EC41024(41024, "缺少suitesecret", "检查suitesecret参数是否为空"), - EC41025(41025, "缺少permanent_code", "检查permanent_code永久授权码参数是否为空"), - EC41026(41026, "缺少tmp_auth_code", "检查tmp_auth_code临时授权码参数是否为空"), - EC41027(41027, "需要授权企业的corpid参数", "检查corpid参数是否为空"), - EC41028(41028, "禁止给全员发送消息", "检查是否有全员发送消息的权限,ISV没有该权限"), - EC41029(41029, "超过消息接收者人数上限", "发送OA消息人数超上限(企业消息人数上限:5000,ISV消息人数上限:1000)"), - EC41030(41030, "企业未对该套件授权", "检查该企业是否已经对该套件进行授权"), - EC41031(41031, "auth_corpid和permanent_code不匹配", "激活套件时使用的auth_corpid和permanent_code不匹配"), - EC41041(41041, "查询间隔时间太长", "考勤打卡数据查询间隔时间超过7天"), - EC41044(41044, "禁止发送消息", "检查是否有权限发送消息"), - EC41045(41045, "单应用全员消息/每天总量超限", "无"), - EC41046(41046, "超过发送全员消息的每分钟次数上限", "企业OA消息全员发送每天不能超过3次,ISV不能发送全员消息"), - EC41047(41047, "超过给该企业发消息的每分钟次数上限", "企业OA消息每分钟不能超过1500次,ISV OA消息每分钟不能超过200次"), - EC41048(41048, "超过给企业发消息的每分钟次数总上限", ""), - EC41049(41049, "包含违禁内容", "检查消息文本中是否有黄色、反动等词语"), - EC41050(41050, "无效的活动编码", "无"), - EC41051(41051, "活动权益的校验失败", "无"), - EC41100(41100, "时间参数不合法", "时间参数不能为空,且为“yyyy-MM-dd hh:mm:ss”格式"), - EC41101(41101, "数据内容过长", "请求体字符长度不能大于4096"), - EC41102(41102, "参数值过大", "上传文件或者idlist等参数过大"), - EC42001(42001, "access_token超时", "请检查网络状态"), - EC42002(42002, "refresh_token超时", "请检查网络状态"), - EC42003(42003, "oauth_code超时", "请检查网络状态"), - EC42007(42007, "预授权码失效", "请检查该预授权码是否已经使用过"), - EC42008(42008, "临时授权码失效", "请检查该临时授权码是否已经使用过或者是否不正确"), - EC42009(42009, "suitetoken失效", "请检查该suitetoken是否已经过期"), - EC43001(43001, "需要GET请求", "请检查http请求方式是否正确"), - EC43002(43002, "需要POST请求", "请检查http请求方式是否正确"), - EC43003(43003, "需要HTTPS", "请检查调用接口协议是否是https"), - EC43004(43004, "无效的HTTP HEADER Content-Type", "请检查请求头中的content-type是否正确"), - EC43005(43005, "需要Content-Type为application/json;charset=UTF-8", "请检查请求头中的content-type是否是“application/json;charset=UTF-8”"), - EC43007(43007, "需要授权", "该接口需要access_token才能调用"), - EC43008(43008, "参数需要multipart类型", "检查提交参数中的ENCTYPE是否是multipart类型"), - EC43009(43009, "post参数需要json类型", "请检查post参数数据是否是json类型"), - EC44001(44001, "多媒体文件为空", "请检查多媒体文件数据是否为空"), - EC44002(44002, "POST的数据包为空", "请检查POST的数据包是否为空"), - EC44003(44003, "图文消息内容为空", "请检查图文消息参数是否为空"), - EC44004(44004, "文本消息内容为空", "请检查文本消息参数是否为空"), - EC45001(45001, "多媒体文件大小超过限制", "无"), - EC45002(45002, "消息内容超过限制", "无"), - EC45003(45003, "标题字段超过限制", "无"), - EC45004(45004, "描述字段超过限制", "无"), - EC45005(45005, "链接字段超过限制", "无"), - EC45006(45006, "图片链接字段超过限制", "无"), - EC45007(45007, "语音播放时间超过限制", "无"), - EC45008(45008, "图文消息超过限制", "无"), - EC45009(45009, "接口调用超过限制", "无"), - EC45016(45016, "系统分组,不允许修改", "无"), - EC45017(45017, "分组名字过长", "无"), - EC45018(45018, "分组数量超过上限", "无"), - EC45024(45024, "账号数量超过上限", "无"), - EC46001(46001, "不存在媒体数据", "无"), - EC46004(46004, "不存在的员工", "无"), - EC47001(47001, "解析JSON/XML内容错误", "无"), - EC48002(48002, "Api禁用", "无"), - EC48003(48003, "suitetoken无效", "无"), - EC48004(48004, "授权关系无效", "无"), - EC49000(49000, "缺少chatid", "请检查参数中是否有chatid"), - EC49001(49001, "绑定的微应用超过个数限制", "绑定群会话和微应用超过5个"), - EC49002(49002, "一个群只能被一个ISV套件绑定一次", "无"), - EC49003(49003, "操作者必须为群主", "无"), - EC49004(49004, "添加成员列表和删除成员列表不能有交集", "无"), - EC49005(49005, "群人数超过人数限制", "无"), - EC49006(49006, "群成员列表必须包含群主", "无"), - EC49007(49007, "超过创建群的个数上限", "无"), - EC49008(49008, "不合法的群类型,只能传入0或2", "无"), - EC49009(49009, "企业群不能添加外部联系人,群主只能为企业员工", "无"), - EC49010(49010, "群成员不能为空", "无"), - EC49011(49011, "群员工列表超长", "无"), - EC49012(49012, "群外部联系人列表超长", "无"), - EC49013(49013, "群主不能为空", "无"), - EC49014(49014, "非法的群主类型,只能为emp或者ext", "无"), - EC49015(49015, "不合法的群名称", "无"), - EC49016(49016, "查询企业员工不存在", "无"), - EC49017(49017, "查询企业外部联系人不存在", "无"), - EC49018(49018, "群主非企业员工", "无"), - EC49019(49019, "群主非企业外部通讯录人员", "无"), - EC49020(49020, "某人处于勿扰模式,拒绝加入群聊;请先与TA建立好友关系", "无"), - EC49021(49021, "非好友建立群聊,认证用户一天只能拉50个人,非认证用户一天只能拉10个人", "无"), - EC49022(49022, "某人拒绝加入群聊", "无"), - EC49023(49023, "某人处于勿扰模式,拒绝加入群聊;请先与TA建立好友关系", "无"), - EC50001(50001, "redirect_uri未授权", "无"), - EC50002(50002, "员工不在权限范围", "无"), - EC50003(50003, "应用已停用", "无"), - EC50004(50004, "企业部门不在授权范围", "检查企业部门是否设置可见范围,具体排查方法请参考通讯录FAQ"), - EC50005(50005, "企业已禁用", "无"), - EC52010(52010, "无效的corpid", "请检查corpid参数是否正确"), - EC52011(52011, "jsapi ticket 读取失败", "请检查ticket参数是否正确"), - EC52012(52012, "jsapi 签名生成失败", "请检查“url, nonceStr, timestamp, ticket”等参数是否正确"), - EC52013(52013, "签名校验失败", "请检查“url, nonceStr, timestamp, ticket”等参数是否正确"), - EC52014(52014, "无效的url参数", "请检查url参数是否正确"), - EC52015(52015, "无效的随机字符串参数", "请检查nonceStr参数是否正确"), - EC52016(52016, "无效的签名参数", "请检查“url, nonceStr, timestamp, ticket”等参数是否正确"), - EC52017(52017, "无效的jsapi列表参数", "请检查dd.config中的jsApiList参数是否正确"), - EC52018(52018, "无效的时间戳", "请检查timestamp参数是否正确"), - EC52019(52019, "无效的agentid", "请检查agentid参数是否正确"), - EC60001(60001, "不合法的部门名称", "请检查部门名称是否正确,长度不能超过64个字符"), - EC60002(60002, "部门层级深度超过限制", "无"), - EC60003(60003, "部门不存在", "无"), - EC60004(60004, "父亲部门不存在", "无"), - EC60005(60005, "不允许删除有成员的部门", "无"), - EC60006(60006, "不允许删除有子部门的部门", "无"), - EC60007(60007, "不允许删除根部门", "无"), - EC60008(60008, "父部门下该部门名称已存在", "无"), - EC60009(60009, "部门名称含有非法字符", "无"), - EC60010(60010, "部门存在循环关系", "无"), - EC60011(60011, "没有调用该接口的权限", "请检查当前请求使用的access_token是否有对该部门/人的操作权限,查看获取appSecret授权范围"), - EC60012(60012, "不允许删除默认应用", "无"), - EC60013(60013, "不允许关闭应用", "无"), - EC60014(60014, "不允许开启应用", "无"), - EC60015(60015, "不允许修改默认应用可见范围", "无"), - EC60016(60016, "部门id已经存在", "无"), - EC60017(60017, "不允许设置企业", "无"), - EC60018(60018, "不允许更新根部门", "无"), - EC60019(60019, "从部门查询人员失败", "请检查该成员是否在该部门中"), - EC60020(60020, "访问ip不在白名单之中", "如果是企业应用,检查配置的服务器出口ip地址是否和请求ip地址一致。如果是isv应用,请检查套件ip白名单和请求ip是否一致"), - EC60067(60067, "部门的企业群群主不存在", "无"), - EC60068(60068, "部门的管理员不存在", "无"), - EC60102(60102, "UserID在公司中已存在", "无"), - EC60103(60103, "手机号码不合法", "无"), - EC60104(60104, "手机号码在公司中已存在", "无"), - EC60105(60105, "邮箱不合法", "无"), - EC60106(60106, "邮箱已存在", "无"), - EC60107(60107, "使用该手机登录钉钉的用户已经在企业中", "无"), - EC60110(60110, "部门个数超出限制", "无"), - EC60111(60111, "UserID不存在", "无"), - EC60112(60112, "用户name不合法", "无"), - EC60113(60113, "身份认证信息(手机/邮箱)不能同时为空", "无"), - EC60114(60114, "性别不合法", "无"), - EC60118(60118, "用户无有效邀请字段(邮箱,手机号)", "无"), - EC60119(60119, "不合法的position", "无"), - EC60120(60120, "用户已禁用", "无"), - EC60121(60121, "找不到该用户", "检查该企业下该员工是否存在"), - EC60122(60122, "不合法的extattr", "无"), - EC60123(60123, "不合法的jobnumber", "无"), - EC60124(60124, "用户不在此群中", "无"), - EC60125(60125, "CRM配置信息创建失败", "无"), - EC60126(60126, "CRM配置信息更新失败", "无"), - EC60127(60127, "CRM人员配置信息删除失败", "无"), - EC70001(70001, "企业不存在或者已经被解散", "无"), - EC70002(70002, "获取套件下的微应用失败", "无"), - EC70003(70003, "agentid对应微应用不存在", "无"), - EC70004(70004, "企业下没有对应该agentid的微应用", "注意:代表应用和企业映射关系的ID (appId的实例化ID),同一个ISV应用在不同企业的agentId不一致"), - EC70005(70005, "ISV激活套件失败", "请检查激活套件使用的参数是否正确"), - EC71006(71006, "回调地址已经存在", "无"), - EC71007(71007, "回调地址已不存在", "无"), - EC71008(71008, "回调call_back_tag必须在指定的call_back_tag列表中", "无"), - EC71009(71009, "返回文本非success", "回调地址返回的内容必须是“success”文本经过加密后的结果"), - EC71010(71010, "POST的JSON数据不包含所需要的参数字段或包含的参数格式非法", "无"), - EC71011(71011, "传入的url参数不是合法的url格式", "合法的URL地址是协议+域名+端口+路径path+参数组成"), - EC71012(71012, "url地址访问异常", "无"), - EC71013(71013, "此域名或IP不能注册或者接收回调事件", "注意回调地址的域名或者IP必须在套件的ip白名单中,并且该ip必须为外网ip"), - EC72001(72001, "获取钉盘空间失败", "检查domain、agent_id、access_token参数是否正确有效"), - EC72002(72002, "授权钉盘空间访问权限失败", "无"), - EC80001(80001, "可信域名没有IPC备案,后续将不能在该域名下正常使用jssdk", "无"), - EC81001(81001, "两个用户没有任何关系,请先相互成为好友", "无"), - EC81002(81002, "用户拒收消息", "无"), - EC88005(88005, "管理日历个人日历操作失败", "无"), - EC89001(89001, "管理日历启动导出任务失败", "无"), - EC89011(89011, "管理日历写入数据失败", "无"), - EC89012(89012, "管理日历更新数据失败", "无"), - EC90001(90001, "您的服务器调用钉钉开放平台所有接口的请求都被暂时禁用了", "无"), - EC90002(90002, "您的服务器调用钉钉开放平台当前接口的所有请求都被暂时禁用了", "无"), - EC90003(90003, "您的企业调用钉钉开放平台所有接口的请求都被暂时禁用了,仅对企业自己的Accesstoken有效", "无"), - EC90004(90004, "您当前使用的CorpId及CorpSecret被暂时禁用了,仅对企业自己的Accesstoken有效", "无"), - EC90005(90005, "您的企业调用当前接口次数过多,请求被暂时禁用了,仅对企业自己的Accesstoken有效", "无"), - EC90006(90006, "您当前使用的CorpId及CorpSecret调用当前接口次数过多,请求被暂时禁用了,仅对企业自己的Accesstoken有效", "无"), - EC90007(90007, "您当前要调用的企业的接口次数过多,对该企业的所有请求都被暂时禁用了,仅对企业授权给ISV的Accesstoken有效", "无"), - EC90008(90008, "您当前要调用的企业的当前接口次数过多,对此企业下该接口的所有请求都被暂时禁用了,仅对企业授权给ISV的Accesstoken有效", "无"), - EC90009(90009, "您调用企业接口超过了限制,对所有企业的所有接口的请求都被暂时禁用了,仅对企业授权给ISV的Accesstoken有效", "无"), - EC90010(90010, "您调用企业当前接口超过了限制,对所有企业的该接口的请求都被暂时禁用了,仅对企业授权给ISV的Accesstoken有效", "无"), - EC90011(90011, "您的套件调用企业接口超过了限制,该套件的所有请求都被暂时禁用了,仅对企业授权给ISV的Accesstoken有效", "无"), - EC90012(90012, "您的套件调用企业当前接口超过了限制,该套件对此接口的所有请求都被暂时禁用了,仅对企业授权给ISV的Accesstoken有效", "无"), - EC90013(90013, "您的套件调用当前企业的接口超过了限制,该套件对此企业的所有请求都被暂时禁用了,仅对企业授权给ISV的Accesstoken有效", "无"), - EC90014(90014, "您的套件调用企业当前接口超过了限制,该套件对此企业该接口的所有请求都被暂时禁用了,仅对企业授权给ISV的Accesstoken有效", "无"), - EC900001(900001, "加密明文文本非法", "加密明文不能为空"), - EC900002(900002, "加密时间戳参数非法", "加密时间戳不能为空"), - EC900003(900003, "加密随机字符串参数非法", "加密随机字符串不能为空"), - EC900004(900004, "不合法的aeskey", "检查aeskey是否符合规格,长度固定为43个字符,从a-z, A-Z, 0-9共62个字符中选取,是AESKey的Base64编码。解码后即为32字节长的AESKey"), - EC900005(900005, "签名不匹配", "检查签名计算的参数是否正确。请参考文档获取签名参数"), - EC900006(900006, "计算签名错误", "检查签名计算的参数是否正确。请参考文档获取签名参数"), - EC900007(900007, "计算加密文字错误", "检查是否安装JRE补丁或者对应的JRE版本是否正常。 请参考文档ISV应用开发准备工作"), - EC900008(900008, "计算解密文字错误", "检查是否安装JRE补丁或者对应的JRE版本是否正常。 请参考文档ISV应用开发准备工作"), - EC900009(900009, "计算解密文字长度不匹配", "检查aeskey是否符合规格。长度固定为43个字符,从a-z, A-Z, 0-9共62个字符中选取,是AESKey的Base64编码"), - EC900010(900010, "计算解密文字corpid不匹配", "检查corpid是否正确或者是否为当前企业的corpid"), - EC400010(400010, "激活的设备不存在(未绑定)", "无"), - EC400011(400011, "设备已经激活", "无"), - EC400020(400020, "无访问权限", "无"), - EC400021(400021, "密钥错误", "无"), - EC400022(400022, "设备不存在", "无"), - EC400023(400023, "用户不存在", "无"), - EC400040(400040, "回调不存在", "检查是否注册回调事件"), - EC400041(400041, "回调已经存在", "检查该回调事件是否已注册过"), - EC400042(400042, "企业不存在", "无"), - EC400043(400043, "企业不合法", "无"), - EC400050(400050, "回调地址无效", "检查回调地址是否正确或者符合地址格式"), - EC400051(400051, "回调地址访问异常", "注意回调地址必须部署到外网以便开发平台通过回调地址推送回调信息"), - EC400052(400052, "回调地址访返回数据错误", "无"), - EC400053(400053, "回调地址在黑名单中无法注册", "回调地址已添加黑名单,无法注册"), - EC400054(400054, "回调URL访问超时", "无"), - EC400055(400055, "回调设备不在线", "无"), - EC400056(400056, "回调访问设备失败", "无"), - EC400057(400057, "回调访问设备不存在", "无"), - EC420001(420001, "客户不存在", "无"), - EC420002(420002, "客户查询失败", "无"), - EC420003(420003, "联系人不存在", "无"), - EC420004(420004, "联系人查询失败", "无"), - EC420005(420005, "客户删除失败", "无"), - EC420006(420006, "联系人删除失败", "无"), - EC420007(420007, "跟进人绑定失败", "无"), - EC420008(420008, "客户id非法", "无"), - EC420009(420009, "跟进人id非法", "无"), - EC4200010(4200010, "客户联系人id非法", "无"), - EC4200011(4200011, "客户描述表单不存在", "无"), - EC4200012(4200012, "客户描述表单查询失败", "无"), - EC4200013(4200013, "联系人描述表单不存在", "无"), - EC4200014(4200014, "联系人描述表单查询失败", "无"), - EC4200015(4200015, "客户描述表单格式校验错误", "无"), - EC4200016(4200016, "客户描述表单格缺少固定字段", "无"), - EC4200017(4200017, "客户联系人描述表单格式校验错误", "无"), - EC4200018(4200018, "客户联系人描述表单格缺少固定字段", "无"), - EC4200019(4200019, "客户描述表单数据格式校验错误", "无"), - EC4200020(4200020, "客户描述表单数据缺少固定字段", "无"), - EC4200021(4200021, "客户联系人描述表单数据格式校验错误", "无"), - EC4200022(4200022, "客户联系人描述表单数据缺少固定字段", "无"), - EC800001(800001, "仅限ISV调用", "只有ISV微应用才能调用"), - EC41042(41042, "加密失败", "无"), - EC41043(41043, "解密失败", "无"), - EC40100(40100, "分机号已经存在", "无"), - EC40101(40101, "邮箱已经存在", "无"), - EC33013(33013, "企业自建微应用的个数过多,通过接口创建微应用受限", "此限制只针对企业自建微应用,对ISV应用没有限制"), - EC90017(90017, "此IP使用CorpId及CorpSecret调用接口的CorpId个数超过限制", "从该ip发起超过XX个corpid的请求被限制"), - EC40102(40102, "过期的临时授权码", "注意临时授权只能使用一次后就不能在使用。 需要重新执行授权操作有开放平台推送新的临时授权码"), - EC52020(52020, "未找到服务窗授权", "无"), - EC52021(52021, "未找到微应用授权", "无"), - EC52022(52022, "无效的jsapi类型", "无"), - EC52023(52023, "无效的服务窗agentid", "检查服务窗微应用是否停用或者删除"), - EC52024(52024, "无效的jsapi tag", "无"), - EC52025(52025, "无效的安全微应用", "无"), - EC52026(52026, "无效的安全微应用URL", "无"), - EC71014(71014, "获取套件下的服务窗应用失败", "无"), - EC72003(72003, "钉盘空间添加文件失败", "无"), - EC60128(60128, "无效的主管id", "无"), - EC200001(200001, "表单不能为空", "无"), - EC200004(200004, "APP_ID 不允许为空", "app_id为创建套件成功后,创建的ISV微应用的微应用ID。 可以登录开发者后台查看"), - EC200005(200005, "表单名称不允许为空", "无"), - EC200006(200006, "表单内容不允许为空", "无"), - EC200007(200007, "表单值不允许为空", "无"), - EC200008(200008, "表单uuid不存在", "无"), - EC400001(400001, "系统错误", "无"), - EC400002(400002, "参数错误", "检查参数是否符合规格。具体请参考当前接口的文档的参数说明和参数示例"), - EC400003(400003, "时间戳无效", "检查随机时间戳是否符合规格。具体请参考当前接口的文档的参数说明和参数示例"), - EC400004(400004, "随机数无效", "检查随机随机数是否符合规格。具体请参考当前接口的文档的参数说明和参数示例"); - - private int code; - private String desc; - private String solution; - - AuthDingTalkErrorCode(int code, String desc, String solution) { - this.code = code; - this.desc = desc; - this.solution = solution; - } - - public static AuthDingTalkErrorCode getErrorCode(int errorCode) { - AuthDingTalkErrorCode[] errorCodes = AuthDingTalkErrorCode.values(); - for (AuthDingTalkErrorCode code : errorCodes) { - if (code.getCode() == errorCode) { - return code; - } - } - return EC1_MINUS; - } - - public int getCode() { - return code; - } - - public String getDesc() { - return desc; - } - - public String getSolution() { - return solution; - } -} diff --git a/src/main/java/me/zhyd/oauth/enums/AuthToutiaoErrorCode.java b/src/main/java/me/zhyd/oauth/enums/AuthToutiaoErrorCode.java index b8ba6d5..11007b2 100644 --- a/src/main/java/me/zhyd/oauth/enums/AuthToutiaoErrorCode.java +++ b/src/main/java/me/zhyd/oauth/enums/AuthToutiaoErrorCode.java @@ -1,5 +1,8 @@ package me.zhyd.oauth.enums; +import lombok.AllArgsConstructor; +import lombok.Getter; + /** * 今日头条授权登录时的异常状态码 * @@ -7,6 +10,8 @@ package me.zhyd.oauth.enums; * @version 1.0 * @since 1.8 */ +@Getter +@AllArgsConstructor public enum AuthToutiaoErrorCode { EC0(0, "接口调用成功"), EC1(1, "API配置错误,未传入Client Key"), @@ -29,11 +34,6 @@ public enum AuthToutiaoErrorCode { private int code; private String desc; - AuthToutiaoErrorCode(int code, String desc) { - this.code = code; - this.desc = desc; - } - public static AuthToutiaoErrorCode getErrorCode(int errorCode) { AuthToutiaoErrorCode[] errorCodes = AuthToutiaoErrorCode.values(); for (AuthToutiaoErrorCode code : errorCodes) { @@ -43,12 +43,4 @@ public enum AuthToutiaoErrorCode { } return EC999; } - - public int getCode() { - return code; - } - - public String getDesc() { - return desc; - } } diff --git a/src/main/java/me/zhyd/oauth/model/AuthUserGender.java b/src/main/java/me/zhyd/oauth/enums/AuthUserGender.java similarity index 75% rename from src/main/java/me/zhyd/oauth/model/AuthUserGender.java rename to src/main/java/me/zhyd/oauth/enums/AuthUserGender.java index 04abe03..3e39e3d 100644 --- a/src/main/java/me/zhyd/oauth/model/AuthUserGender.java +++ b/src/main/java/me/zhyd/oauth/enums/AuthUserGender.java @@ -1,4 +1,7 @@ -package me.zhyd.oauth.model; +package me.zhyd.oauth.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; import java.util.Arrays; @@ -9,16 +12,13 @@ import java.util.Arrays; * @version 1.0 * @since 1.8 */ +@Getter +@AllArgsConstructor public enum AuthUserGender { MALE(1, "男"), FEMALE(0, "女"), UNKNOWN(-1, "未知"); private int code; private String desc; - AuthUserGender(int code, String desc) { - this.code = code; - this.desc = desc; - } - public static AuthUserGender getRealGender(String code) { if (code == null) { return UNKNOWN; @@ -33,12 +33,4 @@ public enum AuthUserGender { } return UNKNOWN; } - - public int getCode() { - return code; - } - - public String getDesc() { - return desc; - } } diff --git a/src/main/java/me/zhyd/oauth/model/AuthResponse.java b/src/main/java/me/zhyd/oauth/model/AuthResponse.java index 9ba74fc..484a743 100644 --- a/src/main/java/me/zhyd/oauth/model/AuthResponse.java +++ b/src/main/java/me/zhyd/oauth/model/AuthResponse.java @@ -12,7 +12,6 @@ import lombok.Setter; * @since 1.8 */ @Getter -@Setter @Builder public class AuthResponse { /** diff --git a/src/main/java/me/zhyd/oauth/model/AuthResponseStatus.java b/src/main/java/me/zhyd/oauth/model/AuthResponseStatus.java index f099072..21ca6f6 100644 --- a/src/main/java/me/zhyd/oauth/model/AuthResponseStatus.java +++ b/src/main/java/me/zhyd/oauth/model/AuthResponseStatus.java @@ -1,10 +1,15 @@ package me.zhyd.oauth.model; +import lombok.AllArgsConstructor; +import lombok.Getter; + /** * @author yadong.zhang (yadong.zhang0415(a)gmail.com) * @version 1.0 * @since 1.8 */ +@Getter +@AllArgsConstructor public enum AuthResponseStatus { SUCCESS(2000, "Success"), FAILURE(5000, "Failure"), @@ -20,18 +25,5 @@ public enum AuthResponseStatus { private int code; private String msg; - - AuthResponseStatus(int code, String msg) { - this.code = code; - this.msg = msg; - } - - public int getCode() { - return code; - } - - public String getMsg() { - return msg; - } } diff --git a/src/main/java/me/zhyd/oauth/model/AuthUser.java b/src/main/java/me/zhyd/oauth/model/AuthUser.java index 1db92ec..ad64129 100644 --- a/src/main/java/me/zhyd/oauth/model/AuthUser.java +++ b/src/main/java/me/zhyd/oauth/model/AuthUser.java @@ -1,10 +1,10 @@ package me.zhyd.oauth.model; import lombok.Builder; -import lombok.Data; import lombok.Getter; import lombok.Setter; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; /** * 授权成功后的用户信息,根据授权平台的不同,获取的数据完整性也不同 diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index 0f3750f..b0363a0 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -13,7 +13,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.StringUtils; import me.zhyd.oauth.utils.UrlBuilder; diff --git a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java index 402134a..d23a784 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java @@ -5,7 +5,7 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.enums.AuthBaiduErrorCode; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.utils.UrlBuilder; @@ -27,10 +27,7 @@ public class AuthBaiduRequest extends AuthDefaultRequest { protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - AuthBaiduErrorCode errorCode = AuthBaiduErrorCode.getErrorCode(accessTokenObject.getString("error")); - if (AuthBaiduErrorCode.OK != errorCode) { - throw new AuthException(errorCode.getDesc()); - } + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) .refreshToken(accessTokenObject.getString("refresh_token")) @@ -44,14 +41,13 @@ public class AuthBaiduRequest extends AuthDefaultRequest { HttpResponse response = doGetUserInfo(authToken); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); - AuthBaiduErrorCode errorCode = AuthBaiduErrorCode.getErrorCode(object.getString("error")); - if (AuthBaiduErrorCode.OK != errorCode) { - throw new AuthException(errorCode.getDesc()); - } + this.checkResponse(object); return AuthUser.builder() .uuid(object.getString("userid")) .username(object.getString("username")) .nickname(object.getString("username")) + .avatar(object.getString("portrait")) + .remark(object.getString("userdetail")) .gender(AuthUserGender.getRealGender(object.getString("sex"))) .token(authToken) .source(AuthSource.BAIDU) @@ -60,22 +56,41 @@ public class AuthBaiduRequest extends AuthDefaultRequest { @Override public AuthResponse revoke(AuthToken authToken) { - String accessToken = authToken.getAccessToken(); - HttpResponse response = HttpRequest.get(UrlBuilder.fromBaseUrl(source.revoke()) - .queryParam("access_token", accessToken) - .build()).execute(); - String userInfo = response.body(); - JSONObject object = JSONObject.parseObject(userInfo); + HttpResponse response = doGetRevoke(authToken); + JSONObject object = JSONObject.parseObject(response.body()); if (object.containsKey("error_code")) { return AuthResponse.builder() .code(AuthResponseStatus.FAILURE.getCode()) .msg(object.getString("error_msg")) .build(); } + // 返回1表示取消授权成功,否则失败 AuthResponseStatus status = object.getIntValue("result") == 1 ? AuthResponseStatus.SUCCESS : AuthResponseStatus.FAILURE; return AuthResponse.builder().code(status.getCode()).msg(status.getMsg()).build(); } + @Override + public AuthResponse refresh(AuthToken authToken) { + String refreshUrl = UrlBuilder.fromBaseUrl(this.source.refresh()) + .queryParam("grant_type", "refresh_token") + .queryParam("refresh_token", authToken.getRefreshToken()) + .queryParam("client_id", this.config.getClientId()) + .queryParam("client_secret", this.config.getClientSecret()) + .build(); + HttpResponse response = HttpRequest.get(refreshUrl).execute(); + JSONObject object = JSONObject.parseObject(response.body()); + this.checkResponse(object); + return AuthResponse.builder() + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(AuthToken.builder() + .accessToken(object.getString("access_token")) + .refreshToken(object.getString("refresh_token")) + .scope(object.getString("scope")) + .expireIn(object.getIntValue("expires_in")) + .build()) + .build(); + } + /** * 返回认证url,可自行跳转页面 * @@ -91,4 +106,10 @@ public class AuthBaiduRequest extends AuthDefaultRequest { .queryParam("state", getRealState(config.getState())) .build(); } + + private void checkResponse(JSONObject object) { + if (object.containsKey("error")) { + throw new AuthException(object.getString("error_description")); + } + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java index bf98f46..ea8d0fe 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java @@ -1,6 +1,5 @@ package me.zhyd.oauth.request; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; @@ -9,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java index 1320f46..b5dbcfb 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; /** * CSDN登录 diff --git a/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java index 911b210..a457136 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java @@ -114,6 +114,15 @@ public abstract class AuthDefaultRequest implements AuthRequest { return UrlBuilder.fromBaseUrl(source.userInfo()).queryParam("access_token", authToken.getAccessToken()).build(); } + /** + * 返回获取revoke authorization的url + * + * @return 返回获取revoke authorization的url + */ + protected String revokeUrl(AuthToken authToken) { + return UrlBuilder.fromBaseUrl(source.revoke()).queryParam("access_token", authToken.getAccessToken()).build(); + } + /** * 获取state,如果为空, 则默认去当前日期的时间戳 * @@ -163,4 +172,24 @@ public abstract class AuthDefaultRequest implements AuthRequest { protected HttpResponse doGetUserInfo(AuthToken authToken) { return HttpRequest.get(userInfoUrl(authToken)).execute(); } + + /** + * 通用的post形式的取消授权方法 + * + * @param authToken token封装 + * @return HttpResponse + */ + protected HttpResponse doPostRevoke(AuthToken authToken) { + return HttpRequest.post(revokeUrl(authToken)).execute(); + } + + /** + * 通用的post形式的取消授权方法 + * + * @param authToken token封装 + * @return HttpResponse + */ + protected HttpResponse doGetRevoke(AuthToken authToken) { + return HttpRequest.get(revokeUrl(authToken)).execute(); + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java index a5b423c..69956a7 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java @@ -6,12 +6,11 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.enums.AuthDingTalkErrorCode; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.utils.GlobalAuthUtil; import me.zhyd.oauth.utils.UrlBuilder; @@ -39,11 +38,9 @@ public class AuthDingTalkRequest extends AuthDefaultRequest { JSONObject param = new JSONObject(); param.put("tmp_auth_code", code); HttpResponse response = HttpRequest.post(userInfoUrl(authToken)).body(param.toJSONString()).execute(); - String userInfo = response.body(); - JSONObject object = JSON.parseObject(userInfo); - AuthDingTalkErrorCode errorCode = AuthDingTalkErrorCode.getErrorCode(object.getIntValue("errcode")); - if (AuthDingTalkErrorCode.EC0 != errorCode) { - throw new AuthException(errorCode.getDesc()); + JSONObject object = JSON.parseObject(response.body()); + if (object.getIntValue("errcode") != 0) { + throw new AuthException(object.getString("errmsg")); } object = object.getJSONObject("user_info"); AuthToken token = AuthToken.builder() diff --git a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java index b5f1f62..9155a82 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java @@ -5,6 +5,7 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.utils.UrlBuilder; diff --git a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java index fafc280..66cc036 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index 41a6c37..7eee93d 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; /** * Gitee登录 diff --git a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java index 1123bea..b2b23fc 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.GlobalAuthUtil; import java.util.Map; diff --git a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java index 9c7aee9..77eae2b 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index aa004e5..b019eb0 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.utils.StringUtils; diff --git a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java index 337d298..2fddab2 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMiRequest.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.utils.UrlBuilder; diff --git a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java index b66c2e2..08fe041 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java @@ -2,17 +2,14 @@ package me.zhyd.oauth.request; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; -import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.utils.UrlBuilder; -import java.util.HashMap; -import java.util.Map; - import static me.zhyd.oauth.utils.GlobalAuthUtil.parseQueryToMap; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java index 945ff6a..861d7a8 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java index d9725e2..2774ceb 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; import java.util.Objects; diff --git a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java index 2452650..cb1536c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java @@ -10,7 +10,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.GlobalAuthUtil; import me.zhyd.oauth.utils.StringUtils; import me.zhyd.oauth.utils.UrlBuilder; diff --git a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java index eb541cc..6fb94a2 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java @@ -5,6 +5,7 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.utils.UrlBuilder; diff --git a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java index d30392a..3ce285b 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; import static me.zhyd.oauth.config.AuthSource.STACK_OVERFLOW; diff --git a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index 838ec66..55760bd 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.GlobalAuthUtil; import me.zhyd.oauth.utils.UrlBuilder; diff --git a/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java index 46dab25..81c6b3c 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java @@ -5,6 +5,7 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; diff --git a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java index b0204fb..e5fc100 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java @@ -8,7 +8,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java index 19ab8bf..a810aed 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java @@ -9,7 +9,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java index 1aeee68..a3c5a64 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java @@ -5,6 +5,7 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.*; import me.zhyd.oauth.utils.UrlBuilder; diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java index 97555dc..6f25ba1 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java @@ -9,7 +9,7 @@ import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.model.AuthUserGender; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.IpUtils; import me.zhyd.oauth.utils.StringUtils; import me.zhyd.oauth.utils.UrlBuilder; diff --git a/update.md b/update.md index 60e02b7..a7813c0 100644 --- a/update.md +++ b/update.md @@ -1,7 +1,18 @@ +### 2019/07/19 + +1. 合并github上[@dyc12ii](https://github.com/dyc12ii) 的[pr#25](https://github.com/zhangyd-c/JustAuth/pull/25),升级fastjson版本至1.2.58,避免安全漏洞 +2. `AuthUserGender`枚举类挪到`enums`包下 +3. 删除`AuthBaiduErrorCode`和`AuthDingTalkErrorCode`枚举类 +4. 优化百度授权流程,增加refresh token的方法 +5. 优化`AuthConfig`、`AuthResponse`类,去掉不必要的lombonk注解,减少编译后的代码量 +6. 使用lombok注解优化枚举类 + ### 2019/07/18 + 1. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#19](https://github.com/zhangyd-c/JustAuth/pull/19),集成人人 2. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#20](https://github.com/zhangyd-c/JustAuth/pull/20),集成Pinterest -2. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#21](https://github.com/zhangyd-c/JustAuth/pull/21),集成StackOverflow +3. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#21](https://github.com/zhangyd-c/JustAuth/pull/21),集成StackOverflow +4. 合并github上[@xkcoding](https://github.com/xkcoding) 的[pr#23](https://github.com/zhangyd-c/JustAuth/pull/23),重构代码、新增编辑器规范,规范PR代码风格 ### 2019/07/17 1. 优化代码 @@ -11,7 +22,8 @@ 1. 重构UrlBuilder类 2. 将CSDN相关的类置为`Deprecated`,后续可能会删除,也可能一直保留。毕竟CSDN的openAPI已经不对外开放了。 3. `BaseAuthRequest` 改名为 `AuthDefaultRequest` -3. `ResponseStatus` 改名为 `AuthResponseStatus` 并且移动到 `me.zhyd.oauth.model` +4. `ResponseStatus` 改名为 `AuthResponseStatus` 并且移动到 `me.zhyd.oauth.model` +5. 合并github上[@xkcoding](https://github.com/xkcoding) 的[pr#18](https://github.com/zhangyd-c/JustAuth/pull/18),修复小米回调错误问题 同时 支持微信获取 ### 2019/07/15 1. 新增 `AuthState` 类,内置默认的state生成规则和校验规则 From 3a04098e4cee2a03b6389ec73c9fd4a6c1a0b53e Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Fri, 19 Jul 2019 18:05:24 +0800 Subject: [PATCH 44/44] =?UTF-8?q?:zap:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhyd/oauth/config/AuthSource.java | 5 ++ .../zhyd/oauth/exception/AuthException.java | 4 + .../zhyd/oauth/request/AuthAlipayRequest.java | 4 +- .../zhyd/oauth/request/AuthBaiduRequest.java | 46 +++++----- .../zhyd/oauth/request/AuthCodingRequest.java | 19 ++-- .../zhyd/oauth/request/AuthCsdnRequest.java | 21 +++-- .../oauth/request/AuthDefaultRequest.java | 3 + .../zhyd/oauth/request/AuthDouyinRequest.java | 31 +++---- .../oauth/request/AuthFacebookRequest.java | 47 ++++++---- .../zhyd/oauth/request/AuthGiteeRequest.java | 18 +++- .../zhyd/oauth/request/AuthGithubRequest.java | 32 ++++--- .../zhyd/oauth/request/AuthGoogleRequest.java | 21 +++-- .../oauth/request/AuthLinkedinRequest.java | 89 +++++++++++++------ .../oauth/request/AuthMicrosoftRequest.java | 12 ++- .../oauth/request/AuthOschinaRequest.java | 21 +++-- .../oauth/request/AuthPinterestRequest.java | 25 ++++-- .../me/zhyd/oauth/request/AuthQqRequest.java | 37 +++++--- .../zhyd/oauth/request/AuthRenrenRequest.java | 2 +- .../request/AuthStackOverflowRequest.java | 21 +++-- .../request/AuthTencentCloudRequest.java | 23 +++-- .../oauth/request/AuthToutiaoRequest.java | 27 +++--- .../zhyd/oauth/request/AuthWeChatRequest.java | 10 +-- .../zhyd/oauth/request/AuthWeiboRequest.java | 5 +- .../java/me/zhyd/oauth/utils/CustomTest.java | 63 +++++++++++++ .../me/zhyd/oauth/utils/UrlBuilderTest.java | 11 +-- update.md | 2 + 26 files changed, 403 insertions(+), 196 deletions(-) create mode 100644 src/test/java/me/zhyd/oauth/utils/CustomTest.java diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index 75eef7a..f712210 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -229,6 +229,11 @@ public enum AuthSource { public String userInfo() { return "https://graph.qq.com/user/get_user_info"; } + + @Override + public String refresh() { + return "https://graph.qq.com/oauth2.0/token"; + } }, /** * 微信 diff --git a/src/main/java/me/zhyd/oauth/exception/AuthException.java b/src/main/java/me/zhyd/oauth/exception/AuthException.java index 9393eba..f4f7473 100644 --- a/src/main/java/me/zhyd/oauth/exception/AuthException.java +++ b/src/main/java/me/zhyd/oauth/exception/AuthException.java @@ -30,6 +30,10 @@ public class AuthException extends RuntimeException { super(message, cause); } + public AuthException(Throwable cause) { + super(cause); + } + public int getErrorCode() { return errorCode; } diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index b0363a0..18b49ad 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -9,11 +9,11 @@ import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.alipay.api.response.AlipayUserInfoShareResponse; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.StringUtils; import me.zhyd.oauth.utils.UrlBuilder; @@ -43,7 +43,7 @@ public class AuthAlipayRequest extends AuthDefaultRequest { try { response = this.alipayClient.execute(request); } catch (Exception e) { - throw new AuthException("Unable to get token from alipay using code [" + authCallback.getAuth_code() + "]", e); + throw new AuthException(e); } if (!response.isSuccess()) { throw new AuthException(response.getSubMsg()); diff --git a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java index d23a784..92d97a3 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java @@ -26,14 +26,7 @@ public class AuthBaiduRequest extends AuthDefaultRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); - JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - this.checkResponse(accessTokenObject); - return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .scope(accessTokenObject.getString("scope")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .build(); + return getAuthToken(response); } @Override @@ -58,12 +51,7 @@ public class AuthBaiduRequest extends AuthDefaultRequest { public AuthResponse revoke(AuthToken authToken) { HttpResponse response = doGetRevoke(authToken); JSONObject object = JSONObject.parseObject(response.body()); - if (object.containsKey("error_code")) { - return AuthResponse.builder() - .code(AuthResponseStatus.FAILURE.getCode()) - .msg(object.getString("error_msg")) - .build(); - } + this.checkResponse(object); // 返回1表示取消授权成功,否则失败 AuthResponseStatus status = object.getIntValue("result") == 1 ? AuthResponseStatus.SUCCESS : AuthResponseStatus.FAILURE; return AuthResponse.builder().code(status.getCode()).msg(status.getMsg()).build(); @@ -78,16 +66,9 @@ public class AuthBaiduRequest extends AuthDefaultRequest { .queryParam("client_secret", this.config.getClientSecret()) .build(); HttpResponse response = HttpRequest.get(refreshUrl).execute(); - JSONObject object = JSONObject.parseObject(response.body()); - this.checkResponse(object); return AuthResponse.builder() .code(AuthResponseStatus.SUCCESS.getCode()) - .data(AuthToken.builder() - .accessToken(object.getString("access_token")) - .refreshToken(object.getString("refresh_token")) - .scope(object.getString("scope")) - .expireIn(object.getIntValue("expires_in")) - .build()) + .data(this.getAuthToken(response)) .build(); } @@ -107,9 +88,26 @@ public class AuthBaiduRequest extends AuthDefaultRequest { .build(); } + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ private void checkResponse(JSONObject object) { - if (object.containsKey("error")) { - throw new AuthException(object.getString("error_description")); + if (object.containsKey("error") || object.containsKey("error_code")) { + String msg = object.containsKey("error_description") ? object.getString("error_description") : object.getString("error_msg"); + throw new AuthException(msg); } } + + private AuthToken getAuthToken(HttpResponse response) { + JSONObject accessTokenObject = JSONObject.parseObject(response.body()); + this.checkResponse(accessTokenObject); + return AuthToken.builder() + .accessToken(accessTokenObject.getString("access_token")) + .refreshToken(accessTokenObject.getString("refresh_token")) + .scope(accessTokenObject.getString("scope")) + .expireIn(accessTokenObject.getIntValue("expires_in")) + .build(); + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java index ea8d0fe..070d57b 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java @@ -28,9 +28,7 @@ public class AuthCodingRequest extends AuthDefaultRequest { protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doGetAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - if (accessTokenObject.getIntValue("code") != 0) { - throw new AuthException("Unable to get token from coding using code [" + authCallback.getCode() + "]: " + accessTokenObject); - } + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) .expireIn(accessTokenObject.getIntValue("expires_in")) @@ -42,9 +40,7 @@ public class AuthCodingRequest extends AuthDefaultRequest { protected AuthUser getUserInfo(AuthToken authToken) { HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); - if (object.getIntValue("code") != 0) { - throw new AuthException(object.getString("msg")); - } + this.checkResponse(object); object = object.getJSONObject("data"); return AuthUser.builder() @@ -63,6 +59,17 @@ public class AuthCodingRequest extends AuthDefaultRequest { .build(); } + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.getIntValue("code") != 0) { + throw new AuthException(object.getString("msg")); + } + } + /** * 返回认证url,可自行跳转页面 * diff --git a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java index b5dbcfb..9043f04 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java @@ -4,11 +4,11 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; /** * CSDN登录 @@ -28,9 +28,7 @@ public class AuthCsdnRequest extends AuthDefaultRequest { protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - if (accessTokenObject.containsKey("error_code")) { - throw new AuthException("Unable to get token from csdn using code [" + authCallback.getCode() + "]: " + accessTokenObject); - } + this.checkResponse(accessTokenObject); return AuthToken.builder().accessToken(accessTokenObject.getString("access_token")).build(); } @@ -38,9 +36,7 @@ public class AuthCsdnRequest extends AuthDefaultRequest { protected AuthUser getUserInfo(AuthToken authToken) { HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); - if (object.containsKey("error_code")) { - throw new AuthException(object.getString("error")); - } + this.checkResponse(object); return AuthUser.builder() .uuid(object.getString("username")) .username(object.getString("username")) @@ -51,4 +47,15 @@ public class AuthCsdnRequest extends AuthDefaultRequest { .source(AuthSource.CSDN) .build(); } + + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error_code")) { + throw new AuthException(object.getString("error")); + } + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java index a457136..9f022fe 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java @@ -3,6 +3,7 @@ package me.zhyd.oauth.request; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import lombok.Data; +import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.exception.AuthException; @@ -20,6 +21,7 @@ import me.zhyd.oauth.utils.UrlBuilder; * @since 1.8 */ @Data +@Slf4j public abstract class AuthDefaultRequest implements AuthRequest { protected AuthConfig config; protected AuthSource source; @@ -48,6 +50,7 @@ public abstract class AuthDefaultRequest implements AuthRequest { AuthUser user = this.getUserInfo(authToken); return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(user).build(); } catch (Exception e) { + log.error("Failed to login with oauth authorization.", e); return this.responseError(e); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java index 9155a82..9c46b4f 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java @@ -32,10 +32,8 @@ public class AuthDouyinRequest extends AuthDefaultRequest { @Override protected AuthUser getUserInfo(AuthToken authToken) { HttpResponse response = doGetUserInfo(authToken); - JSONObject object = JSONObject.parseObject(response.body()); - - JSONObject userInfoObject = this.checkResponse(object); - + JSONObject userInfoObject = JSONObject.parseObject(response.body()); + this.checkResponse(userInfoObject); return AuthUser.builder() .uuid(userInfoObject.getString("union_id")) .username(userInfoObject.getString("nickname")) @@ -52,7 +50,7 @@ public class AuthDouyinRequest extends AuthDefaultRequest { public AuthResponse refresh(AuthToken oldToken) { return AuthResponse.builder() .code(AuthResponseStatus.SUCCESS.getCode()) - .data(refreshTokenUrl(oldToken.getRefreshToken())) + .data(getToken(refreshTokenUrl(oldToken.getRefreshToken()))) .build(); } @@ -60,16 +58,14 @@ public class AuthDouyinRequest extends AuthDefaultRequest { * 检查响应内容是否正确 * * @param object 请求响应内容 - * @return 实际请求数据的json对象 */ - private JSONObject checkResponse(JSONObject object) { + private void checkResponse(JSONObject object) { String message = object.getString("message"); JSONObject data = object.getJSONObject("data"); int errorCode = data.getIntValue("error_code"); if ("error".equals(message) || errorCode != 0) { throw new AuthException(errorCode, data.getString("description")); } - return data; } /** @@ -82,14 +78,13 @@ public class AuthDouyinRequest extends AuthDefaultRequest { HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); String accessTokenStr = response.body(); JSONObject object = JSONObject.parseObject(accessTokenStr); - - JSONObject accessTokenObject = this.checkResponse(object); + this.checkResponse(object); return AuthToken.builder() - .accessToken(accessTokenObject.getString("access_token")) - .openId(accessTokenObject.getString("open_id")) - .expireIn(accessTokenObject.getIntValue("expires_in")) - .refreshToken(accessTokenObject.getString("refresh_token")) - .scope(accessTokenObject.getString("scope")) + .accessToken(object.getString("access_token")) + .openId(object.getString("open_id")) + .expireIn(object.getIntValue("expires_in")) + .refreshToken(object.getString("refresh_token")) + .scope(object.getString("scope")) .build(); } @@ -112,7 +107,7 @@ public class AuthDouyinRequest extends AuthDefaultRequest { /** * 返回获取accessToken的url * - * @param code + * @param code oauth的授权码 * @return 返回获取accessToken的url */ @Override @@ -128,7 +123,7 @@ public class AuthDouyinRequest extends AuthDefaultRequest { /** * 返回获取userInfo的url * - * @param authToken + * @param authToken oauth返回的token * @return 返回获取userInfo的url */ @Override @@ -142,7 +137,7 @@ public class AuthDouyinRequest extends AuthDefaultRequest { /** * 返回获取accessToken的url * - * @param refreshToken + * @param refreshToken oauth返回的refreshtoken * @return 返回获取accessToken的url */ @Override diff --git a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java index 66cc036..771c894 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java @@ -4,11 +4,11 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** @@ -28,11 +28,7 @@ public class AuthFacebookRequest extends AuthDefaultRequest { protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - - if (accessTokenObject.containsKey("error")) { - throw new AuthException(accessTokenObject.getJSONObject("error").getString("message")); - } - + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) .expireIn(accessTokenObject.getIntValue("expires_in")) @@ -45,22 +41,12 @@ public class AuthFacebookRequest extends AuthDefaultRequest { HttpResponse response = doGetUserInfo(authToken); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); - if (object.containsKey("error")) { - throw new AuthException(object.getJSONObject("error").getString("message")); - } - String picture = null; - if (object.containsKey("picture")) { - JSONObject pictureObj = object.getJSONObject("picture"); - pictureObj = pictureObj.getJSONObject("data"); - if (null != pictureObj) { - picture = pictureObj.getString("url"); - } - } + this.checkResponse(object); return AuthUser.builder() .uuid(object.getString("id")) .username(object.getString("name")) .nickname(object.getString("name")) - .avatar(picture) + .avatar(getUserPicture(object)) .location(object.getString("locale")) .email(object.getString("email")) .gender(AuthUserGender.getRealGender(object.getString("gender"))) @@ -69,10 +55,22 @@ public class AuthFacebookRequest extends AuthDefaultRequest { .build(); } + private String getUserPicture(JSONObject object) { + String picture = null; + if (object.containsKey("picture")) { + JSONObject pictureObj = object.getJSONObject("picture"); + pictureObj = pictureObj.getJSONObject("data"); + if (null != pictureObj) { + picture = pictureObj.getString("url"); + } + } + return picture; + } + /** * 返回获取userInfo的url * - * @param authToken + * @param authToken 用户token * @return 返回获取userInfo的url */ @Override @@ -82,4 +80,15 @@ public class AuthFacebookRequest extends AuthDefaultRequest { .queryParam("fields", "id,name,birthday,gender,hometown,email,devices,picture.width(400)") .build(); } + + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error")) { + throw new AuthException(object.getJSONObject("error").getString("message")); + } + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java index 7eee93d..0522003 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java @@ -4,11 +4,11 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; /** * Gitee登录 @@ -27,9 +27,7 @@ public class AuthGiteeRequest extends AuthDefaultRequest { protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - if (accessTokenObject.containsKey("error")) { - throw new AuthException("Unable to get token from gitee using code [" + authCallback.getCode() + "]: " + accessTokenObject); - } + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) .refreshToken(accessTokenObject.getString("refresh_token")) @@ -44,6 +42,7 @@ public class AuthGiteeRequest extends AuthDefaultRequest { HttpResponse response = doGetUserInfo(authToken); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); + this.checkResponse(object); return AuthUser.builder() .uuid(object.getString("id")) .username(object.getString("login")) @@ -59,4 +58,15 @@ public class AuthGiteeRequest extends AuthDefaultRequest { .source(AuthSource.GITEE) .build(); } + + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error")) { + throw new AuthException(object.getString("error_description")); + } + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java index b2b23fc..c843a8b 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java @@ -4,14 +4,11 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; -import me.zhyd.oauth.utils.GlobalAuthUtil; - -import java.util.Map; /** * Github登录 @@ -29,22 +26,20 @@ public class AuthGithubRequest extends AuthDefaultRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); - Map res = GlobalAuthUtil.parseStringToMap(response.body()); - if (res.containsKey("error")) { - throw new AuthException(res.get("error") + ":" + res.get("error_description")); - } + JSONObject accessTokenObject = JSONObject.parseObject(response.body()); + this.checkResponse(accessTokenObject); return AuthToken.builder() - .accessToken(res.get("access_token")) - .scope(res.get("scope")) - .tokenType(res.get("token_type")) + .accessToken(accessTokenObject.getString("access_token")) + .scope(accessTokenObject.getString("scope")) + .tokenType(accessTokenObject.getString("token_type")) .build(); } @Override protected AuthUser getUserInfo(AuthToken authToken) { HttpResponse response = doGetUserInfo(authToken); - String userInfo = response.body(); - JSONObject object = JSONObject.parseObject(userInfo); + JSONObject object = JSONObject.parseObject(response.body()); + this.checkResponse(object); return AuthUser.builder() .uuid(object.getString("id")) .username(object.getString("login")) @@ -60,4 +55,15 @@ public class AuthGithubRequest extends AuthDefaultRequest { .source(AuthSource.GITHUB) .build(); } + + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error")) { + throw new AuthException(object.getString("error_description")); + } + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java index 77eae2b..a6a603a 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java @@ -4,11 +4,11 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** @@ -28,12 +28,7 @@ public class AuthGoogleRequest extends AuthDefaultRequest { protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - - if (accessTokenObject.containsKey("error") || accessTokenObject.containsKey("error_description")) { - throw new AuthException("get google access_token has error:[" + accessTokenObject.getString("error") + "], error_description:[" + accessTokenObject - .getString("error_description") + "]"); - } - + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) .expireIn(accessTokenObject.getIntValue("expires_in")) @@ -48,6 +43,7 @@ public class AuthGoogleRequest extends AuthDefaultRequest { HttpResponse response = doGetUserInfo(authToken); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); + this.checkResponse(object); return AuthUser.builder() .uuid(object.getString("sub")) .username(object.getString("name")) @@ -87,4 +83,15 @@ public class AuthGoogleRequest extends AuthDefaultRequest { protected String userInfoUrl(AuthToken authToken) { return UrlBuilder.fromBaseUrl(source.userInfo()).queryParam("id_token", authToken.getAccessToken()).build(); } + + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error") || object.containsKey("error_description")) { + throw new AuthException(object.getString("error_description")); + } + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index b019eb0..b552256 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -43,33 +43,10 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { this.checkResponse(userInfoObject); - // 组装用户名 - String firstName, lastName; - // 获取firstName - if (userInfoObject.containsKey("localizedFirstName")) { - firstName = userInfoObject.getString("localizedFirstName"); - } else { - firstName = getUserName(userInfoObject, "firstName"); - } - // 获取lastName - if (userInfoObject.containsKey("localizedLastName")) { - lastName = userInfoObject.getString("localizedLastName"); - } else { - lastName = getUserName(userInfoObject, "lastName"); - } - String userName = firstName + " " + lastName; + String userName = getUserName(userInfoObject); // 获取用户头像 - String avatar = null; - JSONObject profilePictureObject = userInfoObject.getJSONObject("profilePicture"); - if (profilePictureObject.containsKey("displayImage~")) { - JSONArray displayImageElements = profilePictureObject.getJSONObject("displayImage~") - .getJSONArray("elements"); - if (null != displayImageElements && displayImageElements.size() > 0) { - JSONObject largestImageObj = displayImageElements.getJSONObject(displayImageElements.size() - 1); - avatar = largestImageObj.getJSONArray("identifiers").getJSONObject(0).getString("identifier"); - } - } + String avatar = this.getAvatar(userInfoObject); // 获取用户邮箱地址 String email = this.getUserEmail(accessToken); @@ -85,6 +62,55 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { .build(); } + /** + * 获取用户的真实名 + * + * @param userInfoObject 用户json对象 + * @return 用户名 + */ + private String getUserName(JSONObject userInfoObject) { + String firstName, lastName; + // 获取firstName + if (userInfoObject.containsKey("localizedFirstName")) { + firstName = userInfoObject.getString("localizedFirstName"); + } else { + firstName = getUserName(userInfoObject, "firstName"); + } + // 获取lastName + if (userInfoObject.containsKey("localizedLastName")) { + lastName = userInfoObject.getString("localizedLastName"); + } else { + lastName = getUserName(userInfoObject, "lastName"); + } + return firstName + " " + lastName; + } + + /** + * 获取用户的头像 + * + * @param userInfoObject 用户json对象 + * @return 用户的头像地址 + */ + private String getAvatar(JSONObject userInfoObject) { + String avatar = null; + JSONObject profilePictureObject = userInfoObject.getJSONObject("profilePicture"); + if (profilePictureObject.containsKey("displayImage~")) { + JSONArray displayImageElements = profilePictureObject.getJSONObject("displayImage~") + .getJSONArray("elements"); + if (null != displayImageElements && displayImageElements.size() > 0) { + JSONObject largestImageObj = displayImageElements.getJSONObject(displayImageElements.size() - 1); + avatar = largestImageObj.getJSONArray("identifiers").getJSONObject(0).getString("identifier"); + } + } + return avatar; + } + + /** + * 获取用户的email + * + * @param accessToken 用户授权后返回的token + * @return 用户的邮箱地址 + */ private String getUserEmail(String accessToken) { String email = null; HttpResponse emailResponse = HttpRequest.get("https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))") @@ -92,8 +118,8 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { .header("Connection", "Keep-Alive") .header("Authorization", "Bearer " + accessToken) .execute(); - System.out.println(emailResponse.body()); JSONObject emailObj = JSONObject.parseObject(emailResponse.body()); + this.checkResponse(emailObj); if (emailObj.containsKey("elements")) { email = emailObj.getJSONArray("elements") .getJSONObject(0) @@ -125,9 +151,14 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { .build(); } - private void checkResponse(JSONObject userInfoObject) { - if (userInfoObject.containsKey("error")) { - throw new AuthException(userInfoObject.getString("error_description")); + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error")) { + throw new AuthException(object.getString("error_description")); } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java index 08fe041..4b5e864 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java @@ -55,9 +55,14 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { .build(); } - private void checkResponse(JSONObject response) { - if (response.containsKey("error")) { - throw new AuthException(response.getString("error_description")); + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error")) { + throw new AuthException(object.getString("error_description")); } } @@ -69,6 +74,7 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { HttpResponse response = HttpRequest.get(userInfoUrl(authToken)).header("Authorization", jwt).execute(); String userInfo = response.body(); JSONObject object = JSONObject.parseObject(userInfo); + this.checkResponse(object); return AuthUser.builder() .uuid(object.getString("id")) .username(object.getString("userPrincipalName")) diff --git a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java index 861d7a8..955a807 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java @@ -4,11 +4,11 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** @@ -28,9 +28,7 @@ public class AuthOschinaRequest extends AuthDefaultRequest { protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - if (accessTokenObject.containsKey("error")) { - throw new AuthException("Unable to get token from oschina using code [" + authCallback.getCode() + "]: " + accessTokenObject); - } + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) .refreshToken(accessTokenObject.getString("refresh_token")) @@ -43,9 +41,7 @@ public class AuthOschinaRequest extends AuthDefaultRequest { protected AuthUser getUserInfo(AuthToken authToken) { HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); - if (object.containsKey("error")) { - throw new AuthException(object.getString("error_description")); - } + this.checkResponse(object); return AuthUser.builder() .uuid(object.getString("id")) .username(object.getString("name")) @@ -91,4 +87,15 @@ public class AuthOschinaRequest extends AuthDefaultRequest { .queryParam("dataType", "json") .build(); } + + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error")) { + throw new AuthException(object.getString("error_description")); + } + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java index 2774ceb..e86a247 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthPinterestRequest.java @@ -4,11 +4,11 @@ import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; import java.util.Objects; @@ -24,6 +24,8 @@ import static me.zhyd.oauth.config.AuthSource.PINTEREST; */ public class AuthPinterestRequest extends AuthDefaultRequest { + private static final String FAILURE = "failure"; + public AuthPinterestRequest(AuthConfig config) { super(config, PINTEREST); } @@ -32,10 +34,7 @@ public class AuthPinterestRequest extends AuthDefaultRequest { protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - if (!response.isOk()) { - throw new AuthException("Unable to get token from Pinterest using code [" + authCallback.getCode() + "]: " + accessTokenObject); - } - + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) .tokenType(accessTokenObject.getString("token_type")) @@ -48,8 +47,9 @@ public class AuthPinterestRequest extends AuthDefaultRequest { .queryParam("fields", "id,username,first_name,last_name,bio,image") .build(); HttpResponse response = HttpRequest.post(userinfoUrl).execute(); - JSONObject userObj = JSONObject.parseObject(response.body()).getJSONObject("data"); - + JSONObject object = JSONObject.parseObject(response.body()); + this.checkResponse(object); + JSONObject userObj = object.getJSONObject("data"); return AuthUser.builder() .uuid(userObj.getString("id")) .avatar(getAvatarUrl(userObj)) @@ -82,4 +82,15 @@ public class AuthPinterestRequest extends AuthDefaultRequest { .build(); } + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (!object.containsKey("status") && FAILURE.equals(object.getString("status"))) { + throw new AuthException(object.getString("message")); + } + } + } diff --git a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java index cb1536c..7943ea3 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java @@ -6,11 +6,9 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthToken; -import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.enums.AuthUserGender; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.*; import me.zhyd.oauth.utils.GlobalAuthUtil; import me.zhyd.oauth.utils.StringUtils; import me.zhyd.oauth.utils.UrlBuilder; @@ -33,14 +31,15 @@ public class AuthQqRequest extends AuthDefaultRequest { @Override protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doGetAuthorizationCode(authCallback.getCode()); - Map accessTokenObject = GlobalAuthUtil.parseStringToMap(response.body()); - if (!accessTokenObject.containsKey("access_token")) { - throw new AuthException("Unable to get token from qq using code [" + authCallback.getCode() + "]: " + accessTokenObject); - } - return AuthToken.builder() - .accessToken(accessTokenObject.get("access_token")) - .expireIn(Integer.valueOf(accessTokenObject.get("expires_in"))) - .refreshToken(accessTokenObject.get("refresh_token")) + return getAuthToken(response); + } + + @Override + public AuthResponse refresh(AuthToken authToken) { + HttpResponse response = HttpRequest.get(refreshTokenUrl(authToken.getRefreshToken())).execute(); + return AuthResponse.builder() + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(getAuthToken(response)) .build(); } @@ -97,7 +96,7 @@ public class AuthQqRequest extends AuthDefaultRequest { /** * 返回获取userInfo的url * - * @param authToken + * @param authToken 用户授权token * @return 返回获取userInfo的url */ @Override @@ -108,4 +107,16 @@ public class AuthQqRequest extends AuthDefaultRequest { .queryParam("openid", authToken.getOpenId()) .build(); } + + private AuthToken getAuthToken(HttpResponse response) { + Map accessTokenObject = GlobalAuthUtil.parseStringToMap(response.body()); + if (!accessTokenObject.containsKey("access_token") || accessTokenObject.containsKey("code")) { + throw new AuthException(accessTokenObject.get("msg")); + } + return AuthToken.builder() + .accessToken(accessTokenObject.get("access_token")) + .expireIn(Integer.valueOf(accessTokenObject.get("expires_in"))) + .refreshToken(accessTokenObject.get("refresh_token")) + .build(); + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java index 6fb94a2..c4d4af5 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java @@ -60,7 +60,7 @@ public class AuthRenrenRequest extends AuthDefaultRequest { private AuthToken getToken(String url) { HttpResponse response = HttpRequest.post(url).execute(); JSONObject jsonObject = JSONObject.parseObject(response.body()); - if (!response.isOk()) { + if (jsonObject.containsKey("error")) { throw new AuthException("Failed to get token from Renren: " + jsonObject); } diff --git a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java index 3ce285b..3784012 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java @@ -4,11 +4,11 @@ import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; import static me.zhyd.oauth.config.AuthSource.STACK_OVERFLOW; @@ -35,9 +35,7 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest { .form(parseQueryToMap(accessTokenUrl)) .execute(); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - if (!response.isOk()) { - throw new AuthException("Unable to get token from Stack Overflow using code [" + authCallback.getCode() + "]: " + accessTokenObject); - } + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) @@ -53,7 +51,9 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest { .queryParam("key", this.config.getStackOverflowKey()) .build(); HttpResponse response = HttpRequest.get(userInfoUrl).execute(); - JSONObject userObj = JSONObject.parseObject(response.body()).getJSONArray("items").getJSONObject(0); + JSONObject object = JSONObject.parseObject(response.body()); + this.checkResponse(object); + JSONObject userObj = object.getJSONArray("items").getJSONObject(0); return AuthUser.builder() .uuid(userObj.getString("user_id")) @@ -77,4 +77,15 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest { .queryParam("scope", "read_inbox") .build(); } + + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error")) { + throw new AuthException(object.getString("error_description")); + } + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java index e5fc100..8a817c4 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java @@ -4,11 +4,11 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** @@ -28,10 +28,7 @@ public class AuthTencentCloudRequest extends AuthDefaultRequest { protected AuthToken getAccessToken(AuthCallback authCallback) { HttpResponse response = doGetAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - if (accessTokenObject.getIntValue("code") != 0) { - throw new AuthException("Unable to get token from tencent cloud using code [" + authCallback.getCode() + "]: " + accessTokenObject - .get("msg")); - } + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) .expireIn(accessTokenObject.getIntValue("expires_in")) @@ -43,9 +40,8 @@ public class AuthTencentCloudRequest extends AuthDefaultRequest { protected AuthUser getUserInfo(AuthToken authToken) { HttpResponse response = doGetUserInfo(authToken); JSONObject object = JSONObject.parseObject(response.body()); - if (object.getIntValue("code") != 0) { - throw new AuthException(object.getString("msg")); - } + this.checkResponse(object); + object = object.getJSONObject("data"); return AuthUser.builder() .uuid(object.getString("id")) @@ -63,6 +59,17 @@ public class AuthTencentCloudRequest extends AuthDefaultRequest { .build(); } + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.getIntValue("code") != 0) { + throw new AuthException(object.getString("msg")); + } + } + /** * 返回认证url,可自行跳转页面 * diff --git a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java index a810aed..85ff25e 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java @@ -5,11 +5,11 @@ import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.enums.AuthToutiaoErrorCode; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.UrlBuilder; /** @@ -30,10 +30,7 @@ public class AuthToutiaoRequest extends AuthDefaultRequest { HttpResponse response = doGetAuthorizationCode(authCallback.getCode()); JSONObject accessTokenObject = JSONObject.parseObject(response.body()); - if (accessTokenObject.containsKey("error_code")) { - throw new AuthException(AuthToutiaoErrorCode.getErrorCode(accessTokenObject.getIntValue("error_code")) - .getDesc()); - } + this.checkResponse(accessTokenObject); return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) @@ -48,9 +45,7 @@ public class AuthToutiaoRequest extends AuthDefaultRequest { JSONObject userProfile = JSONObject.parseObject(userResponse.body()); - if (userProfile.containsKey("error_code")) { - throw new AuthException(AuthToutiaoErrorCode.getErrorCode(userProfile.getIntValue("error_code")).getDesc()); - } + this.checkResponse(userProfile); JSONObject user = userProfile.getJSONObject("data"); @@ -89,7 +84,7 @@ public class AuthToutiaoRequest extends AuthDefaultRequest { /** * 返回获取accessToken的url * - * @param code + * @param code 授权码 * @return 返回获取accessToken的url */ @Override @@ -105,7 +100,7 @@ public class AuthToutiaoRequest extends AuthDefaultRequest { /** * 返回获取userInfo的url * - * @param authToken + * @param authToken 用户授权后的token * @return 返回获取userInfo的url */ @Override @@ -115,4 +110,16 @@ public class AuthToutiaoRequest extends AuthDefaultRequest { .queryParam("access_token", authToken.getAccessToken()) .build(); } + + /** + * 检查响应内容是否正确 + * + * @param object 请求响应内容 + */ + private void checkResponse(JSONObject object) { + if (object.containsKey("error_code")) { + throw new AuthException(AuthToutiaoErrorCode.getErrorCode(object.getIntValue("error_code")) + .getDesc()); + } + } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java index a3c5a64..2d426c5 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java @@ -118,7 +118,7 @@ public class AuthWeChatRequest extends AuthDefaultRequest { /** * 返回获取accessToken的url * - * @param code + * @param code 授权码 * @return 返回获取accessToken的url */ @Override @@ -134,7 +134,7 @@ public class AuthWeChatRequest extends AuthDefaultRequest { /** * 返回获取userInfo的url * - * @param authToken + * @param authToken 用户授权后的token * @return 返回获取userInfo的url */ @Override @@ -147,10 +147,10 @@ public class AuthWeChatRequest extends AuthDefaultRequest { } /** - * 返回获取accessToken的url + * 返回获取userInfo的url * - * @param refreshToken - * @return 返回获取accessToken的url + * @param refreshToken getAccessToken方法返回的refreshToken + * @return 返回获取userInfo的url */ @Override protected String refreshTokenUrl(String refreshToken) { diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java index 6f25ba1..a792573 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java @@ -5,11 +5,11 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.utils.IpUtils; import me.zhyd.oauth.utils.StringUtils; import me.zhyd.oauth.utils.UrlBuilder; @@ -34,8 +34,7 @@ public class AuthWeiboRequest extends AuthDefaultRequest { String accessTokenStr = response.body(); JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr); if (accessTokenObject.containsKey("error")) { - throw new AuthException("Unable to get token from weibo using code [" + authCallback.getCode() + "]:" + accessTokenObject - .getString("error_description")); + throw new AuthException(accessTokenObject.getString("error_description")); } return AuthToken.builder() .accessToken(accessTokenObject.getString("access_token")) diff --git a/src/test/java/me/zhyd/oauth/utils/CustomTest.java b/src/test/java/me/zhyd/oauth/utils/CustomTest.java new file mode 100644 index 0000000..eab7ddd --- /dev/null +++ b/src/test/java/me/zhyd/oauth/utils/CustomTest.java @@ -0,0 +1,63 @@ +package me.zhyd.oauth.utils; + +import org.junit.Test; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0 + * @website https://www.zhyd.me + * @date 2019/7/19 15:52 + * @since 1.8 + */ +public class CustomTest { + + /** + * 1000000: 23135ms + * 100000: 3016ms + * 10000: 328ms + * 1000: 26ms + */ + @Test + public void test() { + long start = System.currentTimeMillis(); + for (int i = 0; i < 1000; i++) { + callMethod(); + } + long end = System.currentTimeMillis(); + System.out.println((end - start) + "ms"); + + } + + /** + * 1000000: 19058ms + * 100000: 2772ms + * 10000: 323ms + * 1000: 29ms + */ + @Test + public void test2() { + long end = System.currentTimeMillis(); + for (int i = 0; i < 1000; i++) { + callMethod2(); + } + long end2 = System.currentTimeMillis(); + System.out.println((end2 - end) + "ms"); + + } + + public String callMethod() { + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); +// for (StackTraceElement stackTraceElement : stackTrace) { +// System.out.println(stackTraceElement.getMethodName()); +// } + return stackTrace[2].getMethodName(); + } + + public String callMethod2() { + StackTraceElement[] stackTrace = (new Throwable()).getStackTrace(); +// for (StackTraceElement stackTraceElement : stackTrace) { +// System.out.println(stackTraceElement.getMethodName()); +// } + return stackTrace[2].getMethodName(); + } +} diff --git a/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java b/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java index 763ee29..161031e 100644 --- a/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java +++ b/src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java @@ -17,11 +17,12 @@ import org.junit.Test; public class UrlBuilderTest { @Test public void testUrlBuilder() { - AuthConfig config = new AuthConfig(); - config.setClientId("appid-110110110"); - config.setClientSecret("secret-110110110"); - config.setRedirectUri("https://xkcoding.com"); - config.setState(AuthState.create(AuthSource.WECHAT)); + AuthConfig config = AuthConfig.builder() + .clientId("appid-110110110") + .clientSecret("secret-110110110") + .redirectUri("https://xkcoding.com") + .state(AuthState.create(AuthSource.WECHAT)) + .build(); String build = UrlBuilder.fromBaseUrl(AuthSource.WECHAT.authorize()) .queryParam("appid", config.getClientId()) .queryParam("redirect_uri", config.getRedirectUri()) diff --git a/update.md b/update.md index a7813c0..ce8152e 100644 --- a/update.md +++ b/update.md @@ -6,6 +6,8 @@ 4. 优化百度授权流程,增加refresh token的方法 5. 优化`AuthConfig`、`AuthResponse`类,去掉不必要的lombonk注解,减少编译后的代码量 6. 使用lombok注解优化枚举类 +7. `AuthQqRequest`增加refresh方法 +8. 优化代码 ### 2019/07/18