ljw 1 год назад
Родитель
Сommit
e2fda47cbb

+ 1 - 0
conf/config.yaml

@@ -1,6 +1,7 @@
1 1
 lang: "zh-CN"
2 2
 app:
3 3
   web-client: 1  # 1:启用 0:禁用
4
+  register: false #是否开启注册
4 5
 gin:
5 6
   api-addr: "0.0.0.0:21114"
6 7
   mode: "release" #release,debug,test

+ 2 - 1
config/config.go

@@ -15,7 +15,8 @@ const (
15 15
 )
16 16
 
17 17
 type App struct {
18
-	WebClient int `mapstructure:"web-client"`
18
+	WebClient int  `mapstructure:"web-client"`
19
+	Register  bool `mapstructure:"register"`
19 20
 }
20 21
 
21 22
 type Config struct {

+ 4 - 1
http/controller/admin/login.go

@@ -103,7 +103,10 @@ func (ct *Login) LoginOptions(c *gin.Context) {
103 103
 	for _, v := range res.Oauths {
104 104
 		ops = append(ops, v.Op)
105 105
 	}
106
-	response.Success(c, ops)
106
+	response.Success(c, gin.H{
107
+		"ops":      ops,
108
+		"register": global.Config.App.Register,
109
+	})
107 110
 }
108 111
 
109 112
 // OidcAuth

+ 38 - 0
http/controller/admin/user.go

@@ -5,6 +5,7 @@ import (
5 5
 	"Gwen/http/request/admin"
6 6
 	"Gwen/http/response"
7 7
 	adResp "Gwen/http/response/admin"
8
+	"Gwen/model"
8 9
 	"Gwen/service"
9 10
 	"github.com/gin-gonic/gin"
10 11
 	"gorm.io/gorm"
@@ -323,3 +324,40 @@ func (ct *User) GroupUsers(c *gin.Context) {
323 324
 	}
324 325
 	response.Success(c, data)
325 326
 }
327
+
328
+// Register
329
+func (ct *User) Register(c *gin.Context) {
330
+	if !global.Config.App.Register {
331
+		response.Fail(c, 101, response.TranslateMsg(c, "RegisterClosed"))
332
+		return
333
+	}
334
+	f := &admin.RegisterForm{}
335
+	if err := c.ShouldBindJSON(f); err != nil {
336
+		response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
337
+		return
338
+	}
339
+	errList := global.Validator.ValidStruct(c, f)
340
+	if len(errList) > 0 {
341
+		response.Fail(c, 101, errList[0])
342
+		return
343
+	}
344
+	u := service.AllService.UserService.Register(f.Username, f.Password)
345
+	if u == nil || u.Id == 0 {
346
+		response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed"))
347
+		return
348
+	}
349
+	// 注册成功后自动登录
350
+	ut := service.AllService.UserService.Login(u, &model.LoginLog{
351
+		UserId: u.Id,
352
+		Client: model.LoginLogClientWebAdmin,
353
+		Uuid:   "",
354
+		Ip:     c.ClientIP(),
355
+		Type:   model.LoginLogTypeAccount,
356
+	})
357
+	response.Success(c, &adResp.LoginPayload{
358
+		Token:      ut.Token,
359
+		Username:   u.Username,
360
+		RouteNames: service.AllService.UserService.RouteNames(u),
361
+		Nickname:   u.Nickname,
362
+	})
363
+}

+ 6 - 0
http/request/admin/user.go

@@ -59,3 +59,9 @@ type GroupUsersQuery struct {
59 59
 	IsMy   int  `json:"is_my"`
60 60
 	UserId uint `json:"user_id"`
61 61
 }
62
+
63
+type RegisterForm struct {
64
+	Username        string `json:"username" validate:"required,gte=4,lte=10"`
65
+	Password        string `json:"password" validate:"required,gte=4,lte=20"`
66
+	ConfirmPassword string `json:"confirm_password" validate:"required,gte=4,lte=20"`
67
+}

+ 1 - 1
http/router/admin.go

@@ -17,7 +17,7 @@ func Init(g *gin.Engine) {
17 17
 
18 18
 	adg := g.Group("/api/admin")
19 19
 	LoginBind(adg)
20
-
20
+	adg.POST("/user/register", (&admin.User{}).Register)
21 21
 	adg.Use(middleware.AdminAuth())
22 22
 	//FileBind(adg)
23 23
 	UserBind(adg)

+ 6 - 0
model/loginLog.go

@@ -12,6 +12,12 @@ type LoginLog struct {
12 12
 	TimeModel
13 13
 }
14 14
 
15
+const (
16
+	LoginLogClientWebAdmin = "webadmin"
17
+	LoginLogClientWeb      = "webclient"
18
+	LoginLogClientApp      = "app"
19
+)
20
+
15 21
 const (
16 22
 	LoginLogTypeAccount = "account"
17 23
 	LoginLogTypeOauth   = "oauth"

+ 4 - 0
resources/i18n/en.toml

@@ -119,3 +119,7 @@ other = "Default Group"
119 119
 description = "Share group"
120 120
 one = "Share Group"
121 121
 other = "Share Group"
122
+[RegisterClosed]
123
+description = "Register closed."
124
+one = "Register closed."
125
+other = "Register closed."

+ 5 - 0
resources/i18n/ko.toml

@@ -121,3 +121,8 @@ other = "기본 그룹"
121 121
 description = "Share group."
122 122
 one = "공유 그룹"
123 123
 other = "공유 그룹"
124
+
125
+[RegisterClosed]
126
+description = "Register closed."
127
+one = "가입이 종료되었습니다."
128
+other = "가입이 종료되었습니다."

+ 5 - 0
resources/i18n/ru.toml

@@ -127,3 +127,8 @@ other = "Группа по умолчанию"
127 127
 description = "Share group."
128 128
 one = "Общая группа"
129 129
 other = "Общая группа"
130
+
131
+[RegisterClosed]
132
+description = "Register closed."
133
+one = "Регистрация закрыта."
134
+other = "Регистрация закрыта."

+ 4 - 0
resources/i18n/zh_CN.toml

@@ -121,3 +121,7 @@ other = "默认组"
121 121
 description = "Share group."
122 122
 one = "共享组"
123 123
 other = "共享组"
124
+[RegisterClosed]
125
+description = "Register closed."
126
+one = "注册已关闭。"
127
+other = "注册已关闭。"

+ 10 - 0
service/user.go

@@ -323,3 +323,13 @@ func (us *UserService) FindLatestUserIdFromLoginLogByUuid(uuid string) uint {
323 323
 	global.DB.Where("uuid = ?", uuid).Order("id desc").First(llog)
324 324
 	return llog.UserId
325 325
 }
326
+
327
+func (us *UserService) Register(username string, password string) *model.User {
328
+	u := &model.User{
329
+		Username: username,
330
+		Password: us.EncryptPassword(password),
331
+		GroupId:  1,
332
+	}
333
+	global.DB.Create(u)
334
+	return u
335
+}