chore: ignore runtime data

This commit is contained in:
2026-03-18 22:09:24 +08:00
parent 0c4380c3c3
commit 568ccb08fa
8 changed files with 26 additions and 53 deletions

3
.gitignore vendored
View File

@@ -27,3 +27,6 @@ coverage/
.env.* .env.*
.env.local .env.local
.env.*.local .env.*.local
# Local runtime data (contains secrets/user data)
sproutgate-backend/data/

View File

@@ -214,11 +214,11 @@
## 管理端接口(需要管理员 Token ## 管理端接口(需要管理员 Token
管理员 Token 存放在 `data/config/admin.json`,默认值为 `shumengya520` 管理员 Token 存放在 `data/config/admin.json`;如果文件不存在,后端启动时会自动生成并写入该文件
请求时可使用以下任一方式携带: 请求时可使用以下任一方式携带:
- Query`?token=shumengya520` - Query`?token=<admin-token>`
- Header`X-Admin-Token: shumengya520` - Header`X-Admin-Token: <admin-token>`
- Header`Authorization: Bearer shumengya520` - Header`Authorization: Bearer <admin-token>`
### 获取用户列表 ### 获取用户列表
`GET /api/admin/users` `GET /api/admin/users`

View File

@@ -1,3 +0,0 @@
{
"token": "shumengya520"
}

View File

@@ -1,4 +0,0 @@
{
"jwtSecret": "c3Byb3V0Z2F0ZS1zZWNyZXQ=",
"issuer": "sproutgate"
}

View File

@@ -1,9 +0,0 @@
{
"fromName": "萌芽账户认证中心",
"fromAddress": "notice@smyhub.com",
"username": "notice@smyhub.com",
"password": "tyh@19900420",
"smtpHost": "smtp.qiye.aliyun.com",
"smtpPort": 465,
"encryption": "SSL"
}

View File

@@ -1,16 +0,0 @@
{
"account": "admin",
"passwordHash": "$2a$10$T3XCFYOldB7b3RLuu.oxJeXTIdifjXIRyZdf/nHFIEwWAFRedysHi",
"username": "管理员",
"email": "admin@smyhub.com",
"level": 0,
"sproutCoins": 0,
"secondaryEmails": [
"mail@smyhub.com"
],
"phone": "74074091740",
"avatarUrl": "https://img.shumengya.top/i/2025/11/02/69073c02060d3.webp",
"bio": "我是管理员",
"createdAt": "2026-03-14T18:38:07+08:00",
"updatedAt": "2026-03-14T19:26:11+08:00"
}

View File

@@ -1,13 +0,0 @@
{
"account": "shumengya",
"passwordHash": "$2a$10$f6JZ6S26BdfK8dxHQ/eeb.q9adTbkBmyprta8WlMCR3v5gMpERlgO",
"username": "树萌芽",
"email": "mail@smyhub.com",
"level": 0,
"sproutCoins": 100,
"secondaryEmails": [],
"avatarUrl": "https://img.shumengya.top/i/2025/11/02/69073c018174e.webp",
"bio": "(=^・ω・^=) 喵~",
"createdAt": "2026-03-14T18:12:20+08:00",
"updatedAt": "2026-03-14T18:12:20+08:00"
}

View File

@@ -119,9 +119,12 @@ func (s *Store) EmailConfig() EmailConfig {
} }
func (s *Store) loadOrCreateAdminConfig() error { func (s *Store) loadOrCreateAdminConfig() error {
defaultToken := "shumengya520"
if _, err := os.Stat(s.adminConfigPath); errors.Is(err, os.ErrNotExist) { if _, err := os.Stat(s.adminConfigPath); errors.Is(err, os.ErrNotExist) {
cfg := AdminConfig{Token: defaultToken} token, err := generateToken()
if err != nil {
return err
}
cfg := AdminConfig{Token: token}
if err := writeJSONFile(s.adminConfigPath, cfg); err != nil { if err := writeJSONFile(s.adminConfigPath, cfg); err != nil {
return err return err
} }
@@ -133,7 +136,11 @@ func (s *Store) loadOrCreateAdminConfig() error {
return err return err
} }
if strings.TrimSpace(cfg.Token) == "" { if strings.TrimSpace(cfg.Token) == "" {
cfg.Token = defaultToken token, err := generateToken()
if err != nil {
return err
}
cfg.Token = token
if err := writeJSONFile(s.adminConfigPath, cfg); err != nil { if err := writeJSONFile(s.adminConfigPath, cfg); err != nil {
return err return err
} }
@@ -194,7 +201,7 @@ func (s *Store) loadOrCreateEmailConfig() error {
FromName: "萌芽账户认证中心", FromName: "萌芽账户认证中心",
FromAddress: "notice@smyhub.com", FromAddress: "notice@smyhub.com",
Username: "", Username: "",
Password: "tyh@19900420", Password: "",
SMTPHost: "smtp.qiye.aliyun.com", SMTPHost: "smtp.qiye.aliyun.com",
SMTPPort: 465, SMTPPort: 465,
Encryption: "SSL", Encryption: "SSL",
@@ -243,6 +250,14 @@ func generateSecret() ([]byte, error) {
return secret, err return secret, err
} }
func generateToken() (string, error) {
secret, err := generateSecret()
if err != nil {
return "", err
}
return base64.RawURLEncoding.EncodeToString(secret), nil
}
func (s *Store) ListUsers() ([]models.UserRecord, error) { func (s *Store) ListUsers() ([]models.UserRecord, error) {
s.mu.Lock() s.mu.Lock()
defer s.mu.Unlock() defer s.mu.Unlock()