Compare commits

..

No commits in common. "test" and "master" have entirely different histories.
test ... master

97 changed files with 2001 additions and 1822 deletions

View File

@ -3,14 +3,19 @@ name: CI
on:
push:
branches:
- master
- 'master'
tags:
- 'v*'
pull_request:
branches:
- master
env:
# Use docker.io for Docker Hub if empty
REGISTRY: git.thehrz.net
# github.repository as <account>/<repo>
IMAGE_NAME: H8-Network/TinySkin
jobs:
deploy:
release-image:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
@ -20,6 +25,29 @@ jobs:
# - name: Install Docker
# run: curl -fsSL https://get.docker.com | sh
- name: Deploy with Docker
run: docker compose up --build --force-recreate -d
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log into registry
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.TOKEN }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
# labels: ${{ steps.meta.outputs.labels }}
# cache-from: type=gha
# cache-to: type=gha,mode=max

View File

@ -1,42 +0,0 @@
name: Go
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.x
uses: actions/setup-go@v4
with:
go-version: ^1.21
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v4
- name: Build
run: |
bash build.sh
- name: start mysql / redis
run: |
sudo systemctl start mysql.service
sudo apt update
sudo apt install redis
sudo mysql -u root -proot -e "CREATE DATABASE IF NOT EXISTS test;"
- name: Test
run: go test -tags="redis,sqlite" -race -v ./...
- name: Upload a Build Artifact
uses: actions/upload-artifact@v3
with:
# A file, directory or wildcard pattern that describes what to upload
path: cmd/authlibskin/out/*
name: ${{ github.run_number }}

View File

@ -1,54 +0,0 @@
name: Build And Publish Releases
# https://github.com/softprops/action-gh-release/issues/236#issuecomment-1150530128
permissions:
contents: write
on:
# Allow mannual trigger
workflow_dispatch:
# Trigger on push new tag
push:
tags:
- "v*.*.*"
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build Frontend
run: |
bash build_frontend.sh
- name: Compile
uses: crazy-max/ghaction-xgo@v3
with:
xgo_version: latest
go_version: 1.21.x
dest: dist
prefix: authlibskin
targets: windows/386,windows/amd64,linux/386,linux/amd64,linux/arm,linux/arm64,darwin/arm64,darwin/amd64
# Show less information
v: false
x: false
race: false
ldflags: -s -w
tags: redis,sqlite
pkg: cmd/authlibskin
buildmode: default
trimpath: true
- name: upx
run: |
upx ./dist/*
- name: Print sha256
run : |
sha256sum ./dist/*
sha256sum ./dist/* > ./dist/sha256
- name: Publish GitHub Releases
uses: softprops/action-gh-release@v1
with:
name: "authlibskin ${{ github.ref_name }}"
files: |
./dist/*
token: ${{ secrets.GITHUB_TOKEN }}

3
.gitignore vendored
View File

@ -3,6 +3,7 @@ cmd/authlibskin/config.yaml
cmd/authlibskin/skin
cmd/authlibskin/authlibskin.exe
server/static/files
cmd/authlibskin/config.toml
config.toml
out/
stats.html
.idea

View File

@ -3,17 +3,15 @@ FROM node:20-alpine AS frontend-stage
WORKDIR /app
RUN corepack enable
# COPY frontend/package.json frontend/pnpm-lock.yaml ./
# RUN --mount=type=cache,id=pnpm-store,target=/root/.pnpm-store \
# pnpm install --frozen-lockfile
COPY frontend/package.json frontend/pnpm-lock.yaml ./
RUN --mount=type=cache,id=pnpm-store,target=/root/.pnpm-store \
pnpm install --frozen-lockfile
COPY frontend .
RUN pnpm install
RUN pnpm build
FROM golang:1.23 AS build-stage
FROM golang:1.23-alpine AS build-stage
WORKDIR /app
ENV GOPROXY https://goproxy.cn,direct
@ -23,4 +21,6 @@ COPY . .
RUN go build -o app .
CMD ["/app/app"]
VOLUME /app/config
ENTRYPOINT ["/app/app", "-c", "./config/config.toml"]

View File

@ -1,4 +1,7 @@
# authlib-skin
# TinySkin
Fork from [authlib-skin](https://tinyskin).
轻量级的 Yggdrasil 服务端实现,后端 Go前端 react。
适合于只需要用于 [authlib-injector](https://github.com/yushijinhun/authlib-injector) 的验证服务器的情况,部署简单。
@ -6,20 +9,8 @@
实现了 [Yggdrasil](https://github.com/yushijinhun/authlib-injector/wiki/Yggdrasil-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83) 规范,可用于一些启动器中的外置登录,和服务器的外置登录。
## 特性
- 支持用于聊天签名的 /player/certificates 接口
- 支持于离线模式相同的方式生成用户 uuid开启后不可更改用户名
- 基本的用户管理
- Cloudflare Turnstile 支持
## 运行
`./authlibskin` 运行,`-c` 指定配置文件位置,若找不到配置文件,则会生成示例配置文件,其中带有注释。
## 编译
`redis``sqlite` tag 控制是否开启 redis 和 sqlite 支持,使用 `sqlite` tag 需要 c 语言工具链。
请使用 build.sh 编译,会依次对前端和后端源码进行编译打包。
## 下载
https://github.com/xmdhs/authlib-skin/releases
## demo
https://skin.xmdhs.com

View File

@ -1,5 +0,0 @@
#!/bin/bash
bash ./build_frontend.sh
cd cmd/authlibskin
go build -trimpath -ldflags "-w -s" -tags="redis,sqlite" -o out/authlibskin

View File

@ -1,6 +0,0 @@
#!/bin/bash
cd frontend
npm install -g pnpm
pnpm install
pnpm build
cp -r dist ../server/static/files

View File

@ -7,7 +7,7 @@ type Config struct {
Sql Sql `toml:"sql"`
Debug bool `toml:"debug" comment:"输出每条执行的 sql 语句"`
Cache Cache `toml:"cache"`
RaelIP bool `toml:"raelIP" comment:"位于反向代理后启用,用于记录真实 ip\n若直接提供服务请勿打开否则会被伪造 ip"`
RealIP bool `toml:"realIP" comment:"位于反向代理后启用,用于记录真实 ip\n若直接提供服务请勿打开否则会被伪造 ip"`
MaxIpUser int `toml:"maxIpUser" comment:"ip 段最大注册用户ipv4 为 /24 ipv6 为 /48"`
RsaPriKey string `toml:"rsaPriKey,multiline" comment:"运行后勿修改,若为集群需设置为一致"`
TexturePath string `toml:"texturePath" comment:"材质文件保存路径,如果需要对象存储可以把对象储存挂载到本地目录上"`
@ -76,7 +76,7 @@ func Default() Config {
Addr: "",
Password: "",
},
RaelIP: false,
RealIP: false,
MaxIpUser: 0,
RsaPriKey: "",
TexturePath: "",

View File

@ -8,17 +8,17 @@ import (
"fmt"
"log"
"github.com/xmdhs/authlib-skin/db/ent/migrate"
"tinyskin/db/ent/migrate"
"entgo.io/ent"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
"tinyskin/db/ent/usertoken"
)
// Client is the client that holds all ent builders.

View File

@ -12,11 +12,11 @@ import (
"entgo.io/ent"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
"tinyskin/db/ent/usertoken"
)
// ent aliases to avoid import conflicts in user's code.

View File

@ -5,12 +5,12 @@ package enttest
import (
"context"
"github.com/xmdhs/authlib-skin/db/ent"
"tinyskin/db/ent"
// required by schema hooks.
_ "github.com/xmdhs/authlib-skin/db/ent/runtime"
_ "tinyskin/db/ent/runtime"
"entgo.io/ent/dialect/sql/schema"
"github.com/xmdhs/authlib-skin/db/ent/migrate"
"tinyskin/db/ent/migrate"
)
type (

View File

@ -6,7 +6,7 @@ import (
"context"
"fmt"
"github.com/xmdhs/authlib-skin/db/ent"
"tinyskin/db/ent"
)
// The TextureFunc type is an adapter to allow the use of ordinary

View File

@ -10,12 +10,12 @@ import (
"entgo.io/ent"
"entgo.io/ent/dialect/sql"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
"tinyskin/db/ent/usertoken"
)
const (

View File

@ -2,7 +2,7 @@
package runtime
// The schema-stitching logic is generated in github.com/xmdhs/authlib-skin/db/ent/runtime.go
// The schema-stitching logic is generated in tinyskin/db/ent/runtime.go
const (
Version = "(devel)" // Version of ent codegen.

View File

@ -8,8 +8,8 @@ import (
"entgo.io/ent"
"entgo.io/ent/dialect/sql"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
)
// Texture is the model entity for the Texture schema.

View File

@ -5,7 +5,7 @@ package texture
import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"tinyskin/db/ent/predicate"
)
// ID filters vertices based on their ID field.

View File

@ -9,10 +9,10 @@ import (
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// TextureCreate is the builder for creating a Texture entity.

View File

@ -8,8 +8,8 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
)
// TextureDelete is the builder for deleting a Texture entity.

View File

@ -12,11 +12,11 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// TextureQuery is the builder for querying Texture entities.

View File

@ -10,11 +10,11 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// TextureUpdate is the builder for updating Texture entities.

View File

@ -8,9 +8,9 @@ import (
"entgo.io/ent"
"entgo.io/ent/dialect/sql"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertoken"
)
// User is the model entity for the User schema.

View File

@ -5,7 +5,7 @@ package user
import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"tinyskin/db/ent/predicate"
)
// ID filters vertices based on their ID field.

View File

@ -9,10 +9,10 @@ import (
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertoken"
)
// UserCreate is the builder for creating a User entity.

View File

@ -8,8 +8,8 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/user"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/user"
)
// UserDelete is the builder for deleting a User entity.

View File

@ -12,11 +12,11 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertoken"
)
// UserQuery is the builder for querying User entities.

View File

@ -10,11 +10,11 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertoken"
)
// UserUpdate is the builder for updating User entities.

View File

@ -8,8 +8,8 @@ import (
"entgo.io/ent"
"entgo.io/ent/dialect/sql"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
)
// UserProfile is the model entity for the UserProfile schema.

View File

@ -5,7 +5,7 @@ package userprofile
import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"tinyskin/db/ent/predicate"
)
// ID filters vertices based on their ID field.

View File

@ -9,10 +9,10 @@ import (
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// UserProfileCreate is the builder for creating a UserProfile entity.

View File

@ -8,8 +8,8 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/userprofile"
)
// UserProfileDelete is the builder for deleting a UserProfile entity.

View File

@ -12,11 +12,11 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// UserProfileQuery is the builder for querying UserProfile entities.

View File

@ -10,11 +10,11 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// UserProfileUpdate is the builder for updating UserProfile entities.

View File

@ -8,9 +8,9 @@ import (
"entgo.io/ent"
"entgo.io/ent/dialect/sql"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// UserTexture is the model entity for the UserTexture schema.

View File

@ -5,7 +5,7 @@ package usertexture
import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"tinyskin/db/ent/predicate"
)
// ID filters vertices based on their ID field.

View File

@ -9,9 +9,9 @@ import (
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// UserTextureCreate is the builder for creating a UserTexture entity.

View File

@ -8,8 +8,8 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/usertexture"
)
// UserTextureDelete is the builder for deleting a UserTexture entity.

View File

@ -11,10 +11,10 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// UserTextureQuery is the builder for querying UserTexture entities.

View File

@ -10,10 +10,10 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertexture"
)
// UserTextureUpdate is the builder for updating UserTexture entities.

View File

@ -8,8 +8,8 @@ import (
"entgo.io/ent"
"entgo.io/ent/dialect/sql"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/user"
"tinyskin/db/ent/usertoken"
)
// UserToken is the model entity for the UserToken schema.

View File

@ -5,7 +5,7 @@ package usertoken
import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"tinyskin/db/ent/predicate"
)
// ID filters vertices based on their ID field.

View File

@ -9,8 +9,8 @@ import (
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/user"
"tinyskin/db/ent/usertoken"
)
// UserTokenCreate is the builder for creating a UserToken entity.

View File

@ -8,8 +8,8 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/usertoken"
)
// UserTokenDelete is the builder for deleting a UserToken entity.

View File

@ -11,9 +11,9 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/user"
"tinyskin/db/ent/usertoken"
)
// UserTokenQuery is the builder for querying UserToken entities.

View File

@ -10,9 +10,9 @@ import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqlgraph"
"entgo.io/ent/schema/field"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/user"
"tinyskin/db/ent/usertoken"
)
// UserTokenUpdate is the builder for updating UserToken entities.

View File

@ -1,21 +0,0 @@
version: "3.9"
networks:
traefik:
name: traefik
external: true
authlib-skin:
name: authlib-skin
services:
authlib-skin:
build: .
container_name: authlib-skin
restart: always
labels:
- traefik.enable=true
- traefik.http.routers.authlib-skin.rule=Host(`auth.hfbz.net`)
- traefik.http.routers.authlib-skin.entrypoints=web,websecure
- traefik.http.routers.authlib-skin.middlewares=CORS@file
networks:
- authlib-skin

1
frontend/.env Normal file
View File

@ -0,0 +1 @@
VITE_APIADDR = ''

View File

@ -0,0 +1 @@
VITE_APIADDR = 'http://127.0.0.1:8080'

18
frontend/.eslintrc.cjs Normal file
View File

@ -0,0 +1,18 @@
module.exports = {
root: true,
env: { browser: true, es2020: true },
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react-hooks/recommended',
],
ignorePatterns: ['dist', '.eslintrc.cjs'],
parser: '@typescript-eslint/parser',
plugins: ['react-refresh'],
rules: {
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
},
}

View File

@ -14,37 +14,14 @@ If you are developing a production application, we recommend updating the config
- Configure the top-level `parserOptions` property like this:
```js
export default tseslint.config({
languageOptions: {
// other options...
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
},
})
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
project: ['./tsconfig.json', './tsconfig.node.json'],
tsconfigRootDir: __dirname,
},
```
- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked`
- Optionally add `...tseslint.configs.stylisticTypeChecked`
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config:
```js
// eslint.config.js
import react from 'eslint-plugin-react'
export default tseslint.config({
// Set the react version
settings: { react: { version: '18.3' } },
plugins: {
// Add the react plugin
react,
},
rules: {
// other rules...
// Enable its recommended rules
...react.configs.recommended.rules,
...react.configs['jsx-runtime'].rules,
},
})
```
- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list

View File

@ -1,28 +0,0 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import tseslint from 'typescript-eslint'
export default tseslint.config(
{ ignores: ['dist'] },
{
extends: [js.configs.recommended, ...tseslint.configs.recommended],
files: ['**/*.{ts,tsx}'],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
plugins: {
'react-hooks': reactHooks,
'react-refresh': reactRefresh,
},
rules: {
...reactHooks.configs.recommended.rules,
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
},
},
)

