No description
  • Go 59.7%
  • JavaScript 36.6%
  • CSS 3.4%
  • Dockerfile 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
xiaoman1221 72ecb35aa4
Some checks failed
build / resolve version (push) Failing after 34s
build / docker image (push) Has been skipped
build / binary (darwin/amd64) (push) Failing after 59s
build / binary (linux/amd64) (push) Failing after 41s
build / binary (windows/amd64) (push) Failing after 33s
build / binary (linux/arm) (push) Failing after 45s
build / binary (darwin/arm64) (push) Failing after 41s
build / binary (linux/arm64) (push) Failing after 35s
build / binary (windows/arm64) (push) Failing after 33s
build / release (push) Has been skipped
release:v1.0.10
Bug fixes:
- registrar: aliyun_intl used the China endpoint; now domain-intl.aliyuncs.com (domain fetch + renewal price)
- oauth: rainbow login/bind used OAUTHGO_REDIRECT_URI; RAINBOW_REDIRECT_URI now takes effect
- users/registrars: soft delete kept unique indexes occupied, blocking re-creation with the same name; deletion is now unscoped
- registrar lookups for WHOIS/price queries are scoped by user_id (no cross-tenant credential use)
- last-admin protection unified in ensureNotLastAdmin; unusable role-group/user-group endpoints removed
- update requests use pointer fields so optional values (group/tags/note/NS/expiry/API credentials) can be cleared
- notifications: Bark/Telegram use a 10s-timeout client; SMTP_ENABLED and SMTP_FROM_NAME now actually apply
- rate limiter purges stale per-IP entries periodically
- registrar: Route53 domain listing is paginated (signed marker/maxitems), no longer capped at 20
- oauth: stale third-party binding after account deletion no longer locks the identity out
- certificates: LIKE wildcards escaped; scheduled tasks validate the task type
- frontend: admin badge reads role_group; domain search debounced and resets to page 1
- misc: registrar CSV import no longer wipes endpoint/extra, Namecheap IP whitelist documented

Hardening:
- domain names are validated before WHOIS/RDAP/ICP lookups (blocks control-character injection into the raw whois socket and SSRF-style inputs)
- synthetic OAuth email local-part now derives from SHA-256

Removed redundant code:
- dead payment settings (PAYMENT_* + settings tab), unused API wrappers, duplicate endpoints
- duplicated order clause, hand-rolled string helpers, dead registrar field assignments, redundant date layouts
- deduplicated shared logic into helpers: parseFirstTime, emailTaken, resolveRenewalPrice, lookupRegistrar, importOrRefreshDomain, csvColumnMap
2026-09-14 13:31:10 +08:00
.github/workflows release:v1.0.8 2026-08-18 14:08:01 +08:00
config release:v1.0.10 2026-09-14 13:31:10 +08:00
database release:v1.0.8 2026-08-18 14:08:01 +08:00
handlers release:v1.0.10 2026-09-14 13:31:10 +08:00
middleware release:v1.0.10 2026-09-14 13:31:10 +08:00
models release:v1.0.10 2026-09-14 13:31:10 +08:00
router release:v1.0.10 2026-09-14 13:31:10 +08:00
services release:v1.0.10 2026-09-14 13:31:10 +08:00
utils release:v1.0.0 2026-08-17 01:46:39 +08:00
web release:v1.0.10 2026-09-14 13:31:10 +08:00
.dockerignore feat: add Docker support 2026-07-15 12:55:07 +08:00
.env.example release:v1.0.10 2026-09-14 13:31:10 +08:00
.gitignore feat: add Docker support 2026-07-15 12:55:07 +08:00
build.sh feat: embed frontend into Go binary via go:embed 2026-07-15 12:50:20 +08:00
docker-compose.yml release:v1.0.7 2026-08-17 15:38:52 +08:00
Dockerfile feat: add Docker support 2026-07-15 12:55:07 +08:00
go.mod feat: init DomainManager project 2026-07-15 12:45:09 +08:00
go.sum feat: init DomainManager project 2026-07-15 12:45:09 +08:00
main.go release:v1.0.8 2026-08-18 14:08:01 +08:00
Makefile feat: embed frontend into Go binary via go:embed 2026-07-15 12:50:20 +08:00
README.md release:v1.0.8 2026-08-18 14:08:01 +08:00

