Commit Graph
14 Commits
Author SHA1 Message Date
cao.wangrenbo 24430f1867 chore: internal/webui/dist 改为不追踪(构建产物),新增 AGENTS.md
- .gitignore 增加 internal/webui/dist/,构建产物不再纳入版本控制
  (与 web/dist 一致;go:embed 仍依赖磁盘产物,不依赖 git 跟踪)
- 从索引移除已跟踪的 internal/webui/dist(历史提交仍保留旧产物)
- 新增 AGENTS.md:项目目的、架构、容器构建流程(前端 node:20-alpine
  与 Go golang:1.22-alpine 均走 podman)、环境注意事项与编码约定
2026-08-30 17:30:16 +08:00
cao.wangrenbo 70c084e7e9 feat(web): 审计页支持按结果筛选错误日志
- AuditListParams 增加 result 参数并透传
- 审计页筛选工具栏增加'结果'下拉(成功/失败),选中即筛出对应事件
- 管理员选'失败'即可集中查看错误事件(如重名申请冲突)
2026-08-30 17:28:46 +08:00
cao.wangrenbo 4029936744 feat(web): 登录页外部用户登录优先
- tab 顺序调整:外部用户 OTP 登录置前,管理员登录置后
- 移除品牌区副标题'账号申请 · SSH 密钥 · 使用审计'
2026-08-30 17:28:24 +08:00
cao.wangrenbo ab3a874556 feat(web): 申请页改用中文姓名,前端转拼音提交
- ApplyView 的'姓名'字段(2~10 个汉字)替代自定义用户名
- 前端经 pinyin-pro(toneType:none + surname:head 处理姓氏多音字)转拼音作为用户名
- 提交前兜底校验拼音用户名长度(后端规则 [a-z][a-z0-9]{1,31})
- alert 文案改为实时预览 '通过后自动创建账号 ext_<username>'
- 新增依赖 pinyin-pro@3.29.3
2026-08-30 17:28:05 +08:00
cao.wangrenbo 7340a3dd48 feat(api): 审计查询支持按结果筛选
- AuditFilter 增加 Result 字段,Query 按 result 精确过滤
- GET /audit 接口解析 result 查询参数(success/failed)
2026-08-30 17:27:49 +08:00
cao.wangrenbo 13c21dfd7e build(webui): 按 podman 正常流程重建前端产物并嵌入 Go 二进制
- make web-build(ws-usernode-web-dev 容器)重建 web/dist → internal/webui/dist
- 清空旧 hash 产物,避免 go:embed 冗余
- make build-embed 产出 bin/usernode(22MB,含新主题前端)
2026-08-30 11:46:21 +08:00
cao.wangrenbo 472c66ebd8 feat(web): 深度定制 Element Plus 主题 — 靛蓝主色/暗色模式/侧栏折叠/面包屑/登录页重绘
- 新增 styles/theme.css:CSS 变量覆盖默认主题(主色 #4F46E5、圆角、阴影、页面背景),html.dark 暗色变量
- 新增 stores/theme.ts:暗色/亮色切换,localStorage 持久化
- main.ts 引入 element-plus 暗色 css-vars 与主题文件,挂载前初始化主题
- index.html 加 SVG favicon 与防暗色闪烁内联脚本
- AdminLayout:深色可折叠侧栏、header 面包屑 + 暗色切换按钮、页面切换过渡
- UserLayout:header 打磨 + 暗色切换按钮
- LoginView/ApplyView:统一品牌渐变背景与卡片,登录页 OTP 输入行内联发送按钮、登录按钮唯一通栏主按钮(修复按钮错位)
2026-08-30 11:35:44 +08:00
cao.wangrenbo b305d7b371 feat(M5): 前端完善 + 部署 — Vue3 全量页面、仪表盘统计与我的审计接口、systemd/sudoers/迁移脚本、部署文档 2026-08-30 10:50:46 +08:00
cao.wangrenbo c0e2ff975a feat(M4): 生命周期 + 审计 — 到期锁定/回收 cron、审计查询/CSV 导出/每日归档、settings 动态策略 2026-08-30 10:17:22 +08:00
cao.wangrenbo 1ea18490e0 feat(M3): 申请审批 + 邮件队列 — 公开申请、管理员审批自动建号、mail_logs 落库重试 2026-08-30 10:01:38 +08:00
cao.wangrenbo a5f501dba4 feat(M2): SSH 密钥管理 — 公钥上传/重命名/吊销、authorized_keys 原子同步与吊销即时失效
- KeyService:crypto/ssh 解析校验(单行/类型/长度/去重指纹,拒 ssh-dss 与 RSA<2048),
  Create/Rename/Revoke/List,变更后以 DB 状态全量重写 authorized_keys(同步失败回滚)
- system 层:SyncAuthorizedKeys 完善 —— sudo 模式经白名单命令(mkdir/chown/chmod/install)
  落位并修正属主(sshd StrictModes),direct 模式 root 时同样修正属主;dry-run 计划日志
- API:GET/POST /me/keys、PATCH/DELETE /me/keys/:id(user 会话)、GET /users/:id/keys(admin),
  密钥操作带审计;deploy/sudoers.example 补充密钥同步白名单
- 版本 0.3.0-m2;测试:service 单元(校验/生命周期/回滚/权限)、system 直写落盘、
  API 全流程集成;容器 E2E 32 项 PASS(真实 useradd/authorized_keys/吊销即时失效/禁用清空/删除回收)
2026-08-29 23:55:39 +08:00
cao.wangrenbo 630d240dc0 feat(M1): 认证与用户管理 — 双通道登录、cookie 会话、用户 CRUD 与真实系统账号对接
认证:
- 图形验证码 GET /auth/captcha(内置 PNG 渲染,零第三方依赖)
- 外部用户 OTP 双通道:DB 存储(otp_codes)使邮件与 CLI 共用同一验证码/冷却/失败限速
- 管理员 bcrypt 登录 + 连续失败限速锁定;admin/forgot + admin/reset 邮件重置(SMTP 或日志)
- cookie 会话(HttpOnly/SameSite)、me/logout、admin/user 鉴权中间件

用户管理(admin):
- CRUD + disable/enable/extend/delete,对接 system 层真实 useradd/usermod/userdel/passwd
- system 层三执行模式:dry-run(默认,安全)/ direct(容器/测试用户)/ sudo(生产 sudoers 白名单)
- Exists 系统账号一致性检查;deploy/sudoers.example 白名单模板
- 关键操作接入 append-only 审计

其他:
- CLI user otp 改 DB store,与邮件通道真正对齐
- 容器镜像补 shadow(alpine 无 useradd);Makefile VERSION 0.2.0-m1
- 测试:auth/service 单测 + api httptest 集成 + 容器内真实系统账号端到端验证
2026-08-29 23:40:20 +08:00
cao.wangrenbo ae45aba607 feat(M0): 工程骨架 — Go 后端 + Vue3 前端脚手架
- Go 工程:cmd/usernode CLI(serve/migrate/admin create/reset-password/user otp)
  + internal/{config,model,service,system,auth,cron,api,router,server,pkg,webui}
- 配置:TOML + 环境变量覆盖(USERNODE_<SEC>_<FIELD>),config.example.toml
- 数据:GORM 双驱动(SQLite/MySQL)8 表模型,migrate 子命令可跑通
- 系统层:system.Manager 接口(useradd/userdel/passwd 白名单,dev dry-run)
- HTTP:Gin 路由骨架(/api/v1 + 501 占位),healthz,slog 结构化日志,优雅启停
- 前端:Vite + Vue3 + TS + Element Plus 最小可运行(web/),go:embed 打通
- 构建:deploy/Containerfile 多阶段单二进制镜像,web/Containerfile.dev 前端 dev
  镜像,Makefile(build/test/dev/web-build/image);go.mod 锁定 go 1.22
- 验证:go build/vet/test 通过;podman 镜像构建运行 healthz+embed 通过
2026-08-29 22:43:27 +08:00
cao.wangrenbo f70b344c85 chore: initial commit — 项目计划 v0.3
服务器用户管理节点(ws_usernode):
- docs/PLAN.md:需求交互确认后的完整项目计划(v0.3)
  - 单机节点 + RESTful API v1,后期可扩展多节点 agent
  - Go + Gin / Vue3 + Element Plus,GORM 双驱动(MySQL/SQLite)
  - 外部用户 OTP 双通道登录(邮件 + CLI)、sudoers 白名单系统操作
  - 账号生命周期、SSH 公钥管理、申请审批、审计归档
- .gitignore:Go / 前端 / 运行时产物忽略规则
2026-08-29 21:28:52 +08:00