Skip to content

Commit 7247779

Browse files
committed
feat(foundation): add UserRegisterController
1 parent ab23967 commit 7247779

11 files changed

Lines changed: 89 additions & 19 deletions

File tree

backend/api/api.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/api/handler/coze/loop/apis/wire.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ func InitFoundationHandler(
9090
idgen idgen.IIDGenerator,
9191
db db.Provider,
9292
objectStorage fileserver.BatchObjectStorage,
93+
configFactory conf.IConfigLoaderFactory,
9394
) (*FoundationHandler, error) {
9495
wire.Build(
9596
foundationSet,

backend/api/handler/coze/loop/apis/wire_gen.go

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAx
465465
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
466466
github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM=
467467
github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=
468+
github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE=
468469
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
469470
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
470471
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=

backend/modules/foundation/application/user.go

Lines changed: 57 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"net/mail"
99
"strconv"
1010

11+
"github.com/bytedance/gg/gptr"
1112
"github.com/bytedance/gg/gslice"
1213

1314
"github.com/coze-dev/coze-loop/backend/infra/middleware/session"
@@ -17,31 +18,62 @@ import (
1718
"github.com/coze-dev/coze-loop/backend/modules/foundation/domain/user/entity"
1819
"github.com/coze-dev/coze-loop/backend/modules/foundation/domain/user/service"
1920
"github.com/coze-dev/coze-loop/backend/modules/foundation/pkg/errno"
21+
"github.com/coze-dev/coze-loop/backend/pkg/conf"
2022
"github.com/coze-dev/coze-loop/backend/pkg/errorx"
2123
"github.com/coze-dev/coze-loop/backend/pkg/lang/conv"
2224
"github.com/coze-dev/coze-loop/backend/pkg/lang/ptr"
2325
"github.com/coze-dev/coze-loop/backend/pkg/lang/slices"
26+
"github.com/coze-dev/coze-loop/backend/pkg/logs"
2427
)
2528

2629
type UserApplicationImpl struct {
27-
userService service.IUserService
30+
userService service.IUserService
31+
registerController userRegisterController
32+
}
33+
34+
type userRegisterController struct {
35+
configLoader conf.IConfigLoader
36+
}
37+
38+
type userRegisterControlConfig struct {
39+
Block bool `mapstructure:"block"`
40+
AllowedEmails []string `mapstructure:"allowed_emails"`
41+
}
42+
43+
func (u *userRegisterController) allowRegister(ctx context.Context, email string) bool {
44+
const keyUserRegisterControl = "user_register_control"
45+
46+
var config userRegisterControlConfig
47+
if err := u.configLoader.UnmarshalKey(ctx, keyUserRegisterControl, &config); err != nil {
48+
logs.CtxWarn(ctx, "load user_register_control config fail, err: %v", err)
49+
return false
50+
}
51+
52+
if !config.Block {
53+
return true
54+
}
55+
return slices.Contains(config.AllowedEmails, email)
2856
}
2957

3058
func NewUserApplication(
3159
userService service.IUserService,
32-
) user.UserService {
60+
configFactory conf.IConfigLoaderFactory,
61+
) (user.UserService, error) {
62+
loader, err := configFactory.NewConfigLoader("foundation.yaml")
63+
if err != nil {
64+
return nil, err
65+
}
3366
return &UserApplicationImpl{
3467
userService: userService,
35-
}
68+
registerController: userRegisterController{
69+
configLoader: loader,
70+
},
71+
}, nil
3672
}
3773

3874
func (u *UserApplicationImpl) Register(ctx context.Context, request *user.UserRegisterRequest) (r *user.UserRegisterResponse, err error) {
39-
if request.Email == nil || request.Password == nil {
40-
return nil, errorx.NewByCode(errno.CommonInvalidParamCode)
41-
}
42-
43-
if _, err = mail.ParseAddress(*request.Email); err != nil {
44-
return nil, errorx.NewByCode(errno.CommonInvalidParamCode, errorx.WithExtraMsg("email is invalid"))
75+
if err := u.validateRegisterReq(ctx, request); err != nil {
76+
return nil, err
4577
}
4678

4779
userDO, err := u.userService.Create(ctx, &service.CreateUserRequest{
@@ -66,6 +98,22 @@ func (u *UserApplicationImpl) Register(ctx context.Context, request *user.UserRe
6698
return r, nil
6799
}
68100

101+
func (u *UserApplicationImpl) validateRegisterReq(ctx context.Context, request *user.UserRegisterRequest) error {
102+
if request.Email == nil || request.Password == nil {
103+
return errorx.NewByCode(errno.CommonInvalidParamCode)
104+
}
105+
106+
if _, err := mail.ParseAddress(gptr.Indirect(request.Email)); err != nil {
107+
return errorx.NewByCode(errno.CommonInvalidParamCode, errorx.WithExtraMsg("email is invalid"))
108+
}
109+
110+
if !u.registerController.allowRegister(ctx, request.GetEmail()) {
111+
return errorx.NewByCode(errno.UserRegistrationControlBlockCode)
112+
}
113+
114+
return nil
115+
}
116+
69117
func (u *UserApplicationImpl) ResetPassword(ctx context.Context, request *user.ResetPasswordRequest) (r *user.ResetPasswordResponse, err error) {
70118
r = user.NewResetPasswordResponse()
71119

backend/modules/foundation/application/wire.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
auth2 "github.com/coze-dev/coze-loop/backend/modules/foundation/infra/auth"
2424
"github.com/coze-dev/coze-loop/backend/modules/foundation/infra/repo"
2525
"github.com/coze-dev/coze-loop/backend/modules/foundation/infra/repo/mysql"
26+
"github.com/coze-dev/coze-loop/backend/pkg/conf"
2627
)
2728

2829
var (
@@ -92,6 +93,7 @@ func InitSpaceApplication(
9293
func InitUserApplication(
9394
idgen idgen.IIDGenerator,
9495
db db.Provider,
96+
configFactory conf.IConfigLoaderFactory,
9597
) (user.UserService, error) {
9698
wire.Build(userSet)
9799
return nil, nil

backend/modules/foundation/application/wire_gen.go

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/modules/foundation/pkg/errno/foundation.go

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/script/errorx/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Where:
7474
# Generate code for evaluation domain
7575
./code_gen.py evaluation --output-dir backend/module/evaluation/pkg/errno
7676

77-
# Or use default output directory (GOPATH/src/github.com/coze-dev/backend/module/{biz}/pkg/errno)
77+
# Or use default output directory ({project_path}/backend/module/{biz}/pkg/errno)
7878
./code_gen.py evaluation
7979
```
8080

backend/script/errorx/code_gen.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,15 @@ def generate_biz_code(biz_name: str, biz_code: int, common_errors: List[Dict], o
134134
biz_errors = load_yaml(biz_error_file)['error_code']
135135

136136
# Generate and output code
137-
project_dir = os.environ.get('PROJECT_DIR',
138-
os.path.join(os.environ['GOPATH'], 'src/github.com/coze-dev/coze-loop'))
137+
current_file_dir = os.path.dirname(os.path.abspath(__file__))
138+
project_dir = os.path.dirname(os.path.dirname(os.path.dirname(current_file_dir)))
139139
if not output_dir:
140140
output_dir = os.path.join(project_dir, 'backend/modules', biz_name, 'pkg/errno')
141141
else:
142142
output_dir = os.path.expandvars(output_dir)
143143
if not os.path.isabs(output_dir):
144144
output_dir = os.path.join(project_dir, output_dir)
145-
145+
146146
return generate_go_code(biz_name, biz_code, common_errors, biz_errors, output_dir)
147147

148148

0 commit comments

Comments
 (0)