Commit Graph
100 Commits
Author SHA1 Message Date
TermiNexus f8d356f3ff chore(baseline): 注册 RollCall/Viper/Venom 子域与站点,补 rollcall 应用
Main.py:WHITE_HOSTS 增 rollcall/viper/venom 主机,STATIC_SITES 增 rollcall/venom 静态根,静态站点路由下 /API/ 前缀请求转交 Django 处理。

gvsds:settings.py 注册 gvsds.apps.rollcall,urls.py 挂载 API/RollCall/;新增 rollcall 应用(模型/视图/路由/迁移 + RollCallManager 数据访问层)与 TempLate/rollcall 前端站点。

.gitignore:排除 Viper/Venom 前端工程与部署产物、TempLate/FTP 二进制分发目录。
2026-09-14 12:30:06 +08:00
TermiNexus 9cb0d8e186 refactor(core): 文档系列目录查询收敛进 DocManager
core/views.py 的 GetSerieDirectory 分支改用 DocManager.GetSerie / 新增的 ListDocumentsBySerie,移除视图内局部 import 与裸 ORM;doc/manager.py 新增 ListDocumentsBySerie(DocSerieUUID) 查询集方法。

注:core/views.py 同时携带此前工作区已有的 Viper/Venom 子域登记(SUBDOMAIN_CONFIG 两条),随本文件一并提交。
2026-09-14 06:47:38 +08:00
TermiNexus 99fd632bf1 refactor(custom-apps): doc/invite/sve/community 视图裸 ORM 收敛进各 app Manager
doc:DocManager 新增 QueryDocuments/QuerySeries 返回查询集,视图 get_queryset 改为委托;invite:新增 InviteManager(QuerySet/GetByInviteID/Create);sve:新增 SveManager(QuerySet/GetByCandidates/Upsert 支持 CreateDefaults);community:新增 CommunityManager(板块/分类/帖子/回复/点赞共 20 处,ToggleLike 封装点赞切换与计数同步,聚合查询保留原 values_list+annotate)。

视图层不再直接操作 ORM,类级 queryset 属性保留(DRF 必需);QueryPosts 收 Filters 字典以保持原边界行为。
2026-09-14 06:47:01 +08:00
TermiNexus 5667f07646 feat(db): 补齐 commission/stats 缺失的初始迁移并建表
这两个 app 此前没有任何迁移文件,新环境 migrate 不会建表。本次用 Django 自带 autodetector 生成初始迁移(项目全局存在「迁移状态字段名 snake_case / 模型 PascalCase」漂移,makemigrations 在检测阶段即报错,故按 app 单独生成)。

同时把 StatRecord/StatRanking 的 unique_together 去掉 JSON 列(MySQL 不支持 JSON 列索引,否则建表报 3152),去重由 StatsManager 的 select_for_update 在应用层保证。schema 校验差异 51 → 2。
2026-09-13 22:24:04 +08:00
TermiNexus b5a617d044 fix(gerp): 对齐遗留库列名并清理 Asset 表 Flask 期遗留文件列
models.py:CompanyInfo 三个身份证列与 PersonalPage.QQ 补 db_column,匹配库中 *IdCard / Qq 实际列名;新增 0044 仅状态迁移(SeparateDatabaseAndState,零 DDL)记录该对齐。

新增 0045:条件删除 Asset 表 8 个 Flask 期文件资产列(FileName/FileSHA1/FileSize/MimeType/StoragePath/UploaderUUID/RefCount/CreateTime)。这些列 NOT NULL 且无默认值,导致新增企业资产必然报 1364;删除前先解除 UploaderUUID 上的遗留外键 asset_ibfk_1。按 information_schema 判定存在性,幂等可重入。
2026-09-13 22:16:53 +08:00
TermiNexus 31b0ab885f refactor(orm): 手写 ORM 下沉 gvsdsdk Manager,通用工具改为 SDK 转发
P1 通用查询:viewsets / app / menu / mail / gitea / mc / stats / sync_apps 等视图与命令的裸查询改委托 SDK Manager(Role/Company/Department/Position/Menu/Tenant/App)。

P2 App 体系:app_manager.py 与 app_manifests.py 实现零裸 ORM,职务多值/虚拟职务/公司下拉全部走 SDK。

