{"id":50142773,"url":"https://github.com/nhirsama/foolsignup","last_synced_at":"2026-05-24T02:07:42.422Z","repository":{"id":341350831,"uuid":"1169790913","full_name":"nhirsama/foolsignup","owner":"nhirsama","description":"本项目是一个愚人节项目，意在通过刻意设计给用户带来不好的使用体验","archived":false,"fork":false,"pushed_at":"2026-03-21T12:55:26.000Z","size":283,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-22T03:37:36.055Z","etag":null,"topics":["fool","login","signup","vibe-coding","webauthn"],"latest_commit_sha":null,"homepage":"https://foolsignup.nhir.top","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nhirsama.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-01T08:05:40.000Z","updated_at":"2026-03-21T12:55:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nhirsama/foolsignup","commit_stats":null,"previous_names":["nhirsama/foolsignup"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nhirsama/foolsignup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhirsama%2Ffoolsignup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhirsama%2Ffoolsignup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhirsama%2Ffoolsignup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhirsama%2Ffoolsignup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nhirsama","download_url":"https://codeload.github.com/nhirsama/foolsignup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nhirsama%2Ffoolsignup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33418555,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"online","status_checked_at":"2026-05-24T02:00:06.296Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fool","login","signup","vibe-coding","webauthn"],"created_at":"2026-05-24T02:07:41.631Z","updated_at":"2026-05-24T02:07:42.411Z","avatar_url":"https://github.com/nhirsama.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fool Signup 愚人注册\n\n本项目是一个愚人节项目，意在通过刻意设计给用户带来不好的使用体验。\n\n本项目通过 Vibe Coding 实现。\n\n## 特点\n\n- Protobuf 二进制通信。前端与后端通过 Protobuf 二进制格式进行 HTTP 通信，作为简单的逆向门槛。\n- ~~禁用主流邮箱~~。本意是在通过设计阻止用户泄露邮箱和常用密码，但是用户往往不会去考虑使用临时邮箱，故暂时强制使用 32\n  位及以上的复杂密码以用户阻止泄露常用密码。\n- 黑盒密码强度判定。注册密码除必须包含大小写字母、数字和特殊符号外，还需要通过额外的字符串结构强度校验；重复片段、明显周期、长回文和连续序列都会显著降低评分，只有达到“复杂”才允许注册。\n- 显式工作量证明 Proof-of-Work (PoW)。用户需要手动找到一个随机 16 位前缀的 sha-256 值符合特定难度（20位前导零）的字符串。\n- 年龄唯一性约束。每个年龄只允许被一位用户占用，系统在初始化时将创建若干虚假账户占用 0-99 的年龄区间。\n- 虚假用户。当一个新邮箱尝试注册时，系统会先创建一个虚假用户并提示“密码已被用户xx占用”。\n- WebAuthn (Passkey) 验证。强制要求使用 WebAuthn 进行两步验证，并阻止用户登录系统创建的虚假用户。\n- i18n 支持。但是考虑到用户都是中文用户，故特意去除了中文，以及英语。\n\n## 技术栈\n\n- 后端: Go 1.22+ / Protobuf / SQLite / PostgreSQL\n- 前端: Astro / TypeScript / Protobuf.js\n- 架构: 前后端分离，通过 Protobuf over HTTP 交互\n\n## 部署方法\n\n本项目支持 Docker 一键部署。\n\n### 1. 环境准备\n\n确保您的服务器已安装 `Docker` 和 `Docker Compose`。\n\n### 2. 获取源码\n\n```bash\ngit clone https://github.com/nhirsama/foolsignup.git\ncd foolsignup\n```\n\n### 3. 配置环境变量\n\n修改 `docker-compose.yml` 。核心变量说明：\n\n| 变量名                 | 说明                                                       | 示例                                                                                          |\n|:--------------------|:---------------------------------------------------------|:--------------------------------------------------------------------------------------------|\n| `DB_TYPE`           | 数据库类型，支持 `sqlite`/`postgres`（兼容 `postgresql/psql/pqsql`） | `sqlite`                                                                                    |\n| `DB_SQLITE_PATH`    | SQLite 文件路径（仅 `DB_TYPE=sqlite` 时生效）                      | `/app/data/data.db`                                                                         |\n| `DB_DSN`            | PostgreSQL DSN（仅 `DB_TYPE=postgres` 时生效，需自行部署 PostgreSQL） | `host=127.0.0.1 port=5432 user=postgres password=postgres dbname=foolsignup sslmode=disable` |\n| `ALLOWED_ORIGIN`    | 允许跨域的域名（前端访问地址）                                          | `https://signup.example.com`                                                                |\n| `TRUSTED_PROXY_CIDRS` | 额外可信反向代理网段（逗号分隔）。只有来自可信代理的 `X-Forwarded-For` / `X-Real-IP` 才会被用于限流判定 | `203.0.113.0/24,2001:db8:100::/64` |\n| `MAIL_API_ENDPOINT` | 邮件服务 API 地址 (基于 HTTP POST)                               | `https://api.cyberpersons.com/email/send`                                                   |\n| `MAIL_API_KEY`      | 邮件服务 API Key                                             | `your_secret_key`                                                                           |\n| `MAIL_FROM`         | 发件人邮箱                                                    | `noreply@example.com`                                                                       |\n| `TURNSTILE_SECRET_KEY` | Cloudflare Turnstile 服务端密钥。配置后，发送 PoW 验证码前必须通过 Turnstile 校验 | `0x4AAAA...` |\n\n数据库切换示例：\n\n- 使用 SQLite（默认）：`DB_TYPE=sqlite`\n- 使用 PostgreSQL：`DB_TYPE=postgres`，并设置 `DB_DSN`（PostgreSQL 需自行安装/部署）\n- 若部署在反向代理之后且代理地址不属于回环/私有网段，请设置 `TRUSTED_PROXY_CIDRS`，否则应用会直接使用连接对端地址进行限流。\n- 本地环回地址、RFC1918 私有地址和链路本地地址默认已经被视为可信代理，不需要再额外写进 `TRUSTED_PROXY_CIDRS`。\n\n### 4. 启动服务\n\n使用 Docker Compose 构建并运行：\n\n```bash\ndocker-compose up -d --build\n```\n\n服务启动后：\n\n- 后端 API 将运行在 `http://localhost:16241` (映射自 3001)。\n- 若使用 SQLite，数据库文件将持久化在当前目录下的 `./data/data.db`。\n- 若使用 PostgreSQL，数据持久化由你自行部署的 PostgreSQL 负责。\n\n---\n\n## 前端部署 (Astro)\n\n建议将前端部署在 **Cloudflare Pages**, **Vercel** 或作为静态文件托管。\n\n### 1. 安装依赖\n\n```bash\npnpm install\n```\n\n### 2. 构建\n\n```bash\npnpm build\n```\n\n### 3. 配置\n\n请配置环境变量 `PUBLIC_API_URL` 并指向后端 URL。\n如需启用发送 PoW 验证码前的 Cloudflare Turnstile，请额外配置 `PUBLIC_TURNSTILE_SITE_KEY`，并在后端同时配置 `TURNSTILE_SECRET_KEY`。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnhirsama%2Ffoolsignup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnhirsama%2Ffoolsignup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnhirsama%2Ffoolsignup/lists"}