diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index edde04d4292d8f45b65777ba5cb146024845b8ea..f408265a98906e16aba0800b49d797b10fc4bfd2 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/model/AuthUserGender.java b/src/main/java/me/zhyd/oauth/model/AuthUserGender.java index 910a66ab8581b9244a964c05967ad3c94dc79fcb..04abe03b1a0c015ac774d23ce0523955c86fc457 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,17 +21,17 @@ public enum AuthUserGender { public static AuthUserGender getRealGender(String code) { if (code == null) { - return UNKNOW; + return UNKNOWN; } - 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; + 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 fa0ca0ab974348faa095cbe6f77eee8a5ae2860f..012eccc5cfbbc30d9b4cae7b2a79a0657042dd98 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 d61912c6127c77ddec7256335c8ace86d2ec8b21..88f61de15cf9b07ca8b58b817e618db0f30e4f6c 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 338c1f553651194c60f2c36db954a2a167bc87dc..feabc7522fc1403563fc6596b9ffd6170c1d221c 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 41368caaef0f116210eb9e568fc77252438e3213..88db0cdc6922cd3a995147f3e1a24469e53a637f 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 76b1d230c459548792f3381fb0064e62561ecb42..5bccd1e220437cc21f55a1ac973fe06421d3e4f0 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 6935060252e12dd7d5fc97425e6198397374ee6d..62ed5f0a1f1c06638fa40bab199511a48ec31811 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 e6d413005c496912a12fa6c07927edb8fb4f2aab..110647f98f70b55b022c4cbafd9ac78cda675e22 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 27ad736188a0eb87aa510304a9c6b44bc4d24532..296b17cfe3ca4751f4d496bd6f8039f61c2d0b5e 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 7b2dec1b07d16336aa7f50b98917f8a948b990e6..da30f93c2199202e0eb68dba1f0a869b72693452 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 new file mode 100644 index 0000000000000000000000000000000000000000..dc74e89d2af73ca6d6a4bb7a4975cffed2afef9f --- /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.UNKNOWN; + } + 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/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index 0fedca49320b56e8e9abe62a77ea2b27a7c8d64f..cf205909ac21001f7ba1b0a2e944eedc0e6525f0 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 83fc1cd7eb60b04c0258ed290b672e1e41cad899..673db4070cc97ac9ff01c2a6351898d2d243f921 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(); 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 0000000000000000000000000000000000000000..6417f114b98b65aabfac2b91de530a18d048659b --- /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); + } +}