|
|
|
|
@ -5,7 +5,6 @@ import (
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"github.com/synctv-org/synctv/internal/conf"
|
|
|
|
|
"github.com/synctv-org/synctv/internal/op"
|
|
|
|
|
"github.com/synctv-org/synctv/internal/provider"
|
|
|
|
|
"github.com/synctv-org/synctv/server/middlewares"
|
|
|
|
|
@ -16,33 +15,24 @@ import (
|
|
|
|
|
|
|
|
|
|
// /oauth2/login/:type
|
|
|
|
|
func OAuth2(ctx *gin.Context) {
|
|
|
|
|
t := ctx.Param("type")
|
|
|
|
|
p := provider.OAuth2Provider(t)
|
|
|
|
|
c, ok := conf.Conf.OAuth2[p]
|
|
|
|
|
if !ok {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("invalid oauth2 provider"))
|
|
|
|
|
}
|
|
|
|
|
p := provider.OAuth2Provider(ctx.Param("type"))
|
|
|
|
|
|
|
|
|
|
pi, err := p.GetProvider()
|
|
|
|
|
pi, err := provider.GetProvider(p)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
state := utils.RandString(16)
|
|
|
|
|
states.Store(state, struct{}{}, time.Minute*5)
|
|
|
|
|
|
|
|
|
|
RenderRedirect(ctx, pi.NewConfig(c.ClientID, c.ClientSecret).AuthCodeURL(state, oauth2.AccessTypeOnline))
|
|
|
|
|
RenderRedirect(ctx, pi.NewConfig().AuthCodeURL(state, oauth2.AccessTypeOnline))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func OAuth2Api(ctx *gin.Context) {
|
|
|
|
|
t := ctx.Param("type")
|
|
|
|
|
p := provider.OAuth2Provider(t)
|
|
|
|
|
c, ok := conf.Conf.OAuth2[p]
|
|
|
|
|
if !ok {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("invalid oauth2 provider"))
|
|
|
|
|
}
|
|
|
|
|
p := provider.OAuth2Provider(ctx.Param("type"))
|
|
|
|
|
|
|
|
|
|
pi, err := p.GetProvider()
|
|
|
|
|
pi, err := provider.GetProvider(p)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
|
|
|
|
|
}
|
|
|
|
|
@ -51,18 +41,13 @@ func OAuth2Api(ctx *gin.Context) {
|
|
|
|
|
states.Store(state, struct{}{}, time.Minute*5)
|
|
|
|
|
|
|
|
|
|
ctx.JSON(http.StatusOK, model.NewApiDataResp(gin.H{
|
|
|
|
|
"url": pi.NewConfig(c.ClientID, c.ClientSecret).AuthCodeURL(state, oauth2.AccessTypeOnline),
|
|
|
|
|
"url": pi.NewConfig().AuthCodeURL(state, oauth2.AccessTypeOnline),
|
|
|
|
|
}))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// /oauth2/callback/:type
|
|
|
|
|
func OAuth2Callback(ctx *gin.Context) {
|
|
|
|
|
t := ctx.Param("type")
|
|
|
|
|
p := provider.OAuth2Provider(t)
|
|
|
|
|
c, ok := conf.Conf.OAuth2[p]
|
|
|
|
|
if !ok {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("invalid oauth2 provider"))
|
|
|
|
|
}
|
|
|
|
|
p := provider.OAuth2Provider(ctx.Param("type"))
|
|
|
|
|
|
|
|
|
|
code := ctx.Query("code")
|
|
|
|
|
if code == "" {
|
|
|
|
|
@ -82,12 +67,12 @@ func OAuth2Callback(ctx *gin.Context) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pi, err := p.GetProvider()
|
|
|
|
|
pi, err := provider.GetProvider(p)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ui, err := pi.GetUserInfo(ctx, pi.NewConfig(c.ClientID, c.ClientSecret), code)
|
|
|
|
|
ui, err := pi.GetUserInfo(ctx, pi.NewConfig(), code)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
|
|
|
|
|
return
|
|
|
|
|
@ -110,12 +95,7 @@ func OAuth2Callback(ctx *gin.Context) {
|
|
|
|
|
|
|
|
|
|
// /oauth2/callback/:type
|
|
|
|
|
func OAuth2CallbackApi(ctx *gin.Context) {
|
|
|
|
|
t := ctx.Param("type")
|
|
|
|
|
p := provider.OAuth2Provider(t)
|
|
|
|
|
c, ok := conf.Conf.OAuth2[p]
|
|
|
|
|
if !ok {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("invalid oauth2 provider"))
|
|
|
|
|
}
|
|
|
|
|
p := provider.OAuth2Provider(ctx.Param("type"))
|
|
|
|
|
|
|
|
|
|
req := model.OAuth2CallbackReq{}
|
|
|
|
|
if err := req.Decode(ctx); err != nil {
|
|
|
|
|
@ -129,12 +109,12 @@ func OAuth2CallbackApi(ctx *gin.Context) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pi, err := p.GetProvider()
|
|
|
|
|
pi, err := provider.GetProvider(p)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ui, err := pi.GetUserInfo(ctx, pi.NewConfig(c.ClientID, c.ClientSecret), req.Code)
|
|
|
|
|
ui, err := pi.GetUserInfo(ctx, pi.NewConfig(), req.Code)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
|
|
|
|
|
return
|
|
|
|
|
|