P3 工具下沉:money/json_encoder/celery_utils/exception_handler/redis_lock 改为纯转发展开;ip_filter/storage 转发并注入 app.ini 配置源;common 下 DateTime/String/Naming/UUID 转发 SDK。

删除死代码 commission/strategies/engine.py(SDK 已有同物且零引用)与 payment/models.py 的 FromTenantAndPlatform;单测 patch 目标同步为 gvsdsdk.*,test_attack_detect fixture 补齐限频去重状态。
2026-09-13 21:58:06 +08:00
TermiNexus 052f48d526 refactor(gerp): 职务系统委托 gvsdsdk——模型改 import + form_service/viewsets/app_manager 落库下沉
- models.py:删除 UserRoleDepartmentPosition/AppVirtualPosition/AppVirtualBinding 本地定义,
  改从 gvsdsdk.models import(SDK 统一提供,db_table 同库映射)
- form_service:_ResolvePrimaryUrd/_WritePositionsToPrimaryUrd 委托 ResolvePrimaryUrd/
  WritePositionsToPrimaryUrd;batch_positions 落库委托 BatchAdd/BatchRemovePositions
  (bytes 归一化查重防 1062);add_record/modify_record 职务写入委托
  AddPositionToUrd/SetUrdPositions;delete_record 级联清理委托 ClearUrdPositions
  (隔离/审计/拦截业务逻辑保留 gvsds 侧)
- viewsets:PositionViewSet.search/PositionCategoryViewSet.search 数据查询与树组装
  委托 SearchPositions/SearchCategories(保留租户判定上下文与公司绑定分类优先排序)
- app_manager:GetVirtualMapping/SetVirtualMapping/AutoBindVirtualPositions 委托 SDK
  (应用存在性/租户判定保留)
- 附:应用可见性/菜单/OA 系列(app_access/menu/oa 视图、ugm 公司管理委托、migrations 0033-0043、
  SeedPositions/SeedPositionCategories 命令)
2026-08-30 13:22:44 +08:00
TermiNexus 966ef66b08 docs(arch): 同步UserRole/角色作用域数据模型描述(关联表为准)
UserRole遗留字段(DeptUUID/WorkgroupUUID/RoleType)已删除,部门/工作组归属与成员类型全走关联表
2026-08-28 15:34:36 +08:00
TermiNexus 058fd11fb0 fix(gerp): role_scope负责人/组长判定改读关联表RoleType,支持多部门作用域与公司过滤
- 移除UserRole遗留字段(RoleType/DeptUUID/WorkgroupUUID)相关隐藏与防写入规则
- 同步UserRole/UserRoleDepartment列展示优化
2026-08-28 15:34:28 +08:00
TermiNexus 741bfb7740 fix(auth): Tenant 表数据仅租户管理员可读(兜底)
- form_service.get_table 对 Tenant 表:非管理员(admin:super/tenant)返回空,防止普通角色绕过前端直调接口查看租户详情
2026-08-25 09:55:58 +08:00
TermiNexus 3d950dbc8a refactor(asset): 公司资产菜单权限改由 Menu 表数据驱动
- 移除 '公司资产' 菜单代码硬编码特例
- 该菜单 PermAttr 已在 Menu 表配置为 admin:company:租户管理员(IsAdmin 放行)/公司管理员(RBAC admin:company)可见,普通角色隐藏
2026-08-25 09:22:14 +08:00
TermiNexus 8775cb37d9 feat(asset): 公司资产权限收敛——仅管理员可见
- 菜单:'公司资产'目录仅 IsCompanyAdmin(admin:company/tenant/super)可见,普通用户隐藏
- 数据范围:FileAssetViewSet 按角色——admin:super 全部 / admin:tenant 本租户所有公司 / admin:company 本公司 / 其他 403
- 上传:Init 管理员校验;Complete/SimpleUpload 归属公司强制解析(租户管理员可指定本租户公司,公司管理员仅本公司)
2026-08-25 09:01:38 +08:00
TermiNexus 6ec24c8bb3 fix(oidc): userinfo 解码关闭 verify_aud,修复 Gitea SSO 401
- pyjwt>=2.13 在 decode 未传 audience 时,payload 含 aud 必抛 InvalidAudienceError
- /oidc/userinfo 改用 options={'verify_aud': False},aud 归属仍由 _ClientIds() 手动校验,安全等价
2026-08-25 08:35:24 +08:00
TermiNexus be0e9d6a46 chore(tempLate): 同步 GVSite 最新构建产物(搜索框响应式宽度) 2026-08-23 15:04:04 +08:00
TermiNexus 5d7c6500c9 chore(tempLate): 同步 GVSite 最新构建产物(头像 hover 去边框) 2026-08-23 15:00:00 +08:00
TermiNexus 2681c1a7d1 chore(tempLate): 同步 GVSite 最新构建产物(@scope :root 修正) 2026-08-22 04:30:07 +08:00
TermiNexus 3af59e9391 chore(tempLate): 同步 GVSite 最新构建产物(字体回退本地) 2026-08-22 04:23:22 +08:00
TermiNexus 94f515ac29 fix(doc): GetDoc 识别完整 HTML 文档为 html 格式
- 内容以 <!DOCTYPE/html 开头且标为 markdown 时按 html 返回,避免 marked 拆坏内嵌 </style> 污染站点样式(配合前端 @layer 隔离)
- TempLate 同步 GVSite 最新构建产物
2026-08-22 04:21:00 +08:00
TermiNexus 83c9f556b6 chore(tempLate): 同步 GVSite 最新构建产物(头像下拉角色 TAG + 我的应用) 2026-08-22 01:49:07 +08:00
TermiNexus 4e09f29a71 fix(auth): 补 Auth/SetDefaultRole 根路由入口
- 默认角色接口此前只挂了 ugm 子路由(api/ugm/set-default-role/),
  前端 POST /Auth/SetDefaultRole 405;根 urls 补 PascalCase 路由对齐
