# projecthub **Repository Path**: jungle/projecthub ## Basic Information - **Project Name**: projecthub - **Description**: No description available - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-29 - **Last Updated**: 2026-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # opensource-hub 独立的 FastAPI 开源项目展示服务,从 HappyOJ 的 opensource 页面拆分而来。 ## 功能 1. 展示开源项目卡片、标签和扩展链接 2. 管理员登录后可新增和编辑项目 3. 项目数据优先读数据库;数据库为空时自动回退到内置样例数据 4. 使用服务自身的管理员会话,不依赖原 Online Judge 的用户与权限体系 ## 目录结构 ```text opensource-hub/ app/ main.py config.py database.py routers/ models/ schemas/ services/ static/ templates/ sql/ ``` ## 安装 1. 创建虚拟环境并安装依赖 ```bash pip install -r requirements.txt ``` 2. 复制环境变量模板 ```bash copy .env.example .env ``` 3. 按需修改 .env 默认使用 SQLite: ```env DATABASE_URL=sqlite:///./project.db ADMIN_USERNAME=admin ADMIN_PASSWORD=admin123 SECRET_KEY=change-me-in-production ``` 如果你要接 MySQL,可以改成: ```env DATABASE_URL=mysql+pymysql://user:password@127.0.0.1:3306/opensource_hub?charset=utf8mb4 ``` 认证中心模式可通过 `.env` 开关启用,关闭时继续使用本地管理员账号: ```env AUTH_CENTER_ENABLED=false AUTH_CENTER_URL=https://happyoj.com AUTH_LOGIN_URL=https://happyoj.com/enter AUTH_LOGOUT_URL=https://happyoj.com/logout APP_BASE_URL=https://projecthub.happyoj.com ``` - `AUTH_CENTER_ENABLED=false`:维持当前本地管理员登录模式 - `AUTH_CENTER_ENABLED=true`:`/login` 会跳转到认证中心登录页,项目后台会读取 `cookieOnlineJudgeToken` 和 `cookieOnlineJudgeUsername` 并调用认证中心 `/api/auth/session` 校验登录状态 - 认证中心普通用户也可以登录并看到自己的用户名,但只有 `admin=true` 的用户才允许新增、编辑、删除项目 - 如需在认证中心模式下使用本地管理员回退入口,可访问 `/login/local` - `AUTH_LOGIN_URL` 为空时默认使用 `AUTH_CENTER_URL/enter` - `AUTH_LOGOUT_URL` 为空时默认使用 `AUTH_CENTER_URL/logout` - `APP_BASE_URL` 用于固定认证完成后的回跳地址;本地调试时建议显式写成 `http://localhost:8000`,避免 `localhost` 和 `127.0.0.1` 混用导致认证 Cookie 不生效 ## 运行 ```bash uvicorn app.main:app --host 0.0.0.0 --port 8010 --reload ``` 访问: ```text http://127.0.0.1:8010 ``` 管理员登录页: ```text http://127.0.0.1:8010/login ``` 如果启用了认证中心模式,点击首页 `Login` 后会直接跳转到认证中心登录页,而不是显示本地账号密码表单。 ## 数据库说明 1. SQLite 默认无需额外初始化,应用首次启动会自动建表 2. 如果你想手工建表,可以执行 sql/opensource_hub.sql