Files
mce/README.md
Victor_Jay c3dec09dae feat(settings): 个人资料编辑 + 头像上传/裁切 + 自定义裁切弹窗
**新增功能:**

用户名编辑:输入框替换静态文本,白名单验证(中文/英文/数字/下划线/连字符),前端计数器(n/16),utf8对齐PG VARCHAR,XSS防控。

个性签名编辑:Textarea,128字符上限,实时计数器。

头像上传管线:校验→解码→裁切→CatmullRom缩放→WebP二分编码≤100KB→原子写入(.tmp→os.Rename)。限制5MB,128-3840px,JPEG/PNG/WebP。输出512x512 WebP。文件名 {uid}_{timestamp}.webp。清理旧头像。

自定义裁切弹窗:浅色主题,固定裁切框+图片平移/缩放(1×-3×滚轮),box-shadow遮罩,三等分网格。坐标映射pan/zoom→原图像素→subImage。

CSP修复:img-src允许data:URI(FileReader预览)。

**文件变更:**
修改: README, docs/{development,structure}.md, go.{mod,sum}, cmd/server/main.go, controller/settings, middleware/security, router, templates/settings/{index.html,css}
新增: internal/service/avatar_service.go, docs/settings.md
2026-05-27 01:03:16 +08:00

119 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<p align="center">
<img src="https://img.shields.io/badge/Go-1.26-00ADD8?style=flat-square&logo=go" alt="Go 1.26">
<img src="https://img.shields.io/badge/Gin-1.12-0096D6?style=flat-square&logo=go" alt="Gin 1.12">
<img src="https://img.shields.io/badge/GORM-1.31-7A6F5D?style=flat-square" alt="GORM 1.31">
<img src="https://img.shields.io/badge/PostgreSQL-16-4169E1?style=flat-square&logo=postgresql&logoColor=white" alt="PostgreSQL">
<img src="https://img.shields.io/badge/license-AGPL--3.0-blue?style=flat-square" alt="AGPL 3.0">
<img src="https://img.shields.io/badge/status-dev-orange?style=flat-square" alt="status">
</p>
<h1 align="center">MetaLab</h1>
<p align="center"><em>下一代开源技术社区——为构建者准备的纯粹空间</em></p>
---
## 关于项目
MetaLab 是一个正在开发中的开源技术社区平台,旨在为开发者提供一个**平等、纯粹、开放**的技术交流空间。
> **当前状态:私有开发中**。社区上线后将完全开源。
**核心理念:**
- 🎯 **专注技术**——代码、架构、逻辑与可验证的事实
- 🤝 **平等交流**——没有特权,每个成员权利平等
- 🔓 **开放共享**——鼓励开源、协作与知识共享
## 技术栈
| 类别 | 技术 | 版本 |
|------|------|------|
| 语言 | **Go** | 1.26 |
| Web 框架 | **Gin** | 1.12 |
| ORM | **GORM** | 1.31 |
| 数据库 | **PostgreSQL** | 16+ |
| 认证 | **JWT** (HS256) | v5 |
| 密码加密 | **bcrypt** (cost=12) | — |
| 配置 | **Viper** | 1.21 |
| 前端 | **SSR 模板** (Gin HTML) + 原生 JS/CSS | — |
| 架构 | 分层六边形架构 | — |
## 当前功能
-**用户系统**——注册、登录、登出
-**双 Token 认证**——Access Token15min+ Refresh Token7d session / 30d "记住我"
-**CSRF 保护**——全站 CSRF Token
-**速率限制**——API 调用频率控制
-**安全头**——Content-Security-Policy 等安全响应头
-**管理后台**——用户管理、角色权限控制
-**软删除**——用户数据可恢复,登录时自动恢复
-**用户设置页**——个人资料修改(用户名、个性签名、头像上传与裁切)
-**头像处理**——JPEG/PNG/WebP 上传方形裁切512×512 WebP 编码 ≤100KB
-**多主题支持**——可切换的前端主题系统
## 计划中
- 🔲 帖子系统CRUD + Markdown
- 🔲 话题/分类导航
- 🔲 邮箱验证
- 🔲 全文搜索
- 🔲 管理后台增强(内容审核、统计分析)
## 快速开始
```bash
# 克隆仓库
git clone git@git.metazone.cc:MetaZone/MetaLab.git
cd MetaLab
# 创建 .env 文件
cat > .env << EOF
DATABASE_PASSWORD=your_db_password
JWT_SECRET=your_jwt_secret
EOF
# 确保 PostgreSQL 运行中
# 默认连接: 127.0.0.1:5432, 数据库: metalab_dev
# 运行
go run cmd/server/main.go
```
启动后访问 `http://localhost:8080`
## 项目结构
```
MetaLab/
├── cmd/server/ # 入口:初始化 → 启动
├── internal/
│ ├── config/ # 配置加载YAML + .env
│ ├── router/ # 路由注册
│ ├── controller/ # 控制器(参数绑定 → 调服务 → 返回)
│ │ └── admin/ # 后台控制器
│ ├── service/ # 业务逻辑层
│ ├── repository/ # 数据访问层DAO
│ ├── model/ # 数据模型 + DTO
│ ├── middleware/ # 中间件(认证/CSRF/限流/安全)
│ ├── common/ # 公共工具(响应/分页/加密)
│ └── theme/ # 主题/模板管理
├── templates/ # 前端模板(多主题)
│ ├── MetaLab-2026/ # 前台主题
│ └── admin/ # 后台模板
└── docs/ # 开发文档
```
## 许可
本项目采用 **[GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.html)** 许可。
**社区版**AGPL-3.0):可自由使用、修改、分发,但修改后通过网络提供服务时必须公开源码。
**商业授权**:如需闭源部署、私有化修改或商业技术支持,请联系 [metazone@foxmail.com](mailto:metazone@foxmail.com) 获取商业授权。
---
<p align="center">
<sub>&copy; 2024-2026 MetaZone | Built with ❤️ by <a href="https://metazone.cc">MetaZone</a> </sub>
</p>