Skip to content

Commit e7097bd

Browse files
committed
清理未使用的代码
1 parent f14cb36 commit e7097bd

89 files changed

Lines changed: 10321 additions & 25701 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/copilot-instructions.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,23 @@ adminService := services.NewAdminService(daoManager, manager, storageService)
6464
- `dto/`: 数据传输对象
6565
- `mcp/`: MCP 协议相关模型
6666

67+
主模型文件 (`internal/models/models.go`) 通过类型别名提供向后兼容性:
68+
```go
69+
// 数据库模型别名
70+
type FileCode = db.FileCode
71+
type User = db.User
72+
73+
// 服务模型别名
74+
type BuildInfo = service.BuildInfo
75+
type ShareFileRequest = service.ShareFileRequest
76+
77+
// DTO 模型别名
78+
type UserUpdateFields = dto.UserUpdateFields
79+
80+
// MCP 模型别名
81+
type SystemConfigResponse = mcp.SystemConfigResponse
82+
```
83+
6784
## Development Workflows
6885

6986
### Build System
@@ -195,5 +212,9 @@ storageManager := storage.NewStorageManager(configManager)
195212
- `internal/repository/manager.go`: Repository 模式实现,提供统一的数据访问抽象层,替代原有 DAO 模式,支持事务管理
196213
- `docs/changelogs/REFACTOR_SUMMARY.md`: 完整的架构演进记录,包含数据库多类型支持、模块化路由系统、服务依赖自动化的实现细节
197214
- `Dockerfile`: 优化的多阶段构建配置,支持 CGO 编译、最小化运行时镜像、非 root 用户安全实践
215+
- **构建阶段**:使用 golang:1.24-alpine 作为构建环境,安装 gcc、musl-dev、sqlite-dev 等 CGO 依赖
216+
- **运行时阶段**:使用 alpine:latest 最小化镜像,只包含必要的运行时依赖 (ca-certificates、tzdata、sqlite)
217+
- **安全实践**:创建非 root 用户 (app:1000),设置适当的文件权限,暴露标准端口 12345
218+
- **构建优化**:使用 CGO_ENABLED=1 支持 SQLite,通过 -ldflags="-w -s" 减小二进制文件大小
198219

199220
此项目强调模块化、可扩展性和高性能,在修改时请保持现有的架构模式和编码约定。

.rules/ProjectRule.md

Whitespace-only changes.

cmd/fix_stats.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"os"
7+
8+
"github.com/zy84338719/filecodebox/internal/config"
9+
"github.com/zy84338719/filecodebox/internal/database"
10+
"github.com/zy84338719/filecodebox/internal/repository"
11+
"github.com/zy84338719/filecodebox/internal/services"
12+
)
13+
14+
func main() {
15+
if len(os.Args) < 2 || os.Args[1] != "fix-stats" {
16+
fmt.Println("Usage: go run fix_stats.go fix-stats")
17+
os.Exit(1)
18+
}
19+
20+
// 初始化配置
21+
manager := config.InitManager()
22+
23+
// 初始化数据库
24+
db, err := database.InitWithManager(manager)
25+
if err != nil {
26+
log.Fatalf("Failed to initialize database: %v", err)
27+
}
28+
29+
// 初始化Repository管理器
30+
repositoryManager := repository.NewRepositoryManager(db)
31+
32+
// 初始化用户服务
33+
userService := services.NewUserService(repositoryManager, manager)
34+
35+
// 修复所有用户的统计数据
36+
fmt.Println("开始修复用户统计数据...")
37+
err = userService.RecalculateAllUsersStats()
38+
if err != nil {
39+
log.Fatalf("Failed to recalculate user stats: %v", err)
40+
}
41+
42+
fmt.Println("用户统计数据修复完成!")
43+
}