View File

@ -1,10 +1,10 @@
<!doctype html>
<html lang="en">
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React + TS</title>
<title>皮肤站</title>
</head>
<body>
<div id="root"></div>

View File

@ -1,5 +1,5 @@
{
"name": "authlib-skin",
"name": "@xmdhs/authlib-skin",
"private": true,
"version": "0.0.0",
"type": "module",
@ -12,13 +12,13 @@
"dependencies": {
"@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0",
"@marsidev/react-turnstile": "^0.3.2",
"@mui/icons-material": "^5.16.7",
"@mui/material": "^5.16.7",
"@marsidev/react-turnstile": "^1.0.2",
"@mui/icons-material": "^6.1.7",
"@mui/material": "^6.1.7",
"ahooks": "^3.8.1",
"immer": "^10.1.1",
"jotai": "^2.10.1",
"mui-file-input": "^3.0.2",
"jotai": "^2.10.2",
"mui-file-input": "^6.0.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^6.28.0",
@ -29,14 +29,10 @@
"@types/node": "^20.17.6",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@typescript-eslint/eslint-plugin": "^6.21.0",
"@typescript-eslint/parser": "^6.21.0",
"@vitejs/plugin-legacy": "^5.4.3",
"@vitejs/plugin-react": "^4.3.3",
"@vitejs/plugin-react-swc": "^3.7.1",
"eslint": "^8.57.1",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.14",
"rollup-plugin-visualizer": "^5.12.0",
"terser": "^5.36.0",
"typescript": "^5.6.3",
"vite": "^5.4.11"
}

2765
frontend/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
import Button from "@mui/material/Button"
import { useCallback } from "react"
export default function QuickSetter() {
const url = "https://auth.hfbz.net/api/yggdrasil"
const handleDragStart = useCallback(
(event: React.DragEvent<HTMLButtonElement>) => {
const uri = "authlib-injector:yggdrasil-server:" + encodeURIComponent(url)
if (event.dataTransfer) {
event.dataTransfer.setData("text/plain", uri)
event.dataTransfer.dropEffect = "copy"
}
},
[url]
)
return (
<Button variant="contained" draggable onDragStart={handleDragStart}>
</Button>
)
}

View File

@ -165,8 +165,8 @@ export default function SignUp() {
}}
checkList={[
{
errMsg: "长度在 3-16 之间",
reg: /^.{3,16}$/
errMsg: "长度在 3-16 之间由数字、大小写字母、_构成",
reg: /^[0-9a-zA-Z_]{3,16}$/
}
]}
required

