按照配置文件启动
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 (
|
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())
|
||||||
}
|
}
|
||||||
|
@ -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))
|
||||||
|
|
||||||
|
@ -55,17 +55,15 @@ 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))
|
||||||
}).
|
}).
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user