fix(plugin): add user external login repo

This commit is contained in:
LinkinStar 2023-01-06 14:48:41 +08:00
parent 81d786ff66
commit 01c02ae2b7
5 changed files with 18 additions and 10 deletions

View File

@ -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)

View File

@ -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
} }

View File

@ -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"`

View File

@ -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,
) )

View File

@ -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