提交 666d50b4 编写于 作者: 智布道's avatar 智布道 👁

Merge branch 'master' into dev

...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</p> </p>
<p align="center"> <p align="center">
<a target="_blank" href="https://search.maven.org/search?q=JustAuth"> <a target="_blank" href="https://search.maven.org/search?q=JustAuth">
<img src="https://img.shields.io/badge/Maven Central-1.8.1-blue.svg" ></img> <img src="https://img.shields.io/badge/Maven Central-1.9.1-blue.svg" ></img>
</a> </a>
<a target="_blank" href="https://gitee.com/yadong.zhang/JustAuth/blob/master/LICENSE"> <a target="_blank" href="https://gitee.com/yadong.zhang/JustAuth/blob/master/LICENSE">
<img src="https://img.shields.io/apm/l/vim-mode.svg?color=yellow" ></img> <img src="https://img.shields.io/apm/l/vim-mode.svg?color=yellow" ></img>
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<img src="https://img.shields.io/badge/JDK-1.8+-green.svg" ></img> <img src="https://img.shields.io/badge/JDK-1.8+-green.svg" ></img>
</a> </a>
<a target="_blank" href="https://apidoc.gitee.com/yadong.zhang/JustAuth/"> <a target="_blank" href="https://apidoc.gitee.com/yadong.zhang/JustAuth/">
<img src="https://img.shields.io/badge/Docs-1.8.1-orange.svg" ></img> <img src="https://img.shields.io/badge/Docs-1.9.1-orange.svg" ></img>
</a> </a>
</p> </p>
...@@ -76,7 +76,7 @@ JustAuth,如你所见,它仅仅是一个**第三方授权登录**的**工具 ...@@ -76,7 +76,7 @@ JustAuth,如你所见,它仅仅是一个**第三方授权登录**的**工具
<dependency> <dependency>
<groupId>me.zhyd.oauth</groupId> <groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId> <artifactId>JustAuth</artifactId>
<version>1.8.1</version> <version>1.9.1</version>
</dependency> </dependency>
``` ```
- 调用api - 调用api
...@@ -148,7 +148,7 @@ _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经 ...@@ -148,7 +148,7 @@ _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经
2. 把fork过去的项目也就是你仓库中的项目clone到你的本地 2. 把fork过去的项目也就是你仓库中的项目clone到你的本地
3. 修改代码 3. 修改代码
4. commit后push到自己的库 4. commit后push到自己的库
5. 发起PR(pull request) 请求 5. 发起PR(pull request) 请求,提交到`dev`分支
6. 等待作者合并 6. 等待作者合并
## 致谢 ## 致谢
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<groupId>me.zhyd.oauth</groupId> <groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId> <artifactId>JustAuth</artifactId>
<version>1.9.0</version> <version>1.9.1</version>
<name>JustAuth</name> <name>JustAuth</name>
<url>https://gitee.com/yadong.zhang/JustAuth</url> <url>https://gitee.com/yadong.zhang/JustAuth</url>
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
<hutool-version>4.5.15</hutool-version> <hutool-version>4.5.15</hutool-version>
<lombok-version>1.18.4</lombok-version> <lombok-version>1.18.4</lombok-version>
<junit-version>4.11</junit-version> <junit-version>4.11</junit-version>
<fastjson-version>1.2.44</fastjson-version> <fastjson-version>1.2.58</fastjson-version>
<alipay-sdk-version>3.7.4.ALL</alipay-sdk-version> <alipay-sdk-version>3.7.4.ALL</alipay-sdk-version>
<slf4j-version>1.7.25</slf4j-version> <slf4j-version>1.7.25</slf4j-version>
</properties> </properties>
......
...@@ -294,7 +294,7 @@ public enum AuthSource { ...@@ -294,7 +294,7 @@ public enum AuthSource {
@Override @Override
public String userInfo() { public String userInfo() {
return "https://oauth2.googleapis.com/tokeninfo"; return "https://www.googleapis.com/oauth2/v3/userinfo";
} }
}, },
/** /**
......
...@@ -81,7 +81,7 @@ public class AuthAlipayRequest extends AuthDefaultRequest { ...@@ -81,7 +81,7 @@ public class AuthAlipayRequest extends AuthDefaultRequest {
.location(location) .location(location)
.gender(AuthUserGender.getRealGender(response.getGender())) .gender(AuthUserGender.getRealGender(response.getGender()))
.token(authToken) .token(authToken)
.source(AuthSource.ALIPAY) .source(source)
.build(); .build();
} }
......
...@@ -8,6 +8,7 @@ import me.zhyd.oauth.config.AuthSource; ...@@ -8,6 +8,7 @@ import me.zhyd.oauth.config.AuthSource;
import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.enums.AuthUserGender;
import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.model.*; import me.zhyd.oauth.model.*;
import me.zhyd.oauth.utils.StringUtils;
import me.zhyd.oauth.utils.UrlBuilder; import me.zhyd.oauth.utils.UrlBuilder;
/** /**
...@@ -39,14 +40,19 @@ public class AuthBaiduRequest extends AuthDefaultRequest { ...@@ -39,14 +40,19 @@ public class AuthBaiduRequest extends AuthDefaultRequest {
.uuid(object.getString("userid")) .uuid(object.getString("userid"))
.username(object.getString("username")) .username(object.getString("username"))
.nickname(object.getString("username")) .nickname(object.getString("username"))
.avatar(object.getString("portrait")) .avatar(getAvatar(object))
.remark(object.getString("userdetail")) .remark(object.getString("userdetail"))
.gender(AuthUserGender.getRealGender(object.getString("sex"))) .gender(AuthUserGender.getRealGender(object.getString("sex")))
.token(authToken) .token(authToken)
.source(AuthSource.BAIDU) .source(source)
.build(); .build();
} }
private String getAvatar(JSONObject object) {
String protrait = object.getString("portrait");
return StringUtils.isEmpty(protrait) ? null : String.format("http://himg.bdimg.com/sys/portrait/item/%s.jpg", protrait);
}
@Override @Override
public AuthResponse revoke(AuthToken authToken) { public AuthResponse revoke(AuthToken authToken) {
HttpResponse response = doGetRevoke(authToken); HttpResponse response = doGetRevoke(authToken);
......
...@@ -55,7 +55,7 @@ public class AuthCodingRequest extends AuthDefaultRequest { ...@@ -55,7 +55,7 @@ public class AuthCodingRequest extends AuthDefaultRequest {
.email(object.getString("email")) .email(object.getString("email"))
.remark(object.getString("slogan")) .remark(object.getString("slogan"))
.token(authToken) .token(authToken)
.source(AuthSource.CODING) .source(source)
.build(); .build();
} }
......
...@@ -44,7 +44,7 @@ public class AuthCsdnRequest extends AuthDefaultRequest { ...@@ -44,7 +44,7 @@ public class AuthCsdnRequest extends AuthDefaultRequest {
.blog(object.getString("website")) .blog(object.getString("website"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(AuthSource.CSDN) .source(source)
.build(); .build();
} }
......
...@@ -20,7 +20,6 @@ import me.zhyd.oauth.utils.UrlBuilder; ...@@ -20,7 +20,6 @@ import me.zhyd.oauth.utils.UrlBuilder;
* @version 1.0 * @version 1.0
* @since 1.8 * @since 1.8
*/ */
@Data
@Slf4j @Slf4j
public abstract class AuthDefaultRequest implements AuthRequest { public abstract class AuthDefaultRequest implements AuthRequest {
protected AuthConfig config; protected AuthConfig config;
...@@ -81,6 +80,7 @@ public abstract class AuthDefaultRequest implements AuthRequest { ...@@ -81,6 +80,7 @@ public abstract class AuthDefaultRequest implements AuthRequest {
/** /**
* 返回获取accessToken的url * 返回获取accessToken的url
* *
* @param code 授权码
* @return 返回获取accessToken的url * @return 返回获取accessToken的url
*/ */
protected String accessTokenUrl(String code) { protected String accessTokenUrl(String code) {
...@@ -96,6 +96,7 @@ public abstract class AuthDefaultRequest implements AuthRequest { ...@@ -96,6 +96,7 @@ public abstract class AuthDefaultRequest implements AuthRequest {
/** /**
* 返回获取accessToken的url * 返回获取accessToken的url
* *
* @param refreshToken refreshToken
* @return 返回获取accessToken的url * @return 返回获取accessToken的url
*/ */
protected String refreshTokenUrl(String refreshToken) { protected String refreshTokenUrl(String refreshToken) {
...@@ -111,6 +112,7 @@ public abstract class AuthDefaultRequest implements AuthRequest { ...@@ -111,6 +112,7 @@ public abstract class AuthDefaultRequest implements AuthRequest {
/** /**
* 返回获取userInfo的url * 返回获取userInfo的url
* *
* @param authToken token
* @return 返回获取userInfo的url * @return 返回获取userInfo的url
*/ */
protected String userInfoUrl(AuthToken authToken) { protected String userInfoUrl(AuthToken authToken) {
...@@ -120,6 +122,7 @@ public abstract class AuthDefaultRequest implements AuthRequest { ...@@ -120,6 +122,7 @@ public abstract class AuthDefaultRequest implements AuthRequest {
/** /**
* 返回获取revoke authorization的url * 返回获取revoke authorization的url
* *
* @param authToken token
* @return 返回获取revoke authorization的url * @return 返回获取revoke authorization的url
*/ */
protected String revokeUrl(AuthToken authToken) { protected String revokeUrl(AuthToken authToken) {
......
...@@ -52,7 +52,7 @@ public class AuthDingTalkRequest extends AuthDefaultRequest { ...@@ -52,7 +52,7 @@ public class AuthDingTalkRequest extends AuthDefaultRequest {
.nickname(object.getString("nick")) .nickname(object.getString("nick"))
.username(object.getString("nick")) .username(object.getString("nick"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.source(AuthSource.DINGTALK) .source(source)
.token(token) .token(token)
.build(); .build();
} }
...@@ -76,7 +76,7 @@ public class AuthDingTalkRequest extends AuthDefaultRequest { ...@@ -76,7 +76,7 @@ public class AuthDingTalkRequest extends AuthDefaultRequest {
/** /**
* 返回获取userInfo的url * 返回获取userInfo的url
* *
* @param authToken * @param authToken 用户授权后的token
* @return 返回获取userInfo的url * @return 返回获取userInfo的url
*/ */
@Override @Override
......
...@@ -42,7 +42,7 @@ public class AuthDouyinRequest extends AuthDefaultRequest { ...@@ -42,7 +42,7 @@ public class AuthDouyinRequest extends AuthDefaultRequest {
.remark(userInfoObject.getString("description")) .remark(userInfoObject.getString("description"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(AuthSource.DOUYIN) .source(source)
.build(); .build();
} }
......
...@@ -51,7 +51,7 @@ public class AuthFacebookRequest extends AuthDefaultRequest { ...@@ -51,7 +51,7 @@ public class AuthFacebookRequest extends AuthDefaultRequest {
.email(object.getString("email")) .email(object.getString("email"))
.gender(AuthUserGender.getRealGender(object.getString("gender"))) .gender(AuthUserGender.getRealGender(object.getString("gender")))
.token(authToken) .token(authToken)
.source(AuthSource.FACEBOOK) .source(source)
.build(); .build();
} }
......
...@@ -55,7 +55,7 @@ public class AuthGiteeRequest extends AuthDefaultRequest { ...@@ -55,7 +55,7 @@ public class AuthGiteeRequest extends AuthDefaultRequest {
.remark(object.getString("bio")) .remark(object.getString("bio"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(AuthSource.GITEE) .source(source)
.build(); .build();
} }
......
...@@ -9,6 +9,9 @@ import me.zhyd.oauth.exception.AuthException; ...@@ -9,6 +9,9 @@ import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.utils.GlobalAuthUtil;
import java.util.Map;
/** /**
* Github登录 * Github登录
...@@ -26,12 +29,14 @@ public class AuthGithubRequest extends AuthDefaultRequest { ...@@ -26,12 +29,14 @@ public class AuthGithubRequest extends AuthDefaultRequest {
@Override @Override
protected AuthToken getAccessToken(AuthCallback authCallback) { protected AuthToken getAccessToken(AuthCallback authCallback) {
HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); HttpResponse response = doPostAuthorizationCode(authCallback.getCode());
JSONObject accessTokenObject = JSONObject.parseObject(response.body()); Map<String, String> res = GlobalAuthUtil.parseStringToMap(response.body());
this.checkResponse(accessTokenObject); if (res.containsKey("error")) {
throw new AuthException(res.get("error") + ":" + res.get("error_description"));
}
return AuthToken.builder() return AuthToken.builder()
.accessToken(accessTokenObject.getString("access_token")) .accessToken(res.get("access_token"))
.scope(accessTokenObject.getString("scope")) .scope(res.get("scope"))
.tokenType(accessTokenObject.getString("token_type")) .tokenType(res.get("token_type"))
.build(); .build();
} }
...@@ -39,7 +44,9 @@ public class AuthGithubRequest extends AuthDefaultRequest { ...@@ -39,7 +44,9 @@ public class AuthGithubRequest extends AuthDefaultRequest {
protected AuthUser getUserInfo(AuthToken authToken) { protected AuthUser getUserInfo(AuthToken authToken) {
HttpResponse response = doGetUserInfo(authToken); HttpResponse response = doGetUserInfo(authToken);
JSONObject object = JSONObject.parseObject(response.body()); JSONObject object = JSONObject.parseObject(response.body());
this.checkResponse(object); if (object.containsKey("error")) {
throw new AuthException(object.getString("error_description"));
}
return AuthUser.builder() return AuthUser.builder()
.uuid(object.getString("id")) .uuid(object.getString("id"))
.username(object.getString("login")) .username(object.getString("login"))
...@@ -52,7 +59,7 @@ public class AuthGithubRequest extends AuthDefaultRequest { ...@@ -52,7 +59,7 @@ public class AuthGithubRequest extends AuthDefaultRequest {
.remark(object.getString("bio")) .remark(object.getString("bio"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(AuthSource.GITHUB) .source(source)
.build(); .build();
} }
...@@ -62,8 +69,6 @@ public class AuthGithubRequest extends AuthDefaultRequest { ...@@ -62,8 +69,6 @@ public class AuthGithubRequest extends AuthDefaultRequest {
* @param object 请求响应内容 * @param object 请求响应内容
*/ */
private void checkResponse(JSONObject object) { private void checkResponse(JSONObject object) {
if (object.containsKey("error")) {
throw new AuthException(object.getString("error_description"));
}
} }
} }
package me.zhyd.oauth.request; package me.zhyd.oauth.request;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthConfig;
...@@ -40,25 +41,28 @@ public class AuthGoogleRequest extends AuthDefaultRequest { ...@@ -40,25 +41,28 @@ public class AuthGoogleRequest extends AuthDefaultRequest {
@Override @Override
protected AuthUser getUserInfo(AuthToken authToken) { protected AuthUser getUserInfo(AuthToken authToken) {
HttpResponse response = doGetUserInfo(authToken); HttpResponse response = HttpRequest.post(userInfoUrl(authToken))
.header("Authorization", "Bearer " + authToken.getAccessToken())
.execute();
String userInfo = response.body(); String userInfo = response.body();
JSONObject object = JSONObject.parseObject(userInfo); JSONObject object = JSONObject.parseObject(userInfo);
this.checkResponse(object); this.checkResponse(object);
return AuthUser.builder() return AuthUser.builder()
.uuid(object.getString("sub")) .uuid(object.getString("sub"))
.username(object.getString("name")) .username(object.getString("email"))
.avatar(object.getString("picture")) .avatar(object.getString("picture"))
.nickname(object.getString("name")) .nickname(object.getString("name"))
.location(object.getString("locale")) .location(object.getString("locale"))
.email(object.getString("email")) .email(object.getString("email"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(AuthSource.GOOGLE) .source(source)
.build(); .build();
} }
/** /**
* 返回认证url,可自行跳转页面 * 返回认证url,可自行跳转页面
* https://openidconnect.googleapis.com/v1/userinfo
* *
* @return 返回授权地址 * @return 返回授权地址
*/ */
...@@ -76,12 +80,12 @@ public class AuthGoogleRequest extends AuthDefaultRequest { ...@@ -76,12 +80,12 @@ public class AuthGoogleRequest extends AuthDefaultRequest {
/** /**
* 返回获取userInfo的url * 返回获取userInfo的url
* *
* @param authToken * @param authToken 用户授权后的token
* @return 返回获取userInfo的url * @return 返回获取userInfo的url
*/ */
@Override @Override
protected String userInfoUrl(AuthToken authToken) { protected String userInfoUrl(AuthToken authToken) {
return UrlBuilder.fromBaseUrl(source.userInfo()).queryParam("id_token", authToken.getAccessToken()).build(); return UrlBuilder.fromBaseUrl(source.userInfo()).queryParam("access_token", authToken.getAccessToken()).build();
} }
/** /**
...@@ -91,7 +95,7 @@ public class AuthGoogleRequest extends AuthDefaultRequest { ...@@ -91,7 +95,7 @@ public class AuthGoogleRequest extends AuthDefaultRequest {
*/ */
private void checkResponse(JSONObject object) { private void checkResponse(JSONObject object) {
if (object.containsKey("error") || object.containsKey("error_description")) { if (object.containsKey("error") || object.containsKey("error_description")) {
throw new AuthException(object.getString("error_description")); throw new AuthException(object.containsKey("error") + ":" + object.getString("error_description"));
} }
} }
} }
...@@ -4,6 +4,7 @@ import cn.hutool.http.HttpRequest; ...@@ -4,6 +4,7 @@ import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;
import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.config.AuthSource;
import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.enums.AuthUserGender;
...@@ -120,13 +121,8 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { ...@@ -120,13 +121,8 @@ public class AuthLinkedinRequest extends AuthDefaultRequest {
.execute(); .execute();
JSONObject emailObj = JSONObject.parseObject(emailResponse.body()); JSONObject emailObj = JSONObject.parseObject(emailResponse.body());
this.checkResponse(emailObj); this.checkResponse(emailObj);
if (emailObj.containsKey("elements")) { Object obj = JSONPath.eval(emailObj, "$['elements'][0]['handle~']['emailAddress']");
email = emailObj.getJSONArray("elements") return null == obj ? null : (String) obj;
.getJSONObject(0)
.getJSONObject("handle~")
.getString("emailAddress");
}
return email;
} }
private String getUserName(JSONObject userInfoObject, String nameKey) { private String getUserName(JSONObject userInfoObject, String nameKey) {
...@@ -204,7 +200,7 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { ...@@ -204,7 +200,7 @@ public class AuthLinkedinRequest extends AuthDefaultRequest {
/** /**
* 返回获取userInfo的url * 返回获取userInfo的url
* *
* @param authToken * @param authToken 用户授权后的token
* @return 返回获取userInfo的url * @return 返回获取userInfo的url
*/ */
@Override @Override
......
...@@ -75,7 +75,7 @@ public class AuthMiRequest extends AuthDefaultRequest { ...@@ -75,7 +75,7 @@ public class AuthMiRequest extends AuthDefaultRequest {
.email(user.getString("mail")) .email(user.getString("mail"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(AuthSource.MI) .source(source)
.build(); .build();
// 获取用户邮箱手机号等信息 // 获取用户邮箱手机号等信息
...@@ -128,7 +128,7 @@ public class AuthMiRequest extends AuthDefaultRequest { ...@@ -128,7 +128,7 @@ public class AuthMiRequest extends AuthDefaultRequest {
/** /**
* 返回获取userInfo的url * 返回获取userInfo的url
* *
* @param authToken * @param authToken 用户授权后的token
* @return 返回获取userInfo的url * @return 返回获取userInfo的url
*/ */
@Override @Override
......
...@@ -83,7 +83,7 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { ...@@ -83,7 +83,7 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest {
.email(object.getString("mail")) .email(object.getString("mail"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(AuthSource.MICROSOFT) .source(source)
.build(); .build();
} }
...@@ -139,7 +139,7 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { ...@@ -139,7 +139,7 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest {
/** /**
* 返回获取userInfo的url * 返回获取userInfo的url
* *
* @param authToken * @param authToken 用户授权后的token
* @return 返回获取userInfo的url * @return 返回获取userInfo的url
*/ */
@Override @Override
...@@ -150,7 +150,7 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest { ...@@ -150,7 +150,7 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest {
/** /**
* 返回获取accessToken的url * 返回获取accessToken的url
* *
* @param refreshToken * @param refreshToken 用户授权后的token
* @return 返回获取accessToken的url * @return 返回获取accessToken的url
*/ */
@Override @Override
......
...@@ -52,7 +52,7 @@ public class AuthOschinaRequest extends AuthDefaultRequest { ...@@ -52,7 +52,7 @@ public class AuthOschinaRequest extends AuthDefaultRequest {
.gender(AuthUserGender.getRealGender(object.getString("gender"))) .gender(AuthUserGender.getRealGender(object.getString("gender")))
.email(object.getString("email")) .email(object.getString("email"))
.token(authToken) .token(authToken)
.source(AuthSource.OSCHINA) .source(source)
.build(); .build();
} }
...@@ -77,7 +77,7 @@ public class AuthOschinaRequest extends AuthDefaultRequest { ...@@ -77,7 +77,7 @@ public class AuthOschinaRequest extends AuthDefaultRequest {
/** /**
* 返回获取userInfo的url * 返回获取userInfo的url
* *
* @param authToken * @param authToken 用户授权后的token
* @return 返回获取userInfo的url * @return 返回获取userInfo的url
*/ */
@Override @Override
......
...@@ -20,7 +20,7 @@ import static me.zhyd.oauth.config.AuthSource.PINTEREST; ...@@ -20,7 +20,7 @@ import static me.zhyd.oauth.config.AuthSource.PINTEREST;
* *
* @author hongwei.peng (pengisgood(at)gmail(dot)com) * @author hongwei.peng (pengisgood(at)gmail(dot)com)
* @version 1.9.0 * @version 1.9.0
* @since 1.9.0 * @since 1.8
*/ */
public class AuthPinterestRequest extends AuthDefaultRequest { public class AuthPinterestRequest extends AuthDefaultRequest {
...@@ -43,10 +43,8 @@ public class AuthPinterestRequest extends AuthDefaultRequest { ...@@ -43,10 +43,8 @@ public class AuthPinterestRequest extends AuthDefaultRequest {
@Override @Override
protected AuthUser getUserInfo(AuthToken authToken) { protected AuthUser getUserInfo(AuthToken authToken) {
String userinfoUrl = UrlBuilder.fromBaseUrl(userInfoUrl(authToken)) String userinfoUrl = userInfoUrl(authToken);
.queryParam("fields", "id,username,first_name,last_name,bio,image") HttpResponse response = HttpRequest.get(userinfoUrl).setFollowRedirects(true).execute();
.build();
HttpResponse response = HttpRequest.post(userinfoUrl).execute();
JSONObject object = JSONObject.parseObject(response.body()); JSONObject object = JSONObject.parseObject(response.body());
this.checkResponse(object); this.checkResponse(object);
JSONObject userObj = object.getJSONObject("data"); JSONObject userObj = object.getJSONObject("data");
...@@ -58,7 +56,7 @@ public class AuthPinterestRequest extends AuthDefaultRequest { ...@@ -58,7 +56,7 @@ public class AuthPinterestRequest extends AuthDefaultRequest {
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.remark(userObj.getString("bio")) .remark(userObj.getString("bio"))
.token(authToken) .token(authToken)
.source(PINTEREST) .source(source)
.build(); .build();
} }
...@@ -82,6 +80,19 @@ public class AuthPinterestRequest extends AuthDefaultRequest { ...@@ -82,6 +80,19 @@ public class AuthPinterestRequest extends AuthDefaultRequest {
.build(); .build();
} }
/**
* 返回获取userInfo的url
*
* @param authToken token
* @return 返回获取userInfo的url
*/
protected String userInfoUrl(AuthToken authToken) {
return UrlBuilder.fromBaseUrl(source.userInfo())
.queryParam("access_token", authToken.getAccessToken())
.queryParam("fields", "id,username,first_name,last_name,bio,image")
.build();
}
/** /**
* 检查响应内容是否正确 * 检查响应内容是否正确
* *
......
...@@ -65,7 +65,7 @@ public class AuthQqRequest extends AuthDefaultRequest { ...@@ -65,7 +65,7 @@ public class AuthQqRequest extends AuthDefaultRequest {
.uuid(openId) .uuid(openId)
.gender(AuthUserGender.getRealGender(object.getString("gender"))) .gender(AuthUserGender.getRealGender(object.getString("gender")))
.token(authToken) .token(authToken)
.source(AuthSource.QQ) .source(source)
.build(); .build();
} }
......
...@@ -19,8 +19,8 @@ import static me.zhyd.oauth.model.AuthResponseStatus.SUCCESS; ...@@ -19,8 +19,8 @@ import static me.zhyd.oauth.model.AuthResponseStatus.SUCCESS;
* 人人登录 * 人人登录
* *
* @author hongwei.peng (pengisgood(at)gmail(dot)com) * @author hongwei.peng (pengisgood(at)gmail(dot)com)
* @version 1.8.1 * @version 1.9.0
* @since 1.8.1 * @since 1.8
*/ */
public class AuthRenrenRequest extends AuthDefaultRequest { public class AuthRenrenRequest extends AuthDefaultRequest {
...@@ -45,7 +45,7 @@ public class AuthRenrenRequest extends AuthDefaultRequest { ...@@ -45,7 +45,7 @@ public class AuthRenrenRequest extends AuthDefaultRequest {
.company(getCompany(userObj)) .company(getCompany(userObj))
.gender(getGender(userObj)) .gender(getGender(userObj))
.token(authToken) .token(authToken)
.source(RENREN) .source(source)
.build(); .build();
} }
...@@ -100,7 +100,7 @@ public class AuthRenrenRequest extends AuthDefaultRequest { ...@@ -100,7 +100,7 @@ public class AuthRenrenRequest extends AuthDefaultRequest {
/** /**
* 返回获取userInfo的url * 返回获取userInfo的url
* *
* @param authToken * @param authToken 用户授权后的token
* @return 返回获取userInfo的url * @return 返回获取userInfo的url
*/ */
@Override @Override
......
...@@ -19,7 +19,7 @@ import static me.zhyd.oauth.utils.GlobalAuthUtil.parseQueryToMap; ...@@ -19,7 +19,7 @@ import static me.zhyd.oauth.utils.GlobalAuthUtil.parseQueryToMap;
* *
* @author hongwei.peng (pengisgood(at)gmail(dot)com) * @author hongwei.peng (pengisgood(at)gmail(dot)com)
* @version 1.9.0 * @version 1.9.0
* @since 1.9.0 * @since 1.8
*/ */
public class AuthStackOverflowRequest extends AuthDefaultRequest { public class AuthStackOverflowRequest extends AuthDefaultRequest {
...@@ -63,7 +63,7 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest { ...@@ -63,7 +63,7 @@ public class AuthStackOverflowRequest extends AuthDefaultRequest {
.blog(userObj.getString("website_url")) .blog(userObj.getString("website_url"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(STACK_OVERFLOW) .source(source)
.build(); .build();
} }
......
...@@ -50,7 +50,7 @@ public class AuthTaobaoRequest extends AuthDefaultRequest { ...@@ -50,7 +50,7 @@ public class AuthTaobaoRequest extends AuthDefaultRequest {
.nickname(nick) .nickname(nick)
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(AuthSource.TAOBAO) .source(source)
.build(); .build();
} }
......
...@@ -67,7 +67,7 @@ public class AuthTeambitionRequest extends AuthDefaultRequest { ...@@ -67,7 +67,7 @@ public class AuthTeambitionRequest extends AuthDefaultRequest {
.email(object.getString("email")) .email(object.getString("email"))
.gender(AuthUserGender.UNKNOWN) .gender(AuthUserGender.UNKNOWN)
.token(authToken) .token(authToken)
.source(AuthSource.TEAMBITION) .source(source)
.build(); .build();
} }
......
...@@ -55,7 +55,7 @@ public class AuthTencentCloudRequest extends AuthDefaultRequest { ...@@ -55,7 +55,7 @@ public class AuthTencentCloudRequest extends AuthDefaultRequest {
.email(object.getString("email")) .email(object.getString("email"))
.remark(object.getString("slogan")) .remark(object.getString("slogan"))
.token(authToken) .token(authToken)
.source(AuthSource.TENCENT_CLOUD) .source(source)
.build(); .build();
} }
......
...@@ -60,7 +60,7 @@ public class AuthToutiaoRequest extends AuthDefaultRequest { ...@@ -60,7 +60,7 @@ public class AuthToutiaoRequest extends AuthDefaultRequest {
.remark(user.getString("description")) .remark(user.getString("description"))
.gender(AuthUserGender.getRealGender(user.getString("gender"))) .gender(AuthUserGender.getRealGender(user.getString("gender")))
.token(authToken) .token(authToken)
.source(AuthSource.TOUTIAO) .source(source)
.build(); .build();
} }
......
...@@ -56,7 +56,7 @@ public class AuthWeChatRequest extends AuthDefaultRequest { ...@@ -56,7 +56,7 @@ public class AuthWeChatRequest extends AuthDefaultRequest {
.uuid(openId) .uuid(openId)
.gender(AuthUserGender.getRealGender(object.getString("sex"))) .gender(AuthUserGender.getRealGender(object.getString("sex")))
.token(authToken) .token(authToken)
.source(AuthSource.WECHAT) .source(source)
.build(); .build();
} }
......
...@@ -69,14 +69,14 @@ public class AuthWeiboRequest extends AuthDefaultRequest { ...@@ -69,14 +69,14 @@ public class AuthWeiboRequest extends AuthDefaultRequest {
.remark(object.getString("description")) .remark(object.getString("description"))
.gender(AuthUserGender.getRealGender(object.getString("gender"))) .gender(AuthUserGender.getRealGender(object.getString("gender")))
.token(authToken) .token(authToken)
.source(AuthSource.WEIBO) .source(source)
.build(); .build();
} }
/** /**
* 返回获取userInfo的url * 返回获取userInfo的url
* *
* @param authToken * @param authToken authToken
* @return 返回获取userInfo的url * @return 返回获取userInfo的url
*/ */
@Override @Override
......
...@@ -26,6 +26,9 @@ public class AuthChecker { ...@@ -26,6 +26,9 @@ public class AuthChecker {
if (isSupported && AuthSource.ALIPAY == source) { if (isSupported && AuthSource.ALIPAY == source) {
isSupported = StringUtils.isNotEmpty(config.getAlipayPublicKey()); isSupported = StringUtils.isNotEmpty(config.getAlipayPublicKey());
} }
if (isSupported && AuthSource.STACK_OVERFLOW == source) {
isSupported = StringUtils.isNotEmpty(config.getStackOverflowKey());
}
return isSupported; return isSupported;
} }
......
...@@ -45,7 +45,7 @@ public class GlobalAuthUtil { ...@@ -45,7 +45,7 @@ public class GlobalAuthUtil {
} }
} }
private static String urlEncode(String value) { public static String urlEncode(String value) {
if (value == null) { if (value == null) {
return ""; return "";
} }
......
...@@ -14,7 +14,6 @@ import java.util.Map; ...@@ -14,7 +14,6 @@ import java.util.Map;
* </p> * </p>
* *
* @author yangkai.shen (https://xkcoding.com) * @author yangkai.shen (https://xkcoding.com)
* @date Created in 2019-07-18 15:47
* @version 1.0 * @version 1.0
* @since 1.8 * @since 1.8
*/ */
......
package me.zhyd.oauth.utils; package me.zhyd.oauth.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;
import org.junit.Test; import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @author yadong.zhang (yadong.zhang0415(a)gmail.com) * @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0 * @version 1.0
...@@ -60,4 +69,22 @@ public class CustomTest { ...@@ -60,4 +69,22 @@ public class CustomTest {
// } // }
return stackTrace[2].getMethodName(); return stackTrace[2].getMethodName();
} }
@Test
public void jsonpath(){
List<Map<String, Map<String, Object>>> list = new ArrayList<>();
Map<String, Map<String, Object>> map = new HashMap<>();
Map<String, Object> node = new HashMap<>();
node.put("emailAddress", "xxxx");
map.put("handle~", node);
list.add(map);
Map<String, Object> master = new HashMap<>();
// master.put("elements", list);
JSONObject emailObj = JSONObject.parseObject(JSON.toJSONString(master));
Object object = JSONPath.eval(emailObj, "$['elements'][0]['handle~']['emailAddress']");
System.out.println(object);
}
} }
### 2019/07/19 ### 2019/07/19
1. 增加`stackoverflow`参数校验
2. 解决`Pinterest`获取用户失败的问题
3. 添加注释
### 2019/07/19
1. 合并github上[@dyc12ii](https://github.com/dyc12ii)[pr#25](https://github.com/zhangyd-c/JustAuth/pull/25),升级fastjson版本至1.2.58,避免安全漏洞 1. 合并github上[@dyc12ii](https://github.com/dyc12ii)[pr#25](https://github.com/zhangyd-c/JustAuth/pull/25),升级fastjson版本至1.2.58,避免安全漏洞
2. `AuthUserGender`枚举类挪到`enums`包下 2. `AuthUserGender`枚举类挪到`enums`包下
3. 删除`AuthBaiduErrorCode``AuthDingTalkErrorCode`枚举类 3. 删除`AuthBaiduErrorCode``AuthDingTalkErrorCode`枚举类
...@@ -7,7 +13,8 @@ ...@@ -7,7 +13,8 @@
5. 优化`AuthConfig``AuthResponse`类,去掉不必要的lombonk注解,减少编译后的代码量 5. 优化`AuthConfig``AuthResponse`类,去掉不必要的lombonk注解,减少编译后的代码量
6. 使用lombok注解优化枚举类 6. 使用lombok注解优化枚举类
7. `AuthQqRequest`增加refresh方法 7. `AuthQqRequest`增加refresh方法
8. 优化代码 8. 修复google登录无法获取用户信息的问题
9. 优化代码
### 2019/07/18 ### 2019/07/18
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册