mirror of https://gitee.com/answerdev/answer.git
fix(plugin): add user external login repo
This commit is contained in:
parent
81d786ff66
commit
01c02ae2b7
|
@ -40,6 +40,7 @@ import (
|
||||||
"github.com/answerdev/answer/internal/repo/tag_common"
|
"github.com/answerdev/answer/internal/repo/tag_common"
|
||||||
"github.com/answerdev/answer/internal/repo/unique"
|
"github.com/answerdev/answer/internal/repo/unique"
|
||||||
"github.com/answerdev/answer/internal/repo/user"
|
"github.com/answerdev/answer/internal/repo/user"
|
||||||
|
"github.com/answerdev/answer/internal/repo/user_external_login"
|
||||||
"github.com/answerdev/answer/internal/router"
|
"github.com/answerdev/answer/internal/router"
|
||||||
"github.com/answerdev/answer/internal/service"
|
"github.com/answerdev/answer/internal/service"
|
||||||
"github.com/answerdev/answer/internal/service/action"
|
"github.com/answerdev/answer/internal/service/action"
|
||||||
|
@ -74,7 +75,7 @@ import (
|
||||||
"github.com/answerdev/answer/internal/service/uploader"
|
"github.com/answerdev/answer/internal/service/uploader"
|
||||||
"github.com/answerdev/answer/internal/service/user_admin"
|
"github.com/answerdev/answer/internal/service/user_admin"
|
||||||
"github.com/answerdev/answer/internal/service/user_common"
|
"github.com/answerdev/answer/internal/service/user_common"
|
||||||
"github.com/answerdev/answer/internal/service/user_external_login"
|
user_external_login2 "github.com/answerdev/answer/internal/service/user_external_login"
|
||||||
"github.com/segmentfault/pacman"
|
"github.com/segmentfault/pacman"
|
||||||
"github.com/segmentfault/pacman/log"
|
"github.com/segmentfault/pacman/log"
|
||||||
)
|
)
|
||||||
|
@ -211,7 +212,8 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
|
||||||
templateRenderController := templaterender.NewTemplateRenderController(questionService, userService, tagService, answerService, commentService, dataData, siteInfoCommonService)
|
templateRenderController := templaterender.NewTemplateRenderController(questionService, userService, tagService, answerService, commentService, dataData, siteInfoCommonService)
|
||||||
templateController := controller.NewTemplateController(templateRenderController, siteInfoCommonService)
|
templateController := controller.NewTemplateController(templateRenderController, siteInfoCommonService)
|
||||||
templateRouter := router.NewTemplateRouter(templateController, templateRenderController, siteInfoController)
|
templateRouter := router.NewTemplateRouter(templateController, templateRenderController, siteInfoController)
|
||||||
userExternalLoginService := user_external_login.NewUserExternalLoginService(userRepo, userCommon)
|
userExternalLoginRepo := user_external_login.NewUserExternalLoginRepo(dataData)
|
||||||
|
userExternalLoginService := user_external_login2.NewUserExternalLoginService(userRepo, userCommon, userExternalLoginRepo)
|
||||||
connectorController := controller.NewConnectorController(siteInfoCommonService, userExternalLoginService)
|
connectorController := controller.NewConnectorController(siteInfoCommonService, userExternalLoginService)
|
||||||
pluginAPIRouter := router.NewPluginAPIRouter(connectorController)
|
pluginAPIRouter := router.NewPluginAPIRouter(connectorController)
|
||||||
ginEngine := server.NewHTTPServer(debug, staticRouter, answerAPIRouter, swaggerRouter, uiRouter, authUserMiddleware, avatarMiddleware, templateRouter, pluginAPIRouter)
|
ginEngine := server.NewHTTPServer(debug, staticRouter, answerAPIRouter, swaggerRouter, uiRouter, authUserMiddleware, avatarMiddleware, templateRouter, pluginAPIRouter)
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"github.com/answerdev/answer/internal/service/siteinfo_common"
|
"github.com/answerdev/answer/internal/service/siteinfo_common"
|
||||||
"github.com/answerdev/answer/internal/service/user_external_login"
|
"github.com/answerdev/answer/internal/service/user_external_login"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/segmentfault/pacman/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -70,6 +71,7 @@ func (cc *ConnectorController) ConnectorLogin(connector plugin.Connector) (fn fu
|
||||||
}
|
}
|
||||||
resp, err := cc.userExternalService.ExternalLogin(ctx, connector.ConnectorSlugName(), userInfo)
|
resp, err := cc.userExternalService.ExternalLogin(ctx, connector.ConnectorSlugName(), userInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error(err)
|
||||||
ctx.Redirect(http.StatusFound, "/50x")
|
ctx.Redirect(http.StatusFound, "/50x")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package entity
|
||||||
|
|
||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
// UserExternalLogin
|
// UserExternalLogin user external login
|
||||||
type UserExternalLogin struct {
|
type UserExternalLogin struct {
|
||||||
ID int64 `xorm:"not null pk autoincr BIGINT(20) id"`
|
ID int64 `xorm:"not null pk autoincr BIGINT(20) id"`
|
||||||
CreatedAt time.Time `xorm:"created TIMESTAMP created_at"`
|
CreatedAt time.Time `xorm:"created TIMESTAMP created_at"`
|
||||||
|
|
|
@ -26,6 +26,7 @@ import (
|
||||||
"github.com/answerdev/answer/internal/repo/tag_common"
|
"github.com/answerdev/answer/internal/repo/tag_common"
|
||||||
"github.com/answerdev/answer/internal/repo/unique"
|
"github.com/answerdev/answer/internal/repo/unique"
|
||||||
"github.com/answerdev/answer/internal/repo/user"
|
"github.com/answerdev/answer/internal/repo/user"
|
||||||
|
"github.com/answerdev/answer/internal/repo/user_external_login"
|
||||||
"github.com/google/wire"
|
"github.com/google/wire"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -72,4 +73,5 @@ var ProviderSetRepo = wire.NewSet(
|
||||||
role.NewUserRoleRelRepo,
|
role.NewUserRoleRelRepo,
|
||||||
role.NewRolePowerRelRepo,
|
role.NewRolePowerRelRepo,
|
||||||
role.NewPowerRepo,
|
role.NewPowerRepo,
|
||||||
|
user_external_login.NewUserExternalLoginRepo,
|
||||||
)
|
)
|
||||||
|
|
|
@ -31,10 +31,12 @@ type UserExternalLoginService struct {
|
||||||
func NewUserExternalLoginService(
|
func NewUserExternalLoginService(
|
||||||
userRepo usercommon.UserRepo,
|
userRepo usercommon.UserRepo,
|
||||||
userCommonService *usercommon.UserCommon,
|
userCommonService *usercommon.UserCommon,
|
||||||
|
userExternalLoginRepo UserExternalLoginRepo,
|
||||||
) *UserExternalLoginService {
|
) *UserExternalLoginService {
|
||||||
return &UserExternalLoginService{
|
return &UserExternalLoginService{
|
||||||
userRepo: userRepo,
|
userRepo: userRepo,
|
||||||
userCommonService: userCommonService,
|
userCommonService: userCommonService,
|
||||||
|
userExternalLoginRepo: userExternalLoginRepo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,12 +57,13 @@ func (us *UserExternalLoginService) ExternalLogin(
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if exist {
|
if !exist {
|
||||||
// if user already exists, try to bind this user
|
|
||||||
err = us.BindOldUser(ctx, provider, externalUserInfo, oldUserInfo)
|
|
||||||
} else {
|
|
||||||
oldUserInfo, err = us.RegisterNewUser(ctx, provider, externalUserInfo)
|
oldUserInfo, err = us.RegisterNewUser(ctx, provider, externalUserInfo)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
err = us.BindOldUser(ctx, provider, externalUserInfo, oldUserInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -72,7 +75,6 @@ func (us *UserExternalLoginService) ExternalLogin(
|
||||||
|
|
||||||
func (us *UserExternalLoginService) RegisterNewUser(ctx context.Context, provider string,
|
func (us *UserExternalLoginService) RegisterNewUser(ctx context.Context, provider string,
|
||||||
externalUserInfo plugin.ExternalLoginUserInfo) (userInfo *entity.User, err error) {
|
externalUserInfo plugin.ExternalLoginUserInfo) (userInfo *entity.User, err error) {
|
||||||
|
|
||||||
userInfo = &entity.User{}
|
userInfo = &entity.User{}
|
||||||
userInfo.EMail = externalUserInfo.Email
|
userInfo.EMail = externalUserInfo.Email
|
||||||
userInfo.DisplayName = externalUserInfo.Name
|
userInfo.DisplayName = externalUserInfo.Name
|
||||||
|
|
Loading…
Reference in New Issue