按照配置文件启动

This commit is contained in:
xmdhs 2023-10-09 21:46:13 +08:00
parent eda0d6a4ef
commit 969e012f57
No known key found for this signature in database
GPG Key ID: E809D6D43DEFCC95
5 changed files with 88 additions and 14 deletions

View File

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

View File

@ -2,22 +2,42 @@ package main
import ( import (
"context" "context"
"errors"
"flag" "flag"
"fmt"
"os" "os"
_ "embed"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/config" "github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/server"
) )
var configPath string var configPath string
//go:embed config.yaml.template
var configTempLate []byte
func init() { func init() {
flag.StringVar(&configPath, "c", "", "") flag.StringVar(&configPath, "c", "config.yaml", "")
flag.Parse() flag.Parse()
} }
func main() { func main() {
ctx := context.Background() 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())
} }

View File

@ -61,20 +61,18 @@ export default function SignIn() {
}). }).
catch(v => { catch(v => {
captchaRef.current?.reload() captchaRef.current?.reload()
console.warn(v)
if (v instanceof ApiErr) { if (v instanceof ApiErr) {
switch (v.code) { switch (v.code) {
case 6: case 6:
setErr("错误的密码") setErr("密码或用户名错误")
break return
case 9: case 9:
setErr("用户已被禁用") setErr("用户已被禁用")
break
}
return return
} }
}
setErr(String(v)) setErr(String(v))
console.warn(v)
}). }).
finally(() => setLoading(false)) finally(() => setLoading(false))

View File

@ -55,18 +55,16 @@ export default function SignUp() {
catch(v => { catch(v => {
captchaRef.current?.reload() captchaRef.current?.reload()
console.warn(v) console.warn(v)
if (v instanceof ApiErr) { if (v instanceof ApiErr) {
switch (v.code) { switch (v.code) {
case 3: case 3:
setRegErr("邮箱已存在") setRegErr("邮箱已存在")
break return
case 7: case 7:
setRegErr("用户名已存在") setRegErr("用户名已存在")
break
}
return return
} }
}
setRegErr(String(v)) setRegErr(String(v))
}). }).
finally(() => setLoading(false)) finally(() => setLoading(false))

View File

@ -21,7 +21,7 @@ var (
ErrExistUser = errors.New("邮箱已存在") ErrExistUser = errors.New("邮箱已存在")
ErrExitsName = errors.New("用户名已存在") ErrExitsName = errors.New("用户名已存在")
ErrRegLimit = errors.New("超过注册 ip 限制") ErrRegLimit = errors.New("超过注册 ip 限制")
ErrPassWord = errors.New("错误的密码") ErrPassWord = errors.New("错误的密码或用户名")
ErrChangeName = errors.New("离线模式 uuid 不允许修改用户名") 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) u, err := w.client.User.Query().Where(user.Email(l.Email)).WithProfile().Only(ctx)
if err != nil { 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) return model.LoginRep{}, fmt.Errorf("Login: %w", err)
} }
err = w.validatePass(ctx, u, l.Password) err = w.validatePass(ctx, u, l.Password)