DomainManager

域名管理系统 - 集域名管理、WHOIS查询、ICP备案查询、价格比对、证书管理、到期通知于一体的综合平台。

功能特性

  • 域名管理 - 域名的增删改查、批量操作、CSV导入导出
  • WHOIS查询 - 域名注册信息查询(依赖 next-whois;*.pp.ua 免费二级域名走 UANIC 官方 whois 服务器,即 dig.ua 的数据源)
  • ICP备案查询 - 域名备案信息查询(依赖 ICP_Query)
  • 价格比对 - 多注册商域名续费价格对比(当前为估算参考价,非实时注册商报价)
  • 注册商管理 - 注册商信息维护、域名批量导入
  • 证书管理 - SSL证书管理,支持与 Certimate 同步
  • 到期通知 - 多渠道域名到期提醒(邮件、Webhook等)
  • 用户系统 - 多用户支持、角色权限管理
  • 第三方登录 - 接入 OauthGo 或 彩虹聚合登录,支持 QQ / 微信 / Gitee 等渠道一键登录
  • 系统设置 - 系统参数配置

技术栈

后端

  • Go 1.26 + Gin
  • GORM + SQLite
  • JWT 认证

前端

  • React 18 + Vite
  • Ant Design 5
  • React Router
  • axios

快速开始

Docker 部署(推荐)

docker compose up -d

包含三个服务:

  • domain-manager - 主应用 (xiaoman1221/domain-manager:latest)
  • whois - WHOIS查询服务 (programzmh/next-whois-ui)
  • icp - ICP备案查询服务 (yiminger/ymicp)

访问 http://localhost:8080

手动部署

环境要求

  • Go 1.26+
  • Node.js 18+
  • npm

配置

复制 .env.example 为 .env 并修改配置:

cp .env.example .env
变量 说明 默认值
PORT 服务端口 8080
GIN_MODE Gin模式(debug/release) debug
DB_PATH 数据库文件路径 domain_manager.db
JWT_KEY JWT密钥(建议 openssl rand -hex 32 生成;不设置时每次启动随机生成,重启后所有登录失效) -

运行时配置(迁移至数据库,管理员可在 个人设置 → 系统管理 → 系统设置 中修改,保存后立即生效)

系统设置按类别分组(个人设置 → 系统设置,仅管理员):

分组 配置项 说明
基础 WHOIS_API_URL / ICP_API_URL / DIGITALPLAT_RDAP_URL 查询服务地址
第三方登录 OAUTH_PROVIDER(oauthgo/rainbow) 选择登录服务:OauthGo 或 彩虹聚合登录
第三方登录 OAUTHGO_BASE_URL / APP_ID / APP_KEY / REDIRECT_URI OauthGo 配置(留空禁用)
第三方登录 RAINBOW_BASE_URL / APP_ID / APP_KEY / REDIRECT_URI 彩虹聚合登录配置(留空禁用)
SMTP SMTP_HOST / PORT / USERNAME / PASSWORD / FROM / FROM_NAME / ENCRYPTION / ENABLED 全局 SMTP,作为邮件通知渠道的默认服务器
支付系统 PAYMENT_PROVIDER / MERCHANT_ID / APP_ID / APP_KEY / NOTIFY_URL / ENABLED 支付渠道配置(预留)
SNS SNS_CONFIG 社交平台链接(展示在登录页页脚)
页脚 FOOTER_DESCRIPTION / COPYRIGHT / ICP / POLICE / LINKS 登录页页脚文案与链接