debug_homepage.sh

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#!/bin/bash
2+
3+
echo "=== FileCodeBox 主页调试报告 ==="
4+
echo "时间: $(date)"
5+
echo
6+
7+
echo "1. 服务器状态检查:"
8+
if curl -s --connect-timeout 5 "http://0.0.0.0:12345/" >/dev/null; then
9+
echo "✅ 服务器正在运行"
10+
else
11+
echo "❌ 服务器连接失败"
12+
exit 1
13+
fi
14+
15+
echo
16+
echo "2. 主页响应检查:"
17+
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "http://0.0.0.0:12345/")
18+
echo "HTTP状态码: $HTTP_CODE"
19+
20+
if [ "$HTTP_CODE" = "200" ]; then
21+
echo "✅ HTTP响应正常"
22+
else
23+
echo "❌ HTTP响应异常"
24+
fi
25+
26+
echo
27+
echo "3. 内容长度检查:"
28+
CONTENT_LENGTH=$(curl -s "http://0.0.0.0:12345/" | wc -c)
29+
echo "内容长度: $CONTENT_LENGTH 字节"
30+
31+
if [ "$CONTENT_LENGTH" -gt 1000 ]; then
32+
echo "✅ 内容长度正常"
33+
else
34+
echo "❌ 内容长度异常"
35+
fi
36+
37+
echo
38+
echo "4. HTML结构检查:"
39+
if curl -s "http://0.0.0.0:12345/" | grep -q "<html"; then
40+
echo "✅ 包含HTML标签"
41+
else
42+
echo "❌ 缺少HTML标签"
43+
fi
44+
45+
if curl -s "http://0.0.0.0:12345/" | grep -q "<body"; then
46+
echo "✅ 包含body标签"
47+
else
48+
echo "❌ 缺少body标签"
49+
fi
50+
51+
if curl -s "http://0.0.0.0:12345/" | grep -q "container"; then
52+
echo "✅ 包含container元素"
53+
else
54+
echo "❌ 缺少container元素"
55+
fi
56+
57+
echo
58+
echo "5. 静态资源检查:"
59+
for resource in css/base.css js/main.js assets/images/logo.svg; do
60+
if curl -s --head "http://0.0.0.0:12345/$resource" | grep -q "200 OK"; then
61+
echo "$resource 可访问"
62+
else
63+
echo "$resource 不可访问"
64+
fi
65+
done
66+
67+
echo
68+
echo "6. 内容样本 (前10行):"
69+
curl -s "http://0.0.0.0:12345/" | head -10
70+
71+
echo
72+
echo "7. API配置检查:"
73+
if curl -s "http://0.0.0.0:12345/api/config" | grep -q '"code":200'; then
74+
echo "✅ API配置正常"
75+
else
76+
echo "❌ API配置异常"
77+
fi
78+
79+
echo
80+
echo "=== 调试完成 ==="