2026-08-22 01:43:18 +08:00
TermiNexus ec43c4dfe6 feat(auth): User.DefaultRoleUUID 默认登录角色(登录自动激活)
- core.User 新增 DefaultRoleUUID(UUIDField 可空)+ 手写迁移 0004
- _SetCurrentRoleCookie 登录/注册优先激活默认角色(须持有且启用),否则回退首个角色
- GetUserRoles 返回 IsDefault 标记;新增 SetDefaultRole 接口(空 RoleUUID=清除默认)
2026-08-22 01:23:34 +08:00
TermiNexus b1ccb9e0e1 fix(auth): simplejwt blacklist 适配非 auth User;部署 old2/old3 子域与 SPA fallback
- tokens.py 全局 patch RefreshToken.for_user:不写 OutstandingToken、UserUUID 转 str,
  修复登录 500(OutstandingToken.user 必须为 auth.User 实例);settings/urls 移除 token_blacklist
- core/views 新增 old2/old3 子域配置(走 _base 模板渲染),SPA fallback 支持 /index.html,
  .html 重定向排除目录请求,修复 invite 子域 302 错跳
- TempLate/index.html 同步 GVSite 最新构建产物(含头像下拉复用 GERP 组件)
2026-08-22 01:06:55 +08:00
TermiNexus bf839ca8fc chore(tempLate): Members 成员页本地 assets 改指 hb.cdn.gvsds.com/Members/* 2026-08-18 10:00:29 +08:00
TermiNexus 38914c04b8 chore(tempLate): assets/js 内 Mascot 海报与成员头像改指 hb.cdn 引用 2026-08-18 09:55:03 +08:00
TermiNexus 63a736f9a7 chore(tempLate): 二进制资源迁至 CDN 并改指 hb.cdn 引用
TempLate/assets 二进制已迁移至 hb.cdn.gvsds.com(本地 assets - Copy 仅为上传参考源),
将根域页面的有效二进制引用改指 CDN:
- index.html(icon/ICON.png)、_base(fonts woff2/ttf/otf + hlogos/gnobg.png)
- TempLate/1、Members/B-Smooth、Members/TermiNexus(members 头像 / Mascot 图)
- .gitignore 排除 assets - Copy;MC/OMC/错误页等子域或死链引用保持原样
2026-08-17 22:02:38 +08:00
TermiNexus 2ab4b7d9dc fix(mail): UUIDField 查询传 User 实例返回空——filter(UserUUID=request.user) 改传 user.UserUUID(修复企业邮箱列表消失) 2026-08-15 12:48:10 +08:00
TermiNexus c8d4cd7fbf fix(msync): views 包导出 UserTokenIssueView(修复主服务器启动 AttributeError) 2026-08-14 22:19:59 +08:00
TermiNexus 0edb56afa8 docs(design): 标记 P1-P4 完成 + P5 验证手册(待部署窗口) 2026-08-14 07:12:27 +08:00
TermiNexus 8340be7eb0 feat(msync): UserTokenAuthentication 用户令牌自省 + /me 端点(iframe 身份透传) 2026-08-14 00:33:50 +08:00
TermiNexus a30e27e4bc feat(msync): 用户令牌签发端点(UserTokenIssueView)+ Market 返回 Source/ServiceName/ServiceOnline 2026-08-14 00:33:49 +08:00
TermiNexus 00340f818f feat(ram): App 安装 API 支持 GrantRoles(安装时 RAM 角色授权)+ ManageCompanies 返回租户角色列表 2026-08-14 00:03:32 +08:00
TermiNexus 588452aa92 feat(ram): 安装时 RAM 角色授权(GrantRoles)+ ServiceOnline 离线生命周期(下线标记/上报恢复) 2026-08-14 00:01:46 +08:00
TermiNexus fda236eb0c feat(msync): ATestCServer 代码入库(忽略 certs/db.sqlite3)+ 远端 App 清单上报能力(ReportAppManifests + report_manifest 命令) 2026-08-13 23:59:34 +08:00
TermiNexus 6e16c0d3b7 feat(msync-app): App 表 Source/ServiceName/ServiceDomain 字段 + 远端清单同步(SyncRemoteAppManifests,幂等 upsert + 本地冲突检测) 2026-08-13 23:57:58 +08:00
TermiNexus 345abe88bb feat(ram): RAMGrant 建表迁移 + 菜单过滤 RAM 角色粒度集成(无策略保持全员可见) 2026-08-13 23:55:55 +08:00
TermiNexus feaa783885 docs(design): MSYNC 远端App注入 + RAM 资源访问管理方案设计 2026-08-13 23:52:56 +08:00
TermiNexus b1dd91dde0 fix(crb): 清理 Menu.CompanyUUID select_related 残留(FK→UUIDField 收敛后 FieldError),修复 /API/wallet 500 2026-08-13 19:36:17 +08:00
TermiNexus 51e47cc942 docs(governance): 标记 3.2 CrudTable 拆分完成(GERP 36afde1) 2026-08-13 18:26:39 +08:00
TermiNexus 31f341d1f4 fix(migrations): 0028 回填改用迁移状态字段名(小写)并补 Menu.TenantUUID,migrate 全部应用
- 0028 回填 Company/关联表历史字段名(tenant_uuid/company_uuid)匹配既有迁移状态
- gerp Menu 补 TenantUUID 字段(与已执行 DB 列对齐)
- migrate 完成:0028 回填 54 行(fake 标记,AddField 已由 MySQL DDL 提交)、0029 FK→UUIDField、token_blacklist 建表
2026-08-13 18:19:27 +08:00
TermiNexus 156d9f1125 docs(governance): 记录架构债治理各阶段执行状态与待办(含待执行 migrate 提醒) 2026-08-13 18:15:48 +08:00
TermiNexus a208dbb02a chore(tools): 根目录散落工具脚本归位 tools/ 目录
- find/listdir/r/sound/SendWX 及 WARN.mp3 移入 tools/(sound.py 相对路径同目录保持可用)
- Version 死代码(import 自增 VER)归档 tools/Version
- Main.py(生产入口候选)与 TODO 保留根目录待确认
2026-08-13 18:15:30 +08:00
TermiNexus 727fbba272 fix(tasks): stats 任务套重试 + PurgeOld 全周期清理;攻击日志写库限频去重
- 四个 stats 任务加 RetryOnFailure(2 次重试)
- PurgeOldStats 清理 daily/monthly/hourly 全周期
- AttackDetectMiddleware 同 IP+类型 60s 窗口去重,防 401 刷屏反向写库放大
2026-08-13 17:55:56 +08:00
TermiNexus 221c5d9e9d fix(security): 移除 core.User 默认密码哈希后门,异常堆栈改 logging 落盘
- UserPassword 默认值改为空串(防默认口令,须经注册/重置流程设置)
- exception_handler print→logging(日志可审计)
- ip_filter 默认 disabled 语义注释(生产需显式配置并挂载)
2026-08-13 17:55:55 +08:00
TermiNexus e76a5b359e security(jwt): 收敛 token 生命周期(168h→24h)并启用 refresh 轮换黑名单
- ACCESS_TOKEN_LIFETIME 默认 24h(缩小泄露窗口)
- BLACKLIST_AFTER_ROTATION 默认开启,注册 token_blacklist app
- LOGGING 增加 RotatingFileHandler 落盘(django.log)
- USE_TZ=False 决策文档化(存量 naive UTC 时间戳无法安全切换)
2026-08-13 17:55:54 +08:00
TermiNexus 67c4d03597 docs(settings): 文档化 AUTH_USER_MODEL 不可行决策(core.User 非 AbstractBaseUser,改设需重建 auth 框架) 2026-08-13 17:52:34 +08:00
TermiNexus e2944e13d2 fix(form_service): 适配 UUIDField 收敛——消除 ForeignKey attname(_id) 硬编码依赖
- 工单创建人/指派人读取与注入改用字段名(兼容 _id 遗留键)
- CompanyInfo 租户查重、部门成员计数过滤改字段名
- AttackDetectMiddleware 异常日志写入改字段名,测试断言同步
2026-08-13 17:52:17 +08:00
TermiNexus 5127ca4166 refactor(models): 模型双轨收敛——gerp 侧 31 处 ForeignKey 改 UUIDField,与 SDK 映射对齐
- models.py: Tenant/Company/Dept/WorkOrder/Message/Menu 等 31 处 FK→UUIDField(db_column 不变)
- 8 张有 CompanyUUID 的表补齐 TenantUUID(Dept/Workgroup/FileAsset/Menu/WorkgroupRole/UserRoleWorkgroup/UserRoleDepartment/CompanyApp)
- 迁移 0028 扩展回填全 8 表;迁移 0029 AlterField 对齐字段类型(DB 列无实际变化)
- 消除 select_related/_id 行为差异,SDK 与主库模型字段类型统一
2026-08-13 17:52:08 +08:00
TermiNexus 77e676e55f feat(tenant): Dept/Workgroup 补 TenantUUID 列 + 回填迁移,消除跨表隔离反射补偿
- gerp 模型 Department/Workgroup 新增 TenantUUID(nullable)
- 迁移 0028:AddField + RunPython 从 Company.TenantUUID 回填(待 migrate 执行)
- 配合 SDK 映射同步加字段,组织表结构对齐
2026-08-13 17:42:58 +08:00
TermiNexus 88c657660d refactor(role_scope): 数据权限表级特判改策略注册表
- 新增 TableScopeFilter 策略基类 + User/UserRole/Order 三个注册实例
- ApplyScopeToQueryset 改为注册表分发,新增 RegisterScopeFilter 扩展入口(开闭原则)
- 行为与原有 User/UserRole/Order 特判完全一致
2026-08-13 17:40:24 +08:00
TermiNexus e0af444c31 refactor(auth): JWT 认证链路复用 SDK ResolveRoleContext,消除角色解析双实现 2026-08-13 17:40:23 +08:00
TermiNexus 9f1b222bfe chore(repo): 取消跟踪 TempLate/GERP 部署产物(deploy.ps1 每次构建后同步,不纳入版本控制) 2026-08-13 17:36:36 +08:00
TermiNexus 88ecdde7c7 chore(repo): 治理仓库卫生——忽略子服务器/上传目录/运行时文件并清理已入库敏感数据
- .gitignore: 新增 /ATestCServer/ /media/ /GVSite/ /frp/ /.idea/ 及 service.log/ips.txt 等运行时文件
- 取消跟踪: ATestCServer(含 HTTPS 私钥与 db.sqlite3)、media 用户上传、GVSite gitlink、根目录日志与状态文件
- 新增 docs/architecture_debt_governance.md 架构债治理清单
2026-08-13 17:36:21 +08:00
TermiNexus 6b82f9c2d7 chore(site): GVSite 指针更新——超级菜单社区独立子菜单 2026-08-13 11:12:42 +08:00
TermiNexus a7213bac0a chore(site): GVSite 指针更新——社区按钮图标与 Tailwind v4 语法修复 2026-08-13 11:02:16 +08:00
TermiNexus 19ee1e7e2d chore(site): GVSite 指针更新——社区顶部间距真正生效 2026-08-13 10:58:34 +08:00
TermiNexus dfc8ca58a8 chore(site): GVSite 指针更新——社区详情/发帖页顶部间距调整 2026-08-13 10:55:46 +08:00
TermiNexus e3c6f7d21d chore(site): GVSite 指针更新——nav 透明仅限 www 首页 2026-08-13 10:40:47 +08:00
TermiNexus 0a21d0bb30 feat(community): 头像 API——ugm 按 UserUUID 头像接口改公开(AllowAny),社区接口返回 AuthorAvatar 字段;GVSite 指针更新 2026-08-13 10:30:58 +08:00
TermiNexus 569344030e chore(community): GVSite 指针更新——社区页面阿里云开发者社区风格重构 2026-08-13 10:26:52 +08:00
TermiNexus 71c8ea8ae5 fix(community): SUBDOMAIN_CONFIG 注册 discuss/community/comm 子域(dir='' root_is_index)——discuss.gvsds.com 等根路径直达 GVSite SPA 社区 2026-08-13 10:22:14 +08:00
TermiNexus 3fd22c24eb feat(community): 官网社区后端——CommunityBoard/Category/Post/Reply/Like 五表 + /API/Community/* 接口(板块/帖子/详情/发帖/回复/点赞),注册 app 与路由;GVSite 指针更新(社区前端) 2026-08-13 10:18:01 +08:00
TermiNexus 06b91a10a4 chore: 部署产物更新(禁止选中样式) 2026-08-13 09:44:20 +08:00
TermiNexus b41d90c998 feat(app): 应用配置公司化——AppConfig 增加 CompanyUUID(空=租户默认),读取回退链(公司→租户默认→模板默认),新增批量复制接口 Config/Copy,权限按管理范围校验 2026-08-13 08:48:05 +08:00
TermiNexus 3fa8811a03 chore: 部署产物更新(AppMarket 配置按钮恢复) 2026-08-13 08:36:53 +08:00
TermiNexus c122f80261 feat(app): ListMarket 支持可管理公司安装分布(InstalledCompanies),市场接口对管理员附带管理范围内已装公司名 2026-08-13 08:34:58 +08:00
TermiNexus d6c72b5ef9 fix(app): Install/Uninstall 公司权限校验 c.hex 改 c.hex()——UUIDObj 无 hex 属性导致权限误判(403/500) 2026-08-13 08:22:21 +08:00
TermiNexus 06d43b5a6e feat(gerp): 真应用注册协议 Manifest + 严格可用收紧 + 应用配置
- 新增 app_manifests.py:应用清单协议(元数据/菜单/前端入口/配置模板),内置6应用
- 菜单由 Manifest 全权管理:安装注入(挂已知父菜单)/卸载删除,删除手工 menu 项
- App 表新增 FrontendRoute/FrontendType/LegacySrc(0025);新增 AppConfig 键值表(0026)
- app_manager 配置服务(模板/读取/保存)+ AppConfigView(/API/App/Config)
- 严格收紧:AppAccessPermission 移除管理员豁免、menu 过滤全员执行按 Manifest 全菜单
- mail/gitea 管理视图补挂应用权限;Uninstall 支持 TenantOnly
- ManageCompanies 支持按应用查公司安装状态;修复 UUIDObj 无 .hex(转 bytes)
- 新增 sync_apps 管理命令(按安装状态收敛菜单)
2026-08-13 07:47:07 +08:00
TermiNexus 4de301aa78 feat(app): 公司级+租户级双粒度应用安装——CompanyApp 表、Install/Uninstall 支持指定公司、可管理公司范围校验(super/tenant/company)、CheckAccess 公司维度 2026-08-13 06:28:28 +08:00
TermiNexus 904e225b90 feat(app): 应用级访问控制——AppAccessPermission 权限工厂挂载邮箱/Gitea/商店/储值/钱包/企业 API(未安装租户拒绝,管理员豁免) 2026-08-13 05:34:42 +08:00
TermiNexus 1066d82c75 docs: 更新 GVSite 子模块指针、TODO 待办清单,新增 GVSDSDK 问题与 SAGA 报告文档 2026-08-13 04:39:57 +08:00
TermiNexus 63eda7437f fix(menu): MenuListCompatView 字典迭代中修改报错——子孙收集与移除逻辑移出 for 循环(GERP系统/应用中心父级菜单过滤) 2026-08-13 04:33:04 +08:00
TermiNexus 621cdf3f02 chore(gerp): 部署产物更新(GERP系统父级菜单拆分子页面构建) 2026-08-13 04:23:47 +08:00
TermiNexus b55dd2b966 feat(gerp/system): GERP系统一级菜单(admin:super 专属)——状态/时序/secrets.ini/运行时 API + 菜单过滤支持 admin:super 专属 2026-08-13 04:20:30 +08:00
TermiNexus 83036be079 chore(gerp): 部署产物更新(应用中心构建) 2026-08-13 04:06:22 +08:00
TermiNexus a6fb0ca7cf feat(gerp/app): 功能/应用体系——App/TenantApp/UserApp 三表 + 应用中心服务层/API + 菜单按安装状态过滤 2026-08-13 04:06:15 +08:00
TermiNexus 68c3ac8d9c chore(gerp): 部署产物更新(企业创建成功页返回详情构建) 2026-08-13 03:06:09 +08:00
TermiNexus f1867a9e80 chore(gerp): 部署产物更新(租户详情菜单直达构建) 2026-08-13 02:57:01 +08:00
TermiNexus c610d57157 chore(gerp): 部署产物更新(租户详情企业信息构建) 2026-08-13 02:39:48 +08:00
TermiNexus 0d019c1c8e feat(gerp/form): CompanyInfo 同一租户仅一条,防重复提交(epcreate 打通) 2026-08-13 02:39:42 +08:00
TermiNexus 1504c86bce chore(gerp): 部署产物更新(debug/epcreate 路由构建) 2026-08-13 02:34:03 +08:00
TermiNexus 0302081b47 chore(gerp): 部署产物更新(原文 blob 回退修复构建) 2026-08-13 01:24:45 +08:00
TermiNexus 137170bac7 chore(gerp): 部署产物更新(原文 blob 回退+安全浏览文案构建) 2026-08-13 01:22:01 +08:00
TermiNexus 139c2514c3 feat(oidc): 泛化 OIDC Provider 为多客户端并支持 user 身份策略
- secrets 新增 sections() 枚举配置段,客户端按 [oidc_client_<id>] 自动注册
- 身份策略 IDENTITY 支持 gitea(绑定 Gitea,sub=用户名)/ user(sub=UserUUID,全用户开放)
- authorize/token/userinfo 按 client_id 校验凭据与回调,code 绑定客户端防串用
- [gitea_oidc] 默认客户端行为零差异,兼容现有 Gitea 免密登录
2026-08-13 01:18:00 +08:00
TermiNexus 45290a6e71 chore(gerp): 部署产物更新(HTML 邮件 iframe 预览构建) 2026-08-13 01:16:52 +08:00
TermiNexus 0567b469e9 chore(gerp): 部署产物更新(邮箱小写化构建) 2026-08-13 01:06:41 +08:00
TermiNexus bae47dae8c fix(gerp/mail): 邮箱名统一小写化,与 Stalwart 规范化存储保持一致 2026-08-13 01:06:36 +08:00
TermiNexus 9d9102617f chore(gerp): 部署产物更新(多邮箱选择修复构建) 2026-08-13 01:02:54 +08:00
TermiNexus 4455bfe7e9 chore(gerp): 部署产物更新(多邮箱功能构建) 2026-08-13 01:00:42 +08:00
TermiNexus 164fbb9b76 feat(gerp/mail): 支持用户注册多个企业邮箱,上限 5 个
- MailApply 上限由 1 改 5,超出提示"邮箱数量已达上限"

- MyMailbox 返回 MailboxList 数组(按创建时间倒序),替代单 Mailbox

- ChangePassword/Login 支持可选 MailboxName 指定目标邮箱,缺省取第一个
2026-08-13 01:00:37 +08:00
TermiNexus bbd2ac3b76 chore(gerp): 部署产物更新(免密登录新开页构建) 2026-08-11 16:58:05 +08:00
TermiNexus 39e231bfbf fix(oidc): OIDC 端点禁用 DRF 默认 JWT 认证,修复 userinfo 401
DRF CustomJWTAuthentication 会把 Gitea 回传的 RS256 id_token 当 simplejwt token 解析失败返回 401;全部 OIDC 视图 authentication_classes=[],token/userinfo 各自自行校验凭据
2026-08-11 16:49:59 +08:00
TermiNexus 0b3620223c fix(oidc): id_token 补充 nickname claim(Gitea 默认按 nickname 取用户名) 2026-08-11 16:44:45 +08:00
TermiNexus dcd452da4f chore(gerp): 部署产物更新(Gitea 免密登录按钮构建) 2026-08-11 16:38:56 +08:00
TermiNexus 7b83db89d8 feat(gitea): GERP 作为 OIDC Provider 实现 Gitea 免密登录(SSO)
新增 /oidc/authorize|token|jwks|userinfo 与 /.well-known/openid-configuration:authorize 校验 GERP 会话自动授权,token 经 client 凭据换 RS256 id_token(sub/preferred_username/email 携带 Gitea 用户名);SessionConfig 输出 SsoUrl 供前端跳转 Gitea OAuth2 入口
2026-08-11 16:38:42 +08:00
TermiNexus 6c7664ae6e feat(sve): 注册 sve.gvsds.org 子域托管 TempLate/SVE,重构 SveID 编解码并兼容存量 CVSS 数据
- core/views.py 注册 sve 子域 -> SVE 目录
- sve/views.py:SveID 按 0x0YYYYNNNNN(5 字节 hex)编解码,兼容补零/文本存量形态;SveCvss 兼容小写键 score/severity/vector
- 删除 TempLate/Org 原生 SVE 页面
- .gitignore 排除 /SVE/ 与 /TempLate/SVE/
2026-08-11 16:28:52 +08:00
TermiNexus 6babdb95fd fix(gitea): 申请记录补传 UserGiteaAccountUUID 主键,修复 Duplicate entry '\x00'
创建 UserGiteaAccount 时漏传主键 UserGiteaAccountUUID,UUIDField 无默认值导致主键存全零字节,第二次申请触发 MySQL 主键冲突;与 mail.py 模式对齐补 uuid4().bytes
2026-08-11 16:17:51 +08:00
TermiNexus bef6594c76 fix(gitea): 创建组织团队补全 units 字段,修复加入组织失败
新版 Gitea 创建团队必填 units(单元权限),否则 POST /orgs/{org}/teams 返回 500 units permission should not be empty;GetOrCreateMemberTeam 创建 Members 团队时补 repo.code/issues/pulls/releases/wiki
2026-08-11 16:13:47 +08:00
TermiNexus 14902a404d chore(ccgo): 以 Vue3 做题站替换 TempLate/CCGO 原生页面并清理 www 残留
CCGO 构建产物部署至 TempLate/CCGO(旧文件移至 backup/ccgo);GVSite 已迁移残留的 Invite/Errors 旧页移至 backup/www;.gitignore 排除新工程
2026-08-11 01:41:39 +08:00
TermiNexus 5549b28a08 chore(gerp): 部署产物更新(正文 data:asText 修复构建) 2026-08-11 01:26:25 +08:00
TermiNexus 4b3013629a chore(gerp): 部署产物更新(正文修复构建)+ 清理 logs.zip
deploy.ps1 部署后的 index.html 资源 hash 同步;TODO 去空行;删除误入仓库的 34MB logs.zip
2026-08-11 01:22:15 +08:00