From 969e012f574cf9edf773c295a019e9aae18a6013 Mon Sep 17 00:00:00 2001 From: xmdhs Date: Mon, 9 Oct 2023 21:46:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=89=E7=85=A7=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=AF=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/authlibskin/config.yaml.template | 54 ++++++++++++++++++++++++++++ cmd/authlibskin/main.go | 26 ++++++++++++-- frontend/src/views/Login.tsx | 10 +++--- frontend/src/views/Register.tsx | 6 ++-- service/user.go | 6 +++- 5 files changed, 88 insertions(+), 14 deletions(-) create mode 100644 cmd/authlibskin/config.yaml.template diff --git a/cmd/authlibskin/config.yaml.template b/cmd/authlibskin/config.yaml.template new file mode 100644 index 0000000..fc917af --- /dev/null +++ b/cmd/authlibskin/config.yaml.template @@ -0,0 +1,54 @@ +# 为 true 则 uuid 生成方式于离线模式相同,若从离线模式切换不会丢失数据。 +# 已有用户数据的情况下勿更改此项 +OfflineUUID: true + +Port: "0.0.0.0:8080" + +Log: + Level: "debug" + # json 格式输出 + Json: false + +Sql: + MysqlDsn: "" + +# 输出每条执行的 sql 语句 +Debug: false + +Cache: + # 默认使用内存缓存,若需要集群部署,请更换 redis + Type: "" + # 内存缓存使用大小,单位 b + Ram: 10000000 + +# 位于反向代理后启用,用于记录真实 ip +RaelIP: false + +# ip 段最大注册用户,ipv4 为 /24 ipv6 为 /48 +MaxIpUser: 10 + +# 运行后勿修改,若为集群需设置为一致 +RsaPriKey: "" + +# 材质文件保存路径,如果需要对象存储可以把对象储存挂载到本地目录上 +TexturePath: "skin" + +# 材质静态文件提供基础地址 +# 如果静态文件位于 oss 上,比如 https://s3.amazonaws.com/example/1.png +# 则填写 https://s3.amazonaws.com/example +TextureBaseUrl: "" + +# 用于在支持的启动器中展示本站的注册地址 +# 填写类似 https://example.com +WebBaseUrl: "" + +# 皮肤站名字,用于在多个地方展示 +ServerName: "" + + +Captcha: + # 验证码类型,目前只支持 cloudflare turnstile + # 填写 turnstile + Type: "" + SiteKey: "" + Secret: "" diff --git a/cmd/authlibskin/main.go b/cmd/authlibskin/main.go index 5bfee1d..c6f080b 100644 --- a/cmd/authlibskin/main.go +++ b/cmd/authlibskin/main.go @@ -2,22 +2,42 @@ package main import ( "context" + "errors" "flag" + "fmt" "os" + _ "embed" + + "github.com/samber/lo" "github.com/xmdhs/authlib-skin/config" + "github.com/xmdhs/authlib-skin/server" ) var configPath string +//go:embed config.yaml.template +var configTempLate []byte + func init() { - flag.StringVar(&configPath, "c", "", "") + flag.StringVar(&configPath, "c", "config.yaml", "") flag.Parse() } func main() { ctx := context.Background() - os.ReadFile(configPath) + b, err := os.ReadFile(configPath) + if err != nil { + if errors.Is(err, os.ErrNotExist) { + lo.Must0(os.WriteFile("config.yaml", configTempLate, 0600)) + fmt.Println("已写入模板配置文件") + return + } + panic(err) + } + config := lo.Must(config.YamlDeCode(b)) - config.YamlDeCode() + s, cancel := lo.Must2(server.InitializeRoute(ctx, config)) + defer cancel() + panic(s.ListenAndServe()) } diff --git a/frontend/src/views/Login.tsx b/frontend/src/views/Login.tsx index db3dcfa..4dc2751 100644 --- a/frontend/src/views/Login.tsx +++ b/frontend/src/views/Login.tsx @@ -61,20 +61,18 @@ export default function SignIn() { }). catch(v => { captchaRef.current?.reload() - + console.warn(v) if (v instanceof ApiErr) { switch (v.code) { case 6: - setErr("错误的密码") - break + setErr("密码或用户名错误") + return case 9: setErr("用户已被禁用") - break + return } - return } setErr(String(v)) - console.warn(v) }). finally(() => setLoading(false)) diff --git a/frontend/src/views/Register.tsx b/frontend/src/views/Register.tsx index 2839c77..a55c3f5 100644 --- a/frontend/src/views/Register.tsx +++ b/frontend/src/views/Register.tsx @@ -55,17 +55,15 @@ export default function SignUp() { catch(v => { captchaRef.current?.reload() console.warn(v) - if (v instanceof ApiErr) { switch (v.code) { case 3: setRegErr("邮箱已存在") - break + return case 7: setRegErr("用户名已存在") - break + return } - return } setRegErr(String(v)) }). diff --git a/service/user.go b/service/user.go index bf01fb0..f28b39f 100644 --- a/service/user.go +++ b/service/user.go @@ -21,7 +21,7 @@ var ( ErrExistUser = errors.New("邮箱已存在") ErrExitsName = errors.New("用户名已存在") ErrRegLimit = errors.New("超过注册 ip 限制") - ErrPassWord = errors.New("错误的密码") + ErrPassWord = errors.New("错误的密码或用户名") ErrChangeName = errors.New("离线模式 uuid 不允许修改用户名") ) @@ -98,6 +98,10 @@ func (w *WebService) Login(ctx context.Context, l model.Login, ip string) (model } u, err := w.client.User.Query().Where(user.Email(l.Email)).WithProfile().Only(ctx) if err != nil { + var ne *ent.NotFoundError + if errors.As(err, &ne) { + return model.LoginRep{}, fmt.Errorf("Login: %w", ErrPassWord) + } return model.LoginRep{}, fmt.Errorf("Login: %w", err) } err = w.validatePass(ctx, u, l.Password)