上述运行时配置在首次启动时以 .env 中的值为默认值写入数据库,之后以数据库为准。

构建运行

后端通过 //go:embed web/dist/* 内嵌前端构建产物,因此 go build 前必须先构建前端。

# 一键构建(前端+后端)
make
# 或
bash build.sh

# 运行
./domain-manager

默认账号

首次运行会自动创建管理员账号:

  • 用户名:admin
  • 密码:123456

请登录后立即修改默认密码。

第三方登录

本系统支持通过 OauthGo 或 彩虹聚合登录(兼容 u.cccyun.cc 的 connect.php 协议)接入第三方登录(QQ、微信、Gitee、Google、GitHub 等渠道)。

  1. 在 系统设置 → 第三方登录 中通过 OAUTH_PROVIDER 选择登录服务(oauthgo 或 rainbow)。

  2. 在对应平台注册应用,获得 APP_ID / APP_KEY,并将本系统地址加入回调域名白名单(默认回调路径为 /api/auth/oauth/callback)。

  3. 配置所选服务(两种方式任选,数据库保存后立即生效):

    • 首次启动前:在 .env 中填写(作为初始默认值写入数据库),或
    • 启动后:在 个人设置 → 系统管理 → 系统设置 中填写对应服务的地址与应用凭证。
  4. 登录弹窗中会出现「或使用第三方账号登录」入口。

首次通过第三方渠道登录会自动创建本地账号(默认普通用户角色组),之后同一渠道账号会直接登录并自动更新昵称/头像。

可在 系统设置 → 第三方登录 中勾选「启用登录方式」,控制登录弹窗中展示的第三方渠道;不勾选时展示所选服务已开启的全部渠道。

登录后在 个人设置 → 第三方登录 中可绑定/解绑多个第三方账号,绑定后可直接用该账号登录。

角色组与用户组

  • 角色组(role_group):决定访问权限,取值 admin(管理员)或 user(普通用户)。系统设置、用户管理等后端管理功能仅角色组为管理员的用户可访问。
  • 用户组(user_group):用于组织标记(如「运维组」「运营组」),仅作标识,不影响权限。可在 个人设置 → 系统管理 → 用户管理 中为每个用户设置。

首次部署时自动创建的管理员账号属于 admin 角色组;通过第三方登录创建的账号默认属于 user 角色组。

用户管理(/users)页面支持查看、编辑(昵称/邮箱/角色组/用户组)与删除用户,仅管理员角色组可用;不能删除当前登录账号或最后一个管理员。

权限说明

  • 用户管理、系统设置、系统信息、Certimate 配置/同步等接口仅管理员可用。
  • 注册商数据按用户隔离,互不可见。
  • 登录/注册接口有基于 IP 的限流保护。

API 接口

模块 路径前缀 说明
认证 /api/auth 注册、登录、获取用户信息
域名 /api/domains 域名CRUD、批量操作、导入导出
WHOIS /api/whois WHOIS查询
ICP /api/icp ICP备案查询
价格 /api/price 域名价格查询与比对
注册商 /api/registrars 注册商管理
证书 /api/certificates 证书管理、Certimate同步
通知 /api/notifications 通知渠道与日志管理
设置 /api/settings 系统设置、用户管理

项目结构

DomainManager/
├── config/          # 配置加载
├── database/        # 数据库初始化与迁移
├── handlers/        # 请求处理器
├── middleware/       # 中间件(JWT认证)
├── models/          # 数据模型
├── router/          # 路由定义
├── services/        # 业务逻辑(WHOIS/ICP/价格等)
├── utils/           # 工具函数
├── web/             # React 前端
│   ├── src/
│   │   ├── api/      # 接口封装
│   │   ├── pages/    # 页面
│   │   ├── layouts/  # 主布局
│   │   └── utils/    # 头像/格式化等
│   └── dist/        # 前端构建产物
├── .env.example     # 环境变量模板
├── go.mod
└── main.go

License

MIT