mirror of
https://gitee.com/yadong.zhang/JustAuth.git
synced 2026-01-07 19:31:48 +08:00
✨ 支持Coding、Csdn和OSChina
This commit is contained in:
parent
1312e69b05
commit
7892f7e547
10
README.md
10
README.md
@ -24,8 +24,10 @@
|
||||
<td align="center" width="200"><a href="https://github.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/github.png" width="30"></a></td>
|
||||
<td align="center" width="200"><a href="https://weibo.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/weibo.png" width="30"></a></td>
|
||||
<td align="center" width="200"><a href="https://www.dingtalk.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/dingding.png" width="30"></a></td>
|
||||
<td align="center" width="200"><a href="https://www.dingtalk.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/baidu.png" width="30"></a></td>
|
||||
<td align="center" width="200"><a href="https://developer.baidu.com/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/baidu.png" width="30"></a></td>
|
||||
<td align="center" width="200"><a href="https://www.csdn.net/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/csdn.png" width="30"></a></td>
|
||||
<td align="center" width="200"><a href="https://coding.net"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/coding.png" width="30"></a></td>
|
||||
<td align="center" width="200"><a href="https://www.oschina.net"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/oschinas.png" width="30"></a></td>
|
||||
<td align="center" width="200"><a href="https://connect.qq.com/devuser.html#/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/qq.png" width="30"></a></td>
|
||||
<td align="center" width="200"><a href="https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/wechats.png" width="30"></a></td>
|
||||
</tr>
|
||||
@ -38,6 +40,8 @@
|
||||
<td align="center" width="200"><a href="#授权钉钉">钉钉</a></td>
|
||||
<td align="center" width="200"><a href="#授权百度">百度</a></td>
|
||||
<td align="center" width="200"><a href="#授权CSDN">CSDN</a></td>
|
||||
<td align="center" width="200"><a href="#授权Coding">Coding</a></td>
|
||||
<td align="center" width="200"><a href="#授权OSChina">OSChina</a></td>
|
||||
<td align="center" width="200"><a href="#授权QQ">QQ</a></td>
|
||||
<td align="center" width="200"><a href="#授权微信">微信</a></td>
|
||||
</tr>
|
||||
@ -83,7 +87,9 @@ authRequest.login("code");
|
||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/weibo.png" width="20"> | [AuthWeiboRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java) | <a href="https://open.weibo.com/apps?_blank" target="_blank">参考文档</a> |
|
||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/dingding.png" width="20"> | [AuthDingTalkRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java) | <a href="https://open-doc.dingtalk.com/microapp/serverapi2/kymkv6" target="_blank">参考文档</a> |
|
||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/baidu.png" width="20"> | [AuthBaiduRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java) | <a href="https://developer.baidu.com/" target="_blank">参考文档</a> |
|
||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/csdn.png" width="20"> | AuthCsdnRequest | 待续 |
|
||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/csdn.png" width="20"> | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 待续 |
|
||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/coding.png" width="25"> | [AuthCodingRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java) | <a href="https://open.coding.net/references/oauth/" target="_blank">参考文档</a> |
|
||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/oschinas.png" width="20"> | [AuthOschinaRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java) | <a href="https://www.oschina.net/openapi/docs/openapi_user" target="_blank">参考文档</a> |
|
||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/qq.png" width="20"> | AuthQqRequest | <a href="https://connect.qq.com/" target="_blank">参考文档</a> |
|
||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/wechats.png" width="20"> | AuthWechatRequest | 待续 |
|
||||
|
||||
|
||||
6
pom.xml
6
pom.xml
@ -45,6 +45,7 @@
|
||||
<junit-version>4.11</junit-version>
|
||||
<servlet-api-version>2.5</servlet-api-version>
|
||||
<fastjson-version>1.2.44</fastjson-version>
|
||||
<google-api-version>1.28.0</google-api-version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@ -74,6 +75,11 @@
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>${fastjson-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.api-client</groupId>
|
||||
<artifactId>google-api-client</artifactId>
|
||||
<version>${google-api-version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -86,4 +86,49 @@ public class ApiUrlConst {
|
||||
*/
|
||||
public static final String BAIDU_REVOKE_URL = "https://openapi.baidu.com/rest/2.0/passport/auth/revokeAuthorization";
|
||||
|
||||
/**
|
||||
* 获取csdn access_token的地址
|
||||
*/
|
||||
public static final String CSDN_ACCESS_TOKEN_URL = "https://api.csdn.net/oauth2/access_token";
|
||||
|
||||
/**
|
||||
* 获取csdn用户信息的地址
|
||||
*/
|
||||
public static final String CSDN_USER_INFO_URL = "https://api.csdn.net/user/getinfo";
|
||||
|
||||
/**
|
||||
* 获取csdn授权地址
|
||||
*/
|
||||
public static final String CSDN_AUTHORIZE_URL = "https://api.csdn.net/oauth2/authorize";
|
||||
|
||||
/**
|
||||
* 获取coding access_token的地址
|
||||
*/
|
||||
public static final String CODING_ACCESS_TOKEN_URL = "https://coding.net/api/oauth/access_token";
|
||||
|
||||
/**
|
||||
* 获取coding用户信息的地址
|
||||
*/
|
||||
public static final String CODING_USER_INFO_URL = "https://coding.net/api/account/current_user";
|
||||
|
||||
/**
|
||||
* 获取coding授权地址
|
||||
*/
|
||||
public static final String CODING_AUTHORIZE_URL = "https://coding.net/oauth_authorize.html";
|
||||
|
||||
/**
|
||||
* 获取oschina access_token的地址
|
||||
*/
|
||||
public static final String OSCHINA_ACCESS_TOKEN_URL = "https://www.oschina.net/action/openapi/token";
|
||||
|
||||
/**
|
||||
* 获取oschina用户信息的地址
|
||||
*/
|
||||
public static final String OSCHINA_USER_INFO_URL = "https://www.oschina.net/action/openapi/user";
|
||||
|
||||
/**
|
||||
* 获取oschina授权地址
|
||||
*/
|
||||
public static final String OSCHINA_AUTHORIZE_URL = "https://www.oschina.net/action/oauth2/authorize";
|
||||
|
||||
}
|
||||
|
||||
@ -13,6 +13,10 @@ public enum AuthSource {
|
||||
WEIBO,
|
||||
DINGTALK,
|
||||
BAIDU,
|
||||
CSDN,
|
||||
CODING,
|
||||
OSCHINA,
|
||||
|
||||
QQ,
|
||||
WECHAT,
|
||||
GOOGLE,
|
||||
|
||||
58
src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java
Normal file
58
src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java
Normal file
@ -0,0 +1,58 @@
|
||||
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.AuthSource;
|
||||
import me.zhyd.oauth.model.AuthUser;
|
||||
import me.zhyd.oauth.model.AuthUserGender;
|
||||
import me.zhyd.oauth.utils.UrlBuilder;
|
||||
|
||||
/**
|
||||
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
|
||||
* @version 1.0
|
||||
* @website https://www.zhyd.me
|
||||
* @date 2019/2/23 15:48
|
||||
* @since 1.8
|
||||
*/
|
||||
public class AuthCodingRequest extends BaseAuthRequest {
|
||||
|
||||
public AuthCodingRequest(AuthConfig config) {
|
||||
super(config, AuthSource.CODING);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getAccessToken(String code) {
|
||||
String accessTokenUrl = UrlBuilder.getCodingAccessTokenUrl(config.getClientId(), config.getClientSecret(), code);
|
||||
HttpResponse response = HttpRequest.post(accessTokenUrl).execute();
|
||||
JSONObject accessTokenObject = JSONObject.parseObject(response.body());
|
||||
if (accessTokenObject.getIntValue("code") != 0) {
|
||||
throw new AuthException("Unable to get token from coding using code [" + code + "]");
|
||||
}
|
||||
return accessTokenObject.getString("access_token");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AuthUser getUserInfo(String accessToken) {
|
||||
HttpResponse response = HttpRequest.get(UrlBuilder.getCodingUserInfoUrl(accessToken)).execute();
|
||||
JSONObject object = JSONObject.parseObject(response.body());
|
||||
if (object.getIntValue("code") != 0) {
|
||||
throw new AuthException(object.getString("msg"));
|
||||
}
|
||||
return AuthUser.builder()
|
||||
.username(object.getString("name"))
|
||||
.avatar(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"))
|
||||
.accessToken(accessToken)
|
||||
.source(AuthSource.CODING)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
49
src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java
Normal file
49
src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java
Normal file
@ -0,0 +1,49 @@
|
||||
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.AuthSource;
|
||||
import me.zhyd.oauth.model.AuthUser;
|
||||
import me.zhyd.oauth.utils.UrlBuilder;
|
||||
|
||||
/**
|
||||
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
|
||||
* @version 1.0
|
||||
* @website https://www.zhyd.me
|
||||
* @date 2019/2/23 15:00
|
||||
* @since 1.8
|
||||
*/
|
||||
public class AuthCsdnRequest extends BaseAuthRequest {
|
||||
|
||||
public AuthCsdnRequest(AuthConfig config) {
|
||||
super(config, AuthSource.CSDN);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getAccessToken(String code) {
|
||||
String accessTokenUrl = UrlBuilder.getCsdnAccessTokenUrl(config.getClientId(), config.getClientSecret(), code, config.getRedirectUri());
|
||||
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 [" + code + "]");
|
||||
}
|
||||
return accessTokenObject.getString("access_token");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AuthUser getUserInfo(String accessToken) {
|
||||
HttpResponse response = HttpRequest.get(UrlBuilder.getCsdnUserInfoUrl(accessToken)).execute();
|
||||
JSONObject object = JSONObject.parseObject(response.body());
|
||||
if (object.containsKey("error_code")) {
|
||||
throw new AuthException(object.getString("error"));
|
||||
}
|
||||
return AuthUser.builder()
|
||||
.username(object.getString("username"))
|
||||
.accessToken(accessToken)
|
||||
.source(AuthSource.CSDN)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@ -27,6 +27,11 @@ public class AuthDingTalkRequest extends BaseAuthRequest {
|
||||
super(config, AuthSource.DINGTALK);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getAccessToken(String code) {
|
||||
throw new AuthException(ResponseStatus.NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AuthUser getUserInfo(String code) {
|
||||
// 根据timestamp, appSecret计算签名值
|
||||
|
||||
56
src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java
Normal file
56
src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java
Normal file
@ -0,0 +1,56 @@
|
||||
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.AuthSource;
|
||||
import me.zhyd.oauth.model.AuthUser;
|
||||
import me.zhyd.oauth.model.AuthUserGender;
|
||||
import me.zhyd.oauth.utils.UrlBuilder;
|
||||
|
||||
/**
|
||||
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
|
||||
* @version 1.0
|
||||
* @website https://www.zhyd.me
|
||||
* @date 2019/2/23 15:48
|
||||
* @since 1.8
|
||||
*/
|
||||
public class AuthOschinaRequest extends BaseAuthRequest {
|
||||
|
||||
public AuthOschinaRequest(AuthConfig config) {
|
||||
super(config, AuthSource.OSCHINA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getAccessToken(String code) {
|
||||
String accessTokenUrl = UrlBuilder.getOschinaAccessTokenUrl(config.getClientId(), config.getClientSecret(), code, config.getRedirectUri());
|
||||
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 [" + code + "]");
|
||||
}
|
||||
return accessTokenObject.getString("access_token");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AuthUser getUserInfo(String accessToken) {
|
||||
HttpResponse response = HttpRequest.get(UrlBuilder.getOschinaUserInfoUrl(accessToken)).execute();
|
||||
JSONObject object = JSONObject.parseObject(response.body());
|
||||
if (object.containsKey("error")) {
|
||||
throw new AuthException(object.getString("error_description"));
|
||||
}
|
||||
return AuthUser.builder()
|
||||
.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"))
|
||||
.accessToken(accessToken)
|
||||
.source(AuthSource.OSCHINA)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@ -49,4 +49,13 @@ public interface AuthRequest {
|
||||
default AuthResponse revoke(String accessToken) {
|
||||
throw new AuthException(ResponseStatus.NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新access token (续期)
|
||||
*
|
||||
* @param accessToken 登录成功后返回的accessToken
|
||||
*/
|
||||
default AuthResponse refresh(String accessToken) {
|
||||
throw new AuthException(ResponseStatus.NOT_IMPLEMENTED);
|
||||
}
|
||||
}
|
||||
|
||||
@ -59,7 +59,7 @@ public class AuthWeiboRequest extends BaseAuthRequest {
|
||||
.location(object.getString("location"))
|
||||
.remark(object.getString("description"))
|
||||
.gender(AuthUserGender.getRealGender(object.getString("gender")))
|
||||
.accessToken(GlobalAuthUtil.parseStringToMap(accessToken).get("access_token="))
|
||||
.accessToken(GlobalAuthUtil.parseStringToMap(accessToken).get("access_token"))
|
||||
.source(AuthSource.WEIBO)
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -32,9 +32,7 @@ public abstract class BaseAuthRequest implements AuthRequest {
|
||||
}
|
||||
}
|
||||
|
||||
protected String getAccessToken(String code) {
|
||||
return null;
|
||||
}
|
||||
protected abstract String getAccessToken(String code);
|
||||
|
||||
protected abstract AuthUser getUserInfo(String accessToken);
|
||||
|
||||
@ -69,6 +67,12 @@ public abstract class BaseAuthRequest implements AuthRequest {
|
||||
case GITHUB:
|
||||
authorizeUrl = UrlBuilder.getGithubAuthorizeUrl(config.getClientId(), config.getRedirectUri());
|
||||
break;
|
||||
case CSDN:
|
||||
authorizeUrl = UrlBuilder.getCsdnAuthorizeUrl(config.getClientId(), config.getRedirectUri());
|
||||
break;
|
||||
case CODING:
|
||||
authorizeUrl = UrlBuilder.getCodingAuthorizeUrl(config.getClientId(), config.getRedirectUri());
|
||||
break;
|
||||
case QQ:
|
||||
break;
|
||||
case WECHAT:
|
||||
|
||||
@ -35,6 +35,18 @@ public class UrlBuilder {
|
||||
private static final String BAIDU_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&display=popup";
|
||||
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}";
|
||||
|
||||
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}";
|
||||
|
||||
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}";
|
||||
|
||||
/**
|
||||
* 获取githubtoken的接口地址
|
||||
*
|
||||
@ -203,4 +215,105 @@ public class UrlBuilder {
|
||||
public static String getBaiduRevokeUrl(String accessToken) {
|
||||
return MessageFormat.format(BAIDU_REVOKE_PATTERN, ApiUrlConst.BAIDU_REVOKE_URL, 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, ApiUrlConst.CSDN_ACCESS_TOKEN_URL, 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, ApiUrlConst.CSDN_USER_INFO_URL, token);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取csdn授权地址
|
||||
*
|
||||
* @param clientId csdn 应用的Client ID
|
||||
* @param redirectUrl csdn 应用授权成功后的回调地址
|
||||
* @return full url
|
||||
*/
|
||||
public static String getCsdnAuthorizeUrl(String clientId, String redirectUrl) {
|
||||
return MessageFormat.format(CSDN_AUTHORIZE_PATTERN, ApiUrlConst.CSDN_AUTHORIZE_URL, clientId, redirectUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取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, ApiUrlConst.CODING_ACCESS_TOKEN_URL, clientId, clientSecret, code);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取coding用户详情的接口地址
|
||||
*
|
||||
* @param token coding 应用的token
|
||||
* @return full url
|
||||
*/
|
||||
public static String getCodingUserInfoUrl(String token) {
|
||||
return MessageFormat.format(CODING_USER_INFO_PATTERN, ApiUrlConst.CODING_USER_INFO_URL, token);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取coding授权地址
|
||||
*
|
||||
* @param clientId coding 应用的Client ID
|
||||
* @param redirectUrl coding 应用授权成功后的回调地址
|
||||
* @return full url
|
||||
*/
|
||||
public static String getCodingAuthorizeUrl(String clientId, String redirectUrl) {
|
||||
return MessageFormat.format(CODING_AUTHORIZE_PATTERN, ApiUrlConst.CODING_AUTHORIZE_URL, clientId, redirectUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取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, ApiUrlConst.OSCHINA_ACCESS_TOKEN_URL, 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, ApiUrlConst.OSCHINA_USER_INFO_URL, token);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取oschina授权地址
|
||||
*
|
||||
* @param clientId oschina 应用的Client ID
|
||||
* @param redirectUrl oschina 应用授权成功后的回调地址
|
||||
* @return full url
|
||||
*/
|
||||
public static String getOschinaAuthorizeUrl(String clientId, String redirectUrl) {
|
||||
return MessageFormat.format(OSCHINA_AUTHORIZE_PATTERN, ApiUrlConst.OSCHINA_AUTHORIZE_URL, clientId, redirectUrl);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user