Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
justauth
JustAuth
提交
698c922b
J
JustAuth
项目概览
justauth
/
JustAuth
1 年多 前同步成功
通知
391
Star
15212
Fork
2708
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JustAuth
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
698c922b
编写于
7月 18, 2019
作者:
H
Hongwei Peng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
integrate stack overflow
上级
44d4323f
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
162 addition
and
1 deletion
+162
-1
example.md
example.md
+9
-1
src/main/java/me/zhyd/oauth/config/AuthConfig.java
src/main/java/me/zhyd/oauth/config/AuthConfig.java
+7
-0
src/main/java/me/zhyd/oauth/config/AuthSource.java
src/main/java/me/zhyd/oauth/config/AuthSource.java
+20
-0
src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java
.../java/me/zhyd/oauth/request/AuthStackOverflowRequest.java
+78
-0
src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java
...n/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java
+48
-0
未找到文件。
example.md
浏览文件 @
698c922b
...
@@ -84,6 +84,8 @@ _注:非全部平台,部分平台可能不存在图例_
...
@@ -84,6 +84,8 @@ _注:非全部平台,部分平台可能不存在图例_
暂无
暂无
_请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_
#### 授权Pinterest
#### 授权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
"在这里输入图片标题"
)
...
@@ -92,4 +94,10 @@ _注:非全部平台,部分平台可能不存在图例_
...
@@ -92,4 +94,10 @@ _注:非全部平台,部分平台可能不存在图例_
![
授权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
"在这里输入图片标题"
)
_请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_
#### 授权Stack Overflow
\ No newline at end of file
暂无
#### 授权Twitter
暂无
src/main/java/me/zhyd/oauth/config/AuthConfig.java
浏览文件 @
698c922b
...
@@ -51,4 +51,11 @@ public class AuthConfig {
...
@@ -51,4 +51,11 @@ public class AuthConfig {
* 1.8.0版本新增参数
* 1.8.0版本新增参数
*/
*/
private
String
state
;
private
String
state
;
/**
* Stack Overflow Key
* <p>
* 1.9.0版本新增参数
*/
private
String
stackOverflowKey
;
}
}
src/main/java/me/zhyd/oauth/config/AuthSource.java
浏览文件 @
698c922b
...
@@ -489,6 +489,26 @@ public enum AuthSource {
...
@@ -489,6 +489,26 @@ public enum AuthSource {
public
String
userInfo
()
{
public
String
userInfo
()
{
return
"https://api.pinterest.com/v1/me"
;
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"
;
}
};
};
/**
/**
...
...
src/main/java/me/zhyd/oauth/request/AuthStackOverflowRequest.java
0 → 100644
浏览文件 @
698c922b
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
<
String
,
Object
>
buildBody
(
String
accessTokenUrl
)
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
HttpUtil
.
decodeParamMap
(
accessTokenUrl
,
"UTF-8"
).
forEach
(
paramMap:
:
put
);
return
paramMap
;
}
}
src/main/java/me/zhyd/oauth/url/AuthStackOverflowUrlBuilder.java
0 → 100644
浏览文件 @
698c922b
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
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录