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/unique"
"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/service"
"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/user_admin"
"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/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)
templateController := controller.NewTemplateController(templateRenderController, siteInfoCommonService)
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)
pluginAPIRouter := router.NewPluginAPIRouter(connectorController)
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/user_external_login"
"github.com/gin-gonic/gin"
"github.com/segmentfault/pacman/log"
)
const (
@ -70,6 +71,7 @@ func (cc *ConnectorController) ConnectorLogin(connector plugin.Connector) (fn fu
}
resp, err := cc.userExternalService.ExternalLogin(ctx, connector.ConnectorSlugName(), userInfo)
if err != nil {
log.Error(err)
ctx.Redirect(http.StatusFound, "/50x")
return
}

View File

@ -2,7 +2,7 @@ package entity
import "time"
// UserExternalLogin
// UserExternalLogin user external login
type UserExternalLogin struct {
ID int64 `xorm:"not null pk autoincr BIGINT(20) id"`
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/unique"
"github.com/answerdev/answer/internal/repo/user"
"github.com/answerdev/answer/internal/repo/user_external_login"
"github.com/google/wire"
)
@ -72,4 +73,5 @@ var ProviderSetRepo = wire.NewSet(
role.NewUserRoleRelRepo,
role.NewRolePowerRelRepo,
role.NewPowerRepo,
user_external_login.NewUserExternalLoginRepo,
)

View File

@ -31,10 +31,12 @@ type UserExternalLoginService struct {
func NewUserExternalLoginService(
userRepo usercommon.UserRepo,
userCommonService *usercommon.UserCommon,
userExternalLoginRepo UserExternalLoginRepo,
) *UserExternalLoginService {
return &UserExternalLoginService{
userRepo: userRepo,
userCommonService: userCommonService,
userRepo: userRepo,
userCommonService: userCommonService,
userExternalLoginRepo: userExternalLoginRepo,
}
}
@ -55,12 +57,13 @@ func (us *UserExternalLoginService) ExternalLogin(
if err != nil {
return nil, err
}
if exist {
// if user already exists, try to bind this user
err = us.BindOldUser(ctx, provider, externalUserInfo, oldUserInfo)
} else {
if !exist {
oldUserInfo, err = us.RegisterNewUser(ctx, provider, externalUserInfo)
if err != nil {
return nil, err
}
}
err = us.BindOldUser(ctx, provider, externalUserInfo, oldUserInfo)
if err != nil {
return nil, err
}
@ -72,7 +75,6 @@ func (us *UserExternalLoginService) ExternalLogin(
func (us *UserExternalLoginService) RegisterNewUser(ctx context.Context, provider string,
externalUserInfo plugin.ExternalLoginUserInfo) (userInfo *entity.User, err error) {
userInfo = &entity.User{}
userInfo.EMail = externalUserInfo.Email
userInfo.DisplayName = externalUserInfo.Name