View File

@ -76,8 +76,8 @@ export default function UserAdmin() {
<TableRow>
<TableCell></TableCell>
<TableCell></TableCell>
<TableCell> ip</TableCell>
<TableCell>uuid</TableCell>
<TableCell> IP</TableCell>
<TableCell>UUID</TableCell>
<TableCell></TableCell>
</TableRow>
</TableHead>

View File

@ -11,6 +11,7 @@ import Box from '@mui/material/Box';
import useTitle from '@/hooks/useTitle';
import SkinViewUUID from '@/components/SkinViewUUID';
import root from '@/utils/root';
import YggdrasilSetter from '@/components/YggdrasilSetter';
const Profile = function Profile() {
const navigate = useNavigate();
@ -28,11 +29,11 @@ const Profile = function Profile() {
}, gridTemplateColumns: { lg: "1fr 1fr auto" }
}}>
<Card sx={{ gridArea: "a" }}>
<CardHeader title="信息" />
<CardHeader title="游戏信息" />
<CardContent sx={{ display: "grid", gridTemplateColumns: "4em auto" }}>
<Typography>name</Typography>
<Typography></Typography>
<Typography>{userinfo.name}</Typography>
<Typography>uuid</Typography>
<Typography>UUID</Typography>
<Typography sx={{ wordBreak: 'break-all' }}>{userinfo.uuid}</Typography>
</CardContent>
{/* <CardActions>
@ -51,8 +52,10 @@ const Profile = function Profile() {
<Card sx={{ gridArea: "c" }}>
<CardHeader title="启动器设置" />
<CardContent>
<Typography> Yggdrasil API </Typography>
<Typography> Yggdrasil </Typography>
<code style={{ wordBreak: "break-all" }}>{getYggRoot()}</code>
<Typography> API </Typography>
<YggdrasilSetter />
</CardContent>
</Card>
<Box sx={{ gridArea: "d" }}></Box>

View File

@ -1,26 +0,0 @@
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "Bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
"include": ["src"]
}

View File

@ -1,7 +1,39 @@
{
"files": [],
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": [
"ES2020",
"DOM",
"DOM.Iterable"
],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": ".",
"paths": {
"@/*": [
"src/*"
]
},
},
"include": [
"src"
],
"references": [
{ "path": "./tsconfig.app.json" },
{ "path": "./tsconfig.node.json" }
{
"path": "./tsconfig.node.json"
}
]
}

View File

@ -1,24 +1,10 @@
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"target": "ES2022",
"lib": ["ES2023"],
"module": "ESNext",
"composite": true,
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "Bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}

View File

@ -1,28 +1,17 @@
import { defineConfig, type PluginOption } from 'vite'
import react from '@vitejs/plugin-react-swc'
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { join } from "path";
import { visualizer } from "rollup-plugin-visualizer";
import legacy from '@vitejs/plugin-legacy'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
visualizer() as PluginOption,
react(),
legacy()
],
resolve: {
alias: {
'@': join(__dirname, "src")
},
},
build: {
rollupOptions: {
output: {
manualChunks: {
['skinview3d']: ['skinview3d'],
['@mui/material']: ['@mui/material']
},
},
},
},
}
})

2
go.mod
View File

@ -1,4 +1,4 @@
module github.com/xmdhs/authlib-skin
module tinyskin
go 1.23

View File

@ -7,13 +7,14 @@ import (
"strconv"
"strings"
"tinyskin/handle/handelerror"
"tinyskin/model"
"tinyskin/service"
"github.com/go-chi/chi/v5"
"github.com/go-playground/validator/v10"
"github.com/xmdhs/authlib-skin/handle/handelerror"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/service"
U "github.com/xmdhs/authlib-skin/utils"
U "tinyskin/utils"
)
type AdminHandel struct {

View File

@ -4,8 +4,8 @@ import (
"encoding/json"
"net/http"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/service"
"tinyskin/model"
"tinyskin/service"
)
type Handel struct {

View File

@ -7,11 +7,11 @@ import (
"log/slog"
"net/http"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/service"
"github.com/xmdhs/authlib-skin/service/auth"
"github.com/xmdhs/authlib-skin/service/captcha"
"github.com/xmdhs/authlib-skin/service/email"
"tinyskin/model"
"tinyskin/service"
"tinyskin/service/auth"
"tinyskin/service/captcha"
"tinyskin/service/email"
)
type HandleError struct {

View File

@ -6,9 +6,10 @@ import (
"io"
"net/netip"
"tinyskin/model"
"github.com/google/wire"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/model"
)
var HandelSet = wire.NewSet(NewUserHandel, NewAdminHandel, NewHandel)

View File

@ -13,13 +13,14 @@ import (
"strings"
"sync"
"tinyskin/config"
"tinyskin/handle/handelerror"
"tinyskin/model"
"tinyskin/service"
"tinyskin/utils"
"github.com/go-chi/chi/v5"
"github.com/go-playground/validator/v10"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/handle/handelerror"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/service"
"github.com/xmdhs/authlib-skin/utils"
)
type UserHandel struct {

View File

@ -5,7 +5,7 @@ import (
"encoding/json"
"net/http"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
"tinyskin/model/yggdrasil"
)
func handleYgError(ctx context.Context, w http.ResponseWriter, e yggdrasil.Error, httpcode int) {

View File

@ -4,10 +4,11 @@ import (
"encoding/json"
"net/http"
"tinyskin/model"
"tinyskin/model/yggdrasil"
"tinyskin/utils"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
"github.com/xmdhs/authlib-skin/utils"
)
func (y *Yggdrasil) SessionJoin() http.HandlerFunc {

View File

@ -7,11 +7,12 @@ import (
"net/http"
"strings"
"github.com/go-chi/chi/v5"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
"tinyskin/model"
"tinyskin/model/yggdrasil"
yggdrasilS "github.com/xmdhs/authlib-skin/service/yggdrasil"
"github.com/go-chi/chi/v5"
yggdrasilS "tinyskin/service/yggdrasil"
)
func (y *Yggdrasil) getTokenbyAuthorization(ctx context.Context, w http.ResponseWriter, r *http.Request) string {

View File

@ -5,11 +5,12 @@ import (
"errors"
"net/http"
"tinyskin/model"
"tinyskin/model/yggdrasil"
yggdrasilS "tinyskin/service/yggdrasil"
"github.com/go-chi/chi/v5"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
yggdrasilS "github.com/xmdhs/authlib-skin/service/yggdrasil"
)
func (y *Yggdrasil) Authenticate() http.HandlerFunc {

View File

@ -11,13 +11,14 @@ import (
"net/http"
"net/url"
"tinyskin/config"
"tinyskin/model/yggdrasil"
"tinyskin/service/auth"
yggdrasilS "tinyskin/service/yggdrasil"
"tinyskin/utils"
"github.com/go-playground/validator/v10"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
"github.com/xmdhs/authlib-skin/service/auth"
yggdrasilS "github.com/xmdhs/authlib-skin/service/yggdrasil"
"github.com/xmdhs/authlib-skin/utils"
)
type PubRsaKey string

30
main.go
View File

@ -11,11 +11,12 @@ import (
_ "embed"
"tinyskin/config"
"tinyskin/server"
"tinyskin/utils/sign"
"github.com/pelletier/go-toml/v2"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/server"
"github.com/xmdhs/authlib-skin/utils/sign"
)
var configPath string
@ -27,19 +28,20 @@ func init() {
func main() {
ctx := context.Background()
if _, err := os.Stat(configPath); errors.Is(err, os.ErrNotExist) {
rsa2048 := lo.Must(rsa.GenerateKey(rand.Reader, 4096))
as := sign.NewAuthlibSignWithKey(rsa2048)
c := config.Default()
c.RsaPriKey = lo.Must(as.GetPriKey())
lo.Must0(os.WriteFile(configPath, lo.Must(toml.Marshal(c)), 0600))
fmt.Println("未找到配置文件,已写入模板配置文件")
}
b, err := os.ReadFile(configPath)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
rsa2048 := lo.Must(rsa.GenerateKey(rand.Reader, 4096))
as := sign.NewAuthlibSignWithKey(rsa2048)
c := config.Default()
c.RsaPriKey = lo.Must(as.GetPriKey())
lo.Must0(os.WriteFile(configPath, lo.Must(toml.Marshal(c)), 0600))
fmt.Println("未找到配置文件,已写入模板配置文件")
return
}
panic(err)
}
var config config.Config

View File

@ -10,16 +10,17 @@ import (
"os"
"time"
"tinyskin/config"
"tinyskin/db/cache"
"tinyskin/db/ent"
"tinyskin/db/ent/migrate"
"tinyskin/handle/yggdrasil"
"tinyskin/utils/sign"
entsql "entgo.io/ent/dialect/sql"
"github.com/go-playground/validator/v10"
_ "github.com/go-sql-driver/mysql"
"github.com/google/wire"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/db/ent/migrate"
"github.com/xmdhs/authlib-skin/handle/yggdrasil"
"github.com/xmdhs/authlib-skin/utils/sign"
)
func ProvideSlog(c config.Config) slog.Handler {

View File

@ -5,20 +5,21 @@ import (
"log/slog"
"net/http"
"tinyskin/config"
"tinyskin/handle"
"tinyskin/handle/yggdrasil"
"tinyskin/server/static"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"github.com/go-chi/cors"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/handle"
"github.com/xmdhs/authlib-skin/handle/yggdrasil"
"github.com/xmdhs/authlib-skin/server/static"
)
func NewRoute(handelY *yggdrasil.Yggdrasil, handel *handle.Handel, c config.Config, sl slog.Handler,
userHandel *handle.UserHandel, adminHandel *handle.AdminHandel) http.Handler {
r := chi.NewRouter()
r.Use(middleware.RequestID)
if c.RaelIP {
if c.RealIP {
r.Use(middleware.RealIP)
}
if sl.Enabled(context.Background(), slog.LevelDebug) {

View File

@ -4,7 +4,7 @@ import (
"net/http"
"time"
"github.com/xmdhs/authlib-skin/config"
"tinyskin/config"
)
func NewServer(c config.Config, route http.Handler) (*http.Server, func()) {

View File

@ -6,17 +6,18 @@ import (
"context"
"net/http"
"tinyskin/config"
"tinyskin/handle"
"tinyskin/handle/handelerror"
"tinyskin/handle/yggdrasil"
"tinyskin/server/route"
"tinyskin/service"
"tinyskin/service/auth"
"tinyskin/service/captcha"
"tinyskin/service/email"
yggdrasilS "tinyskin/service/yggdrasil"
"github.com/google/wire"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/handle"
"github.com/xmdhs/authlib-skin/handle/handelerror"
"github.com/xmdhs/authlib-skin/handle/yggdrasil"
"github.com/xmdhs/authlib-skin/server/route"
"github.com/xmdhs/authlib-skin/service"
"github.com/xmdhs/authlib-skin/service/auth"
"github.com/xmdhs/authlib-skin/service/captcha"
"github.com/xmdhs/authlib-skin/service/email"
yggdrasilS "github.com/xmdhs/authlib-skin/service/yggdrasil"
)
var serviceSet = wire.NewSet(service.Service, yggdrasilS.NewYggdrasil, email.NewEmail, auth.NewAuthService,

View File

@ -9,16 +9,16 @@ package server
import (
"context"
"github.com/google/wire"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/handle"
"github.com/xmdhs/authlib-skin/handle/handelerror"
yggdrasil2 "github.com/xmdhs/authlib-skin/handle/yggdrasil"
"github.com/xmdhs/authlib-skin/server/route"
"github.com/xmdhs/authlib-skin/service"
"github.com/xmdhs/authlib-skin/service/auth"
"github.com/xmdhs/authlib-skin/service/captcha"
"github.com/xmdhs/authlib-skin/service/email"
"github.com/xmdhs/authlib-skin/service/yggdrasil"
"tinyskin/config"
"tinyskin/handle"
"tinyskin/handle/handelerror"
yggdrasil2 "tinyskin/handle/yggdrasil"
"tinyskin/server/route"
"tinyskin/service"
"tinyskin/service/auth"
"tinyskin/service/captcha"
"tinyskin/service/email"
"tinyskin/service/yggdrasil"
"net/http"
)

View File

@ -6,18 +6,18 @@ import (
"fmt"
"strconv"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/db/ent/predicate"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
"github.com/xmdhs/authlib-skin/service/auth"
utilsService "github.com/xmdhs/authlib-skin/service/utils"
"github.com/xmdhs/authlib-skin/utils"
"tinyskin/config"
"tinyskin/db/cache"
"tinyskin/db/ent"
"tinyskin/db/ent/predicate"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertoken"
"tinyskin/model"
"tinyskin/model/yggdrasil"
"tinyskin/service/auth"
utilsService "tinyskin/service/utils"
"tinyskin/utils"
)
type AdminService struct {

View File

@ -4,9 +4,10 @@ import (
"context"
"testing"
"tinyskin/model"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/xmdhs/authlib-skin/model"
)
func TestAdminSerice_Auth(t *testing.T) {

View File

@ -8,14 +8,15 @@ import (
"strconv"
"time"
"tinyskin/db/cache"
"tinyskin/db/ent"
"tinyskin/db/ent/user"
"tinyskin/db/ent/usertoken"
"tinyskin/model"
"tinyskin/model/yggdrasil"
"tinyskin/utils"
"github.com/golang-jwt/jwt/v5"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
"github.com/xmdhs/authlib-skin/utils"
)
type AuthService struct {

View File

@ -5,8 +5,9 @@ import (
"fmt"
"time"
"tinyskin/model"
"github.com/golang-jwt/jwt/v5"
"github.com/xmdhs/authlib-skin/model"
)
func IsAdmin(state int) bool {

View File

@ -9,7 +9,7 @@ import (
"net/http"
"strings"
"github.com/xmdhs/authlib-skin/config"
"tinyskin/config"
)
type CaptchaService struct {

View File

@ -11,11 +11,12 @@ import (
"net/url"
"time"
"tinyskin/config"
"tinyskin/db/cache"
"github.com/golang-jwt/jwt/v5"
"github.com/samber/lo"
"github.com/wneessen/go-mail"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/db/cache"
)
type EmailConfig struct {

View File

@ -9,15 +9,15 @@ import (
"os"
"path/filepath"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/model"
utilsService "github.com/xmdhs/authlib-skin/service/utils"
"github.com/xmdhs/authlib-skin/utils"
"tinyskin/config"
"tinyskin/db/cache"
"tinyskin/db/ent"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/model"
utilsService "tinyskin/service/utils"
"tinyskin/utils"
)
type TextureService struct {

View File

@ -8,17 +8,18 @@ import (
"strings"
"time"
"tinyskin/config"
"tinyskin/db/cache"
"tinyskin/db/ent"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/model"
"tinyskin/service/auth"
"tinyskin/service/captcha"
"tinyskin/service/email"
"tinyskin/utils"
"github.com/google/uuid"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/service/auth"
"github.com/xmdhs/authlib-skin/service/captcha"
"github.com/xmdhs/authlib-skin/service/email"
"github.com/xmdhs/authlib-skin/utils"
)
var (

View File

@ -8,16 +8,17 @@ import (
"os"
"testing"
"tinyskin/config"
"tinyskin/db/cache"
"tinyskin/db/ent"
"tinyskin/db/ent/migrate"
"tinyskin/model"
"tinyskin/service/auth"
"tinyskin/service/captcha"
"tinyskin/service/email"
_ "github.com/go-sql-driver/mysql"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/db/ent/migrate"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/service/auth"
"github.com/xmdhs/authlib-skin/service/captcha"
"github.com/xmdhs/authlib-skin/service/email"
)
var (

View File

@ -7,10 +7,11 @@ import (
"os"
"path/filepath"
"tinyskin/db/ent"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/usertexture"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/usertexture"
)
func DelTexture(ctx context.Context, userProfileID int, textureType string, client *ent.Client, texturePath string) error {

View File

@ -4,10 +4,10 @@ import (
"context"
"fmt"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/utils"
"tinyskin/config"
"tinyskin/db/ent"
"tinyskin/model"
"tinyskin/utils"
)
type WebService struct {

View File

@ -5,11 +5,11 @@ import (
"fmt"
"time"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
"github.com/xmdhs/authlib-skin/service/auth"
"tinyskin/db/cache"
"tinyskin/db/ent/userprofile"
"tinyskin/model"
"tinyskin/model/yggdrasil"
"tinyskin/service/auth"
)
type sessionWithIP struct {

View File

@ -5,10 +5,10 @@ import (
"errors"
"fmt"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/model"
utilsService "github.com/xmdhs/authlib-skin/service/utils"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/model"
utilsService "tinyskin/service/utils"
)
var (

View File

@ -15,18 +15,19 @@ import (
"strings"
"time"
"tinyskin/db/cache"
"tinyskin/db/ent"
"tinyskin/db/ent/texture"
"tinyskin/db/ent/user"
"tinyskin/db/ent/userprofile"
"tinyskin/db/ent/usertoken"
"tinyskin/model"
"tinyskin/model/yggdrasil"
"tinyskin/utils"
"tinyskin/utils/sign"
"github.com/google/uuid"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/db/ent/texture"
"github.com/xmdhs/authlib-skin/db/ent/user"
"github.com/xmdhs/authlib-skin/db/ent/userprofile"
"github.com/xmdhs/authlib-skin/db/ent/usertoken"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
"github.com/xmdhs/authlib-skin/utils"
"github.com/xmdhs/authlib-skin/utils/sign"
)
var (

View File

@ -11,13 +11,14 @@ import (
"sync"
"time"
"tinyskin/config"
"tinyskin/db/cache"
"tinyskin/db/ent"
"tinyskin/model"
"tinyskin/model/yggdrasil"
"tinyskin/service/auth"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/model"
"github.com/xmdhs/authlib-skin/model/yggdrasil"
"github.com/xmdhs/authlib-skin/service/auth"
)
type Yggdrasil struct {

View File

@ -5,9 +5,10 @@ import (
"net/http"
"testing"
"tinyskin/model"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/xmdhs/authlib-skin/model"
)
func TestAuthMiddleware(t *testing.T) {

View File

@ -5,10 +5,11 @@ import (
"os"
"testing"
"tinyskin/config"
"tinyskin/server"
"github.com/pelletier/go-toml/v2"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/server"
)
func TestMain(m *testing.M) {

View File

@ -4,7 +4,7 @@ import (
"context"
"fmt"
"github.com/xmdhs/authlib-skin/db/ent"
"tinyskin/db/ent"
)
func WithTx(ctx context.Context, client *ent.Client, fn func(tx *ent.Tx) error) error {