An open API service indexing awesome lists of open source software.

https://github.com/nhirsama/foolsignup

本项目是一个愚人节项目,意在通过刻意设计给用户带来不好的使用体验
https://github.com/nhirsama/foolsignup

fool login signup vibe-coding webauthn

Last synced: 24 days ago
JSON representation

本项目是一个愚人节项目,意在通过刻意设计给用户带来不好的使用体验

Awesome Lists containing this project

README

          

# Fool Signup 愚人注册

本项目是一个愚人节项目,意在通过刻意设计给用户带来不好的使用体验。

本项目通过 Vibe Coding 实现。

## 特点

- Protobuf 二进制通信。前端与后端通过 Protobuf 二进制格式进行 HTTP 通信,作为简单的逆向门槛。
- ~~禁用主流邮箱~~。本意是在通过设计阻止用户泄露邮箱和常用密码,但是用户往往不会去考虑使用临时邮箱,故暂时强制使用 32
位及以上的复杂密码以用户阻止泄露常用密码。
- 黑盒密码强度判定。注册密码除必须包含大小写字母、数字和特殊符号外,还需要通过额外的字符串结构强度校验;重复片段、明显周期、长回文和连续序列都会显著降低评分,只有达到“复杂”才允许注册。
- 显式工作量证明 Proof-of-Work (PoW)。用户需要手动找到一个随机 16 位前缀的 sha-256 值符合特定难度(20位前导零)的字符串。
- 年龄唯一性约束。每个年龄只允许被一位用户占用,系统在初始化时将创建若干虚假账户占用 0-99 的年龄区间。
- 虚假用户。当一个新邮箱尝试注册时,系统会先创建一个虚假用户并提示“密码已被用户xx占用”。
- WebAuthn (Passkey) 验证。强制要求使用 WebAuthn 进行两步验证,并阻止用户登录系统创建的虚假用户。
- i18n 支持。但是考虑到用户都是中文用户,故特意去除了中文,以及英语。

## 技术栈

- 后端: Go 1.22+ / Protobuf / SQLite / PostgreSQL
- 前端: Astro / TypeScript / Protobuf.js
- 架构: 前后端分离,通过 Protobuf over HTTP 交互

## 部署方法

本项目支持 Docker 一键部署。

### 1. 环境准备

确保您的服务器已安装 `Docker` 和 `Docker Compose`。

### 2. 获取源码

```bash
git clone https://github.com/nhirsama/foolsignup.git
cd foolsignup
```

### 3. 配置环境变量

修改 `docker-compose.yml` 。核心变量说明:

| 变量名 | 说明 | 示例 |
|:--------------------|:---------------------------------------------------------|:--------------------------------------------------------------------------------------------|
| `DB_TYPE` | 数据库类型,支持 `sqlite`/`postgres`(兼容 `postgresql/psql/pqsql`) | `sqlite` |
| `DB_SQLITE_PATH` | SQLite 文件路径(仅 `DB_TYPE=sqlite` 时生效) | `/app/data/data.db` |
| `DB_DSN` | PostgreSQL DSN(仅 `DB_TYPE=postgres` 时生效,需自行部署 PostgreSQL) | `host=127.0.0.1 port=5432 user=postgres password=postgres dbname=foolsignup sslmode=disable` |
| `ALLOWED_ORIGIN` | 允许跨域的域名(前端访问地址) | `https://signup.example.com` |
| `TRUSTED_PROXY_CIDRS` | 额外可信反向代理网段(逗号分隔)。只有来自可信代理的 `X-Forwarded-For` / `X-Real-IP` 才会被用于限流判定 | `203.0.113.0/24,2001:db8:100::/64` |
| `MAIL_API_ENDPOINT` | 邮件服务 API 地址 (基于 HTTP POST) | `https://api.cyberpersons.com/email/send` |
| `MAIL_API_KEY` | 邮件服务 API Key | `your_secret_key` |
| `MAIL_FROM` | 发件人邮箱 | `noreply@example.com` |
| `TURNSTILE_SECRET_KEY` | Cloudflare Turnstile 服务端密钥。配置后,发送 PoW 验证码前必须通过 Turnstile 校验 | `0x4AAAA...` |

数据库切换示例:

- 使用 SQLite(默认):`DB_TYPE=sqlite`
- 使用 PostgreSQL:`DB_TYPE=postgres`,并设置 `DB_DSN`(PostgreSQL 需自行安装/部署)
- 若部署在反向代理之后且代理地址不属于回环/私有网段,请设置 `TRUSTED_PROXY_CIDRS`,否则应用会直接使用连接对端地址进行限流。
- 本地环回地址、RFC1918 私有地址和链路本地地址默认已经被视为可信代理,不需要再额外写进 `TRUSTED_PROXY_CIDRS`。

### 4. 启动服务

使用 Docker Compose 构建并运行:

```bash
docker-compose up -d --build
```

服务启动后:

- 后端 API 将运行在 `http://localhost:16241` (映射自 3001)。
- 若使用 SQLite,数据库文件将持久化在当前目录下的 `./data/data.db`。
- 若使用 PostgreSQL,数据持久化由你自行部署的 PostgreSQL 负责。

---

## 前端部署 (Astro)

建议将前端部署在 **Cloudflare Pages**, **Vercel** 或作为静态文件托管。

### 1. 安装依赖

```bash
pnpm install
```

### 2. 构建

```bash
pnpm build
```

### 3. 配置

请配置环境变量 `PUBLIC_API_URL` 并指向后端 URL。
如需启用发送 PoW 验证码前的 Cloudflare Turnstile,请额外配置 `PUBLIC_TURNSTILE_SITE_KEY`,并在后端同时配置 `TURNSTILE_SECRET_KEY`。