按照配置文件启动
This commit is contained in:
parent
eda0d6a4ef
commit
969e012f57
54
cmd/authlibskin/config.yaml.template
Normal file
54
cmd/authlibskin/config.yaml.template
Normal 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: ""
|
@ -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)
|
||||
|
||||
config.YamlDeCode()
|
||||
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))
|
||||
|
||||
s, cancel := lo.Must2(server.InitializeRoute(ctx, config))
|
||||
defer cancel()
|
||||
panic(s.ListenAndServe())
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
setErr(String(v))
|
||||
console.warn(v)
|
||||
}).
|
||||
finally(() => setLoading(false))
|
||||
|
||||
|
@ -55,18 +55,16 @@ 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
|
||||
}
|
||||
}
|
||||
setRegErr(String(v))
|
||||
}).
|
||||
finally(() => setLoading(false))
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user