docs/ADMIN_AUTH_401_FIX_REPORT.md

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
# 管理员认证401错误修复报告
2+
3+
## 问题描述
4+
5+
用户使用JWT token访问管理员后台API(`/admin/dashboard`)时遇到401认证失败错误,尽管JWT token包含了正确的admin角色信息。
6+
7+
## 问题分析
8+
9+
### 原始JWT Token信息
10+
```json
11+
{
12+
"user_id": 1,
13+
"username": "zhangyi",
14+
"role": "admin",
15+
"session_id": "44cc370e5d95ef94420f8d20ad97f08d461e2044bea4f4c973127a4fdb72f8e2",
16+
"exp": 1758393916,
17+
"iat": 1757789116
18+
}
19+
```
20+
21+
### 根本原因
22+
管理员路由配置只支持静态管理员token认证,不支持JWT用户token认证:
23+
24+
```go
25+
// 原始代码 - 只支持管理员token
26+
authGroup.Use(middleware.AdminTokenAuth(cfg))
27+
```
28+
29+
这导致了以下问题:
30+
1. **认证方式单一**:只验证静态token("FileCodeBox2025"),不验证JWT用户token
31+
2. **用户体验差**:已登录的admin用户无法直接访问管理后台
32+
3. **API不一致**:用户登录后获得admin角色,但无法使用该角色访问管理功能
33+
34+
## 解决方案
35+
36+
### 实现双重认证机制
37+
修改 `internal/routes/admin.go`,创建支持两种认证方式的组合中间件:
38+
39+
```go
40+
// 创建一个支持两种认证方式的中间件
41+
combinedAuthMiddleware := func(c *gin.Context) {
42+
// 先尝试JWT用户认证
43+
authHeader := c.GetHeader("Authorization")
44+
if authHeader != "" {
45+
tokenParts := strings.SplitN(authHeader, " ", 2)
46+
if len(tokenParts) == 2 && tokenParts[0] == "Bearer" {
47+
// 尝试验证JWT token
48+
claimsInterface, err := userService.ValidateToken(tokenParts[1])
49+
if err == nil {
50+
// JWT验证成功,检查是否为管理员角色
51+
if claims, ok := claimsInterface.(*services.AuthClaims); ok && claims.Role == "admin" {
52+
// 设置用户信息到上下文
53+
c.Set("user_id", claims.UserID)
54+
c.Set("username", claims.Username)
55+
c.Set("role", claims.Role)
56+
c.Set("session_id", claims.SessionID)
57+
c.Set("auth_type", "jwt")
58+
c.Next()
59+
return
60+
}
61+
}
62+
63+
// JWT验证失败,尝试管理员token认证
64+
if tokenParts[1] == cfg.AdminToken {
65+
c.Set("is_admin", true)
66+
c.Set("role", "admin")
67+
c.Set("auth_type", "admin_token")
68+
c.Next()
69+
return
70+
}
71+
}
72+
}
73+
74+
// 两种认证都失败
75+
c.JSON(401, gin.H{"code": 401, "message": "认证失败"})
76+
c.Abort()
77+
}
78+
```
79+
80+
### 认证优先级
81+
82+
1. **JWT Token优先**:先验证JWT token,检查admin角色
83+
2. **管理员Token回退**:如果JWT验证失败,尝试静态管理员token
84+
3. **完全拒绝**:两种认证都失败时返回401错误
85+
86+
### 上下文信息设置
87+
88+
根据认证方式设置不同的上下文信息:
89+
90+
**JWT认证成功**
91+
- `user_id`: 用户ID
92+
- `username`: 用户名
93+
- `role`: 角色("admin")
94+
- `session_id`: 会话ID
95+
- `auth_type`: "jwt"
96+
97+
**管理员Token认证**
98+
- `is_admin`: true
99+
- `role`: "admin"
100+
- `auth_type`: "admin_token"
101+
102+
## 测试验证
103+
104+
### JWT Token认证测试
105+
```bash
106+
curl "http://0.0.0.0:12345/admin/dashboard" \
107+
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
108+
109+
# 结果:200 OK
110+
{"code":200,"data":{"total_users":4,"active_users":4,...}}
111+
```
112+
113+
### 管理员Token认证测试
114+
```bash
115+
curl "http://0.0.0.0:12345/admin/dashboard" \
116+
-H "Authorization: Bearer FileCodeBox2025"
117+
118+
# 结果:200 OK
119+
{"code":200,"data":{"total_users":4,"active_users":4,...}}
120+
```
121+
122+
### 配置API测试
123+
```bash
124+
curl "http://0.0.0.0:12345/admin/config" \
125+
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
126+
127+
# 结果:200 OK
128+
```
129+
130+
## 修复效果
131+
132+
### ✅ 解决的问题
133+
1. **JWT认证支持**:admin用户登录后可直接访问管理后台
134+
2. **向后兼容**:静态管理员token仍然有效
135+
3. **API一致性**:用户角色与API访问权限匹配
136+
4. **用户体验**:无需额外配置,登录即可使用管理功能
137+
138+
### 🔧 技术改进
139+
1. **灵活认证**:支持多种认证方式
140+
2. **类型安全**:正确的类型断言和错误处理
141+
3. **上下文丰富**:提供详细的认证信息
142+
4. **可扩展性**:易于添加新的认证方式
143+
144+
### 📈 影响范围
145+
- **影响文件**`internal/routes/admin.go`
146+
- **向后兼容**:完全兼容现有API
147+
- **新功能**:JWT用户认证支持
148+
- **测试状态**:全部通过
149+
150+
## 总结
151+
152+
通过实现双重认证机制,成功解决了JWT token访问管理员API的401错误问题。现在系统同时支持:
153+
154+
1. **静态管理员token**:适用于API直接访问和工具集成
155+
2. **JWT用户token**:适用于Web界面和移动应用
156+
157+
这种设计既保持了系统的向后兼容性,又提供了更好的用户体验,让拥有admin角色的用户可以无缝访问管理功能。

0 commit comments

Comments
 (0)