Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

LiangliangSVN

这是一个配置开源svn服务端的管理工具,使用Pascal(Delphi风格)编写,Vibe Coding作品。虽然SVN已经被git替换,但有些老项目上用以及自己做下文件版本管理还是挺好用的。

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

LiangliangSVN

当前版本:v1.2.2

LiangliangSVN 是一个使用 FPC/Delphi 技术栈开发的 Linux SVN 服务端 Web 管理平台。当前版本提供用户、用户组、仓库登记、权限规则、authz/passwd 生成、类 VisualSVN 的仓库在线浏览、系统环境初始化、应用快照和审计日志能力,并内置无构建依赖的现代化 Web UI。

以我对SVN的理解,能加上的功能都加上了,可以和商用化的VisualSVN有得一拼。

服务器环境初始化

1. Linux 编译

要求 Linux 服务器已安装 FPC、GNU 本机链接工具链以及 SQLite3 开发/运行库。FPC 的 Pascal 编译器可以独立生成目标文件,但最终生成 Linux ELF 可执行文件仍需要 ld、glibc CRT 对象和 GCC 运行时对象。当前主线只依赖 SQLite,PostgreSQL 已移入未来企业增强版本单独设计:

bash
fpc -iV

Debian/Ubuntu 示例:

bash
sudo apt install -y fpc build-essential binutils libc6-dev libsqlite3-dev sqlite3 curl ca-certificates apache2-utils

RHEL/CentOS/Rocky 示例:

bash
sudo dnf install -y fpc gcc binutils glibc-devel sqlite-devel sqlite curl ca-certificates httpd-tools

openSUSE/SLES 示例:

bash
sudo zypper --non-interactive install fpc gcc binutils glibc-devel sqlite3-devel sqlite3 curl ca-certificates apache2-utils

已经安装 FPC 的全新服务器,也可以让编译脚本识别发行版、补齐本机链接依赖并继续编译:

bash
bash build.sh --install-deps

--install-deps 会执行系统包管理器,必须由 root 运行或具备 sudo 权限;不传该参数时,build.sh 只检查依赖,不会修改系统。

解压源码包后执行:

bash
cd LiangliangSVN
bash build.sh

编译成功后会生成:

text
bin/liangliangsvn

完整部署步骤见:

text
docs/Linux部署运维手册.MD

2. 启动、停止、重启

bash
bash start.sh
bash stop.sh
bash restart.sh

脚本支持:

  • bash build.sh --clean:清理旧编译输出后重新编译。
  • bash build.sh --install-deps:显式安装本机链接工具链和 SQLite 依赖后编译。
  • bash build.sh --clean --install-deps:安装依赖、清理旧产物并完整重编译。
  • bash install_svnauthz_latest.sh:从 Apache 官方源码构建安装最新版 svnauthz。
  • LLSVN_CONF=/path/app.ini bash start.sh:使用指定配置文件启动。
  • LLSVN_START_TIMEOUT=30 bash start.sh:调整启动健康检查等待秒数。
  • LLSVN_STOP_TIMEOUT=30 bash stop.sh:调整停止等待秒数。

默认监听:

text
http://服务器IP:8080/

空库首次启动时自动创建超级管理员。默认用户名为 admin,密码是 20 位安全随机值,start.sh 会在启动终端显示一次:

text
LiangliangSVN 首次管理员账号已创建
用户名: admin
密码: 随机生成的 20 位密码

密码不会写入 SQLite 明文字段,也不会长期保存在 logs/server.out。显示后请立即登录修改;已有数据库重启时不会重新生成账号或密码。

如果首次密码已经遗失,先停止服务,再使用离线恢复命令生成新随机密码:

bash
bash stop.sh
bin/liangliangsvn -c conf/app.ini --reset-admin-password
bash start.sh

该命令会把 [bootstrap] admin_user 指定账号恢复为启用的 super,并同时更新平台密码与 Apache 密码哈希。

会话空闲超时在 conf/app.ini 中配置,默认 120 分钟:

ini
[security]
session_timeout_minutes=120

该值必须大于 0。会话只保存在服务进程内,因此执行 stop.sh/restart.sh 或服务异常重启后,所有用户都必须重新登录。

系统初始化页面默认只生成脚本。需要允许超级管理员从页面执行时,由运维显式修改并重启服务:

ini
[initializer]
enable_execute=1
script_dir=data/initializer
bash_bin=/usr/bin/bash
powershell_bin=powershell.exe
max_log_bytes=524288

启用页面执行意味着 LiangliangSVN 服务拥有安装软件包、写系统配置和管理服务的权限,只应在初始化窗口期临时开启,完成后建议恢复为 enable_execute=0。

3. 目录说明

text
backend/src/       FPC 服务端源码
web/               内置 Web UI 静态文件
conf/app.ini       运行配置
data/              运行期数据目录
logs/              服务日志目录
bin/               编译输出目录
docs/              开发总结和后续计划
run/               PID 文件目录

4. SQLite 数据库

第二版开始使用 SQLite 作为默认数据库:

text
data/liangliangsvn.db

配置位置:

ini
[database]
driver=sqlite
sqlite_path=data/liangliangsvn.db
legacy_json_store=data/store.json

如果从第一版升级,首次启动且 SQLite 为空时,会尝试从 data/store.json 导入旧数据。

v0.11.0 起,当前源码包收敛为 SQLite 本机版,不再要求安装 PostgreSQL 相关 FPC 单元。PostgreSQL 将作为未来版本特性另行设计和验收,规划见 docs/PostgreSQL未来版本设计.MD。

5. 默认输出文件

第一版默认不会直接覆盖生产 SVN 配置,而是生成到:

text
data/generated/liangliangsvn.authz
data/generated/liangliangsvn.passwd

接入真实 Apache mod_dav_svn 时,可以修改 conf/app.ini:

ini
[svn]
authz_output_path=/etc/subversion/liangliangsvn.authz
passwd_output_path=/etc/subversion/liangliangsvn.passwd
public_base_url=https://svn.example.com/svn
repo_owner=apache
repo_group=apache
repo_chmod=ug+rwX,o-rwx

建议先在测试环境验证无误,再指向生产路径。

6. 当前功能

  • 管理员登录。
  • 用户新增、编辑、删除、禁用/启用、重置密码。
  • 用户组新增、编辑、删除、成员维护。
  • SVN 仓库登记。
  • SVN 仓库实体创建,支持填写服务器路径或默认使用 repo_root/repoKey。
  • SVN 仓库实体创建后可按配置自动修正属主、属组和权限,适配 Apache mod_dav_svn 访问。
  • 仓库登记编辑和删除,默认不删除磁盘 SVN 仓库目录。
  • SVN 路径级权限规则维护,支持按仓库选择用户组或用户并用按钮配置无权限、只读、读写。
  • 生成 Apache SVN 可使用的 authz 文件。
  • 调用官方 htpasswd 生成 bcrypt(默认 cost 12)passwd 文件;历史 {SHA}/$apr1$ 账号在成功登录或重置密码后自动升级。
  • 应用生成文件并记录快照。
  • 审计管理操作。
  • SQLite 持久化存储。
  • 第一版 JSON 数据自动迁移到 SQLite。
  • authz/passwd 临时文件、安全替换、旧文件备份。
  • 默认强制执行 svnauthz validate;命令缺失或校验失败时不覆盖线上配置。
  • 256 位 CSPRNG Session/CSRF、HttpOnly; SameSite=Strict; Secure Cookie 和写请求 CSRF 校验。
  • 类 VisualSVN 的仓库浏览 UI:左侧仓库列表、面包屑目录导航、文件表格、在线预览和原始文件入口。
  • svnlook 仓库浏览接口:可见仓库列表、修订信息、目录、文件内容、提交日志。
  • 仓库浏览搜索:按文件名或路径在当前目录下递归搜索,并按权限裁剪结果。
  • 路径历史查看:展示版本、作者、时间、路径和提交说明。
  • README 自动预览:进入目录后自动展开 README.md/README.txt/README。
  • 文件级差异查看:从文件预览区查看当前版本对上一版本的差异。
  • 文件预览增强:行号和轻量关键字高亮。
  • 文件预览编码识别:自动识别 UTF-8 和常见 GBK 文本,改善旧 Java 文件中文乱码。
  • 最近访问路径:浏览器本地保存最近打开的仓库路径。
  • 收藏路径:浏览器本地保存常用目录和文件,和最近访问分开展示。
  • Apache SVN 外链:配置 public_base_url 后可打开或复制 https://svn.example.com/svn/repo/path 形式链接。
  • 原始文件下载:下载文件名使用 SVN 路径中的真实文件名,不再默认显示为 raw。
  • 可视化版本选择:默认显示最新版本号,支持输入修订号或从历史切换快照。
  • 提交详情页:展示提交说明、变更路径和按当前路径权限裁剪后的 diff。
  • 文件 Blame:通过官方 svn blame 查看每一行的修订号和作者。
  • 受限内容全文搜索:在当前路径范围内按扫描上限搜索文本内容,并继续按权限裁剪结果。
  • svnlook changed/diff 查看。
  • 仓库物理创建接口,调用 svnadmin create。
  • 权限模拟 API 和 UI。
  • 可选 Apache reload。
  • svnadmin hotcopy 仓库备份。
  • 备份列表和恢复到新仓库。
  • 基础 Hook 模板:提交备注不能为空。
  • Hook 模板扩展:文件大小限制、禁止扩展名、post-commit Webhook。
  • Hook 管理页面:状态查看、弹窗编辑内容、禁用、删除备份、重新应用模板。
  • 仓库浏览增强:大文件预览限制、二进制内容阻止预览、changed 结构化显示。
  • 系统检查页:SQLite、SVN 命令、关键目录、Apache reload、浏览上限。
  • 系统检查增强:命令版本、SQLite 文件信息、Apache reload dry-run 建议、Hook 汇总状态。
  • 系统初始化页面:操作系统检测、部署模式选择、安装脚本生成、脚本审阅、后台执行日志和推荐配置同步。
  • Linux 初始化支持 Debian/Ubuntu、RHEL/CentOS/Rocky/Alma、openSUSE/SLES。
  • 初始化部署支持仅 SVN 工具、svnserve、Apache HTTP/HTTPS、自签名或已有证书、初始仓库、防火墙与 SELinux。
  • Windows 初始化提供实验性的 PowerShell、Chocolatey 和 svnserve 服务方案,不自动配置 Windows Apache。
  • 页面和系统检查显示当前版本号。
  • 内置 Web UI,无需 Node.js 或前端构建。

v0.8.0 新增:

  • SQLite 持久层继续增强,后续企业数据库能力移入未来版本单独规划。
  • 登录失败持久化记录,达到阈值后短期锁定账号并返回 HTTP 429。
  • 权限矩阵 API:GET /api/permissions/matrix。
  • 权限矩阵 UI:按用户/用户组与仓库路径交叉查看 none/r/rw,点击单元格可快速更新。
  • 权限规则保存改为同格覆盖更新,自动清理旧版本产生的同格重复规则。

v0.9.0 新增:

  • authz/passwd 与最近成功快照的 diff 预览。
  • 预览接口返回新增、删除、变更行统计。
  • 审计日志记录客户端 IP 和 User-Agent。
  • 权限规则新增、更新、删除记录 before/after JSON。
  • 系统检查页显示目录写权限和 Apache reload 配置就绪状态。

v0.10.0 新增:

  • authz/passwd 快照列表、查看、回滚预览和安全回滚。
  • 回滚复用临时文件、校验、备份、替换流程。
  • 迁移 JSON 导出,包含用户、用户组、仓库、权限、审计和快照。
  • 迁移 JSON replace 导入,适合 SQLite 实例之间迁移或重建。
  • Web UI 增加快照管理和迁移工具。

v0.11.0 新增:

  • 当前主线收敛为 SQLite-only,移除 PostgreSQL 编译依赖。
  • 结构化规则快照表,保存用户、用户组、仓库和权限规则。
  • 结构化规则快照列表、查看、回滚预览和回滚 API。
  • Web UI 增加结构化规则快照管理入口。
  • 迁移 JSON 覆盖结构化规则快照。
  • 现有 SVN 接管导入:扫描仓库目录、导入 Apache passwd 用户、导入 authz 用户组和权限规则。

v0.12.0 新增:

  • 平台 RBAC 基础权限。
  • 内置 super/sysadmin/repo_admin/auditor/user 五类角色。
  • 登录和 /api/me 返回角色与权限能力位。
  • 后端统一拦截写接口,审计员和普通用户默认只读。
  • 超级管理员可修改用户平台角色,系统管理员不能分配角色。
  • Web UI 按角色隐藏新增、删除、应用、回滚、导入等写操作入口。

v0.13.0 新增:

  • Hook 管理页面。
  • 查看每个仓库的 pre-commit/post-commit 状态。
  • 查看 Hook 内容,超过预览上限时阻止直接展示。
  • 禁用 Hook 时重命名为 .disabled.时间戳 备份,不直接删除。
  • 可从 Hook 页面重新应用已有模板。
  • Hook 禁用和模板应用写入审计日志。

v0.14.0 新增:

  • 系统检查页增加摘要区。
  • svnadmin/svnlook/svnauthz/Apache reload 命令版本探测。
  • SQLite 数据库文件大小和修改时间检查。
  • Apache reload sudo dry-run 命令建议。
  • 汇总所有已登记仓库的 Hook 文件状态。
  • 目录检查继续返回存在和写权限。

v0.15.0 新增:

  • 权限规则质量检查 API:GET /api/permissions/quality。
  • 检测无效仓库、无效用户、无效用户组、空主体、非法权限值和重复规则。
  • 对父子路径覆盖关系输出提示,帮助管理员理解最终 authz 效果。
  • authz/passwd 预览和应用前会阻断明显错误的权限规则。
  • 权限模拟返回 matchedRules/matchedRuleId/explain,展示命中的规则链路。
  • 权限页新增质量检查面板,生成配置页能同步展示阻断原因。

v0.16.0 新增:

  • Linux 启停脚本增强:PID 复用保护、启动后进程检查、可选 HTTP 健康检查和日志尾部提示。
  • build.sh --clean 支持安全清理编译输出。
  • 新增 Linux 部署运维手册:docs/Linux部署运维手册.MD。
  • 新增升级与备份说明:docs/升级与备份说明.MD。
  • 新增常见问题排查:docs/常见问题排查.MD。
  • 新增源码包清理规则:docs/源码包清理规则.MD。

v1.0.0 最终验收:

  • 完成编译、脚本语法、API 主流程、真实浏览器 Web UI 主流程和源码包内容验收。
  • 最终验收总结:docs/v1.0最终验收总结.MD。
  • 最终功能清单:docs/v1.0功能清单.MD。
  • 当前 SQLite 单机主线功能规划已完成。

7. 源码包说明

源码包文件名会带版本号,方便归档;解压后的目录固定为:

text
LiangliangSVN/

源码包包含规则和排除规则见:

text
docs/源码包清理规则.MD

8. 当前限制

  • 当前仓库浏览需要 Linux 环境安装 Subversion 工具并配置 svnlook_bin/svn_bin。其中 Blame 功能依赖官方 svn 客户端。
  • 普通用户只开放个人信息、退出登录和仓库浏览 API;仓库、目录、搜索、提交详情、Blame 和 diff 均继续按当前用户及用户组的 SVN 路径权限过滤。
  • 当前仓库创建需要 Linux 环境安装 Subversion 工具并配置 svnadmin_bin/repo_root。svnadmin_bin 可填写绝对路径,也可填写 PATH 中的命令名。
  • Windows 开发环境可做 FPC 和前端语法检查;Linux 真实启停仍需在目标服务器执行 bash build.sh/start.sh/stop.sh/restart.sh 验收。
  • authz diff 当前为逐行文本对比,后续可升级为更精细的 LCS/上下文 diff。
  • authz/passwd 文件快照仍只回滚实际输出文件;需要回滚数据库规则时,请使用 v0.11.0 增加的结构化规则快照。
  • v0.12.0 的仓库管理员暂未绑定具体仓库范围,当前可维护全部仓库相关配置;后续可增加仓库授权范围表。
  • Hook 管理当前只开放 pre-commit/post-commit 两类脚本编辑;保存后会在 Linux 下恢复可执行权限。
  • v1.0.7 的原始文件入口适合源码和文本文档;二进制文件的严格流式下载作为后续增强。
  • v1.1.1 的编码识别优先覆盖 UTF-8 和 GBK;其他历史编码可后续按实际样本继续扩展。
  • PostgreSQL 不属于当前主线交付范围,后续会作为企业增强版本单独设计。

9. v1.0.1 修复

  • 前端会自动修正常见 UTF-8 乱码显示名,例如默认管理员显示名。
  • 后端启动时会修复默认 admin 显示名的历史乱码。
  • 新增 install_svnauthz_latest.sh,用于从 Apache Subversion 官方源码构建安装 svnauthz。

10. v1.0.2 修复

  • 修复 Linux LANG=C、systemd/root 启动等场景下中文保存后变成 ?? 的问题。已保存成 ?? 的历史数据不可逆,需要重新编辑或删除重建。
  • 统一 svnadmin/svnlook/svnauthz 命令查找逻辑,绝对路径和 PATH 命令名都可使用。
  • 仓库页面明确区分 仅登记 和 创建实体仓库。
  • 新增仓库 删除登记,只删除平台记录和关联权限规则,不删除磁盘 SVN 仓库目录。
  • 新增 Hook 删除能力,活动 Hook 会重命名为 .deleted.* 备份。
  • 前端补充异步错误提示,路径越界、命令缺失等后端错误会直接显示。

11. v1.0.3 修复

  • 前端提交 JSON 时把字符串包装为 UTF-8 Base64,后端统一还原,避免中文在 HTTP 请求入口处被非 UTF-8 locale 损坏成 ?。
  • 新增用户编辑和删除。
  • 新增用户组编辑和删除。
  • 新增仓库登记编辑,优化删除登记后的列表刷新。
  • 页面、系统检查和 /api/health 显示版本号 v1.0.3,并给 CSS/JS 增加版本参数避免旧缓存。

12. v1.0.4 UI 交互优化

  • 用户、用户组、仓库新增表单改为内部窗口,页面默认只显示新增按钮。
  • 用户编辑、用户组编辑、仓库编辑改为内部窗口。
  • 用户角色分配改为下拉列表。
  • 用户组成员维护改为用户列表多选,支持全选和清空。
  • 用户组删除增加校验:组下有成员时不允许删除。
  • 仓库列表新增实体状态,并将 创建实体仓库 放到列表操作区。
  • 仓库删除登记增加保护:实体仓库目录存在时不允许删除登记。
  • 所有主要列表增加分页,默认每页 50 行。
  • 当前版本号更新为 v1.0.4。

13. v1.0.5 Hook 和权限交互优化

  • Hook 列表操作新增 编辑,点开内部窗口查看和修改脚本内容。
  • 新增 POST /api/repos/hooks/save,保存 Hook 后在 Linux 下恢复 755 可执行权限。
  • 权限页重做为左侧仓库列表、右侧用户组/用户权限分配工作台。
  • 权限配置改为 无权限/只读/读写 按钮,不再要求管理员手工录入 none/r/rw。
  • 用户权限视图显示用户组继承权限提示,方便判断用户为什么能访问仓库。
  • 当前版本号更新为 v1.0.5。

14. v1.0.6 现有 SVN 接管导入

  • 新增接管导入页面,系统管理员可扫描现有 SVN 环境。
  • 新增 GET /api/takeover/preview,预览仓库、passwd 用户、authz 用户组、权限规则和导入警告。
  • 新增 POST /api/takeover/import,按选项导入到 SQLite。
  • 仓库扫描会识别 repo_root 下包含 format/db/conf 的 SVN 仓库目录。
  • passwd 导入保留原 Apache htpasswd 哈希,不需要知道用户明文密码。
  • authz 导入支持 [groups]、[repo:/path] 和 [/path] 全仓库 section。
  • 导入只写 LiangliangSVN 数据库,不会直接覆盖 /etc/svn/authz 或 /etc/svn/passwd;覆盖仍需在“生成配置”页预览并应用。
  • 默认 repo_root 调整为 /var/svn。
  • 当前版本号更新为 v1.0.6。

15. v1.0.7 类 VisualSVN Web Interface

  • 仓库浏览页重做为左侧仓库列表、右侧目录浏览工作区。
  • 新增 GET /api/repos/browser/repos,按当前登录账号过滤可浏览仓库。
  • 新增 GET /api/repos/browser/info,显示当前版本作者、时间和提交说明。
  • 新增 GET /api/repos/browser/raw,提供源码和文本文档的原始内容入口。
  • 目录浏览改为当前目录直接子项,并在前端提供面包屑导航、父目录返回和文件/目录类型标识。
  • 普通用户只显示自己通过用户、用户组或 all 规则获得 r/rw 的仓库和路径;管理员仍可查看全部。
  • 文件预览保留大文件和二进制阻止策略,避免浏览器卡死或误展示二进制内容。
  • 当前版本号更新为 v1.0.7。

16. v1.0.8 仓库浏览体验增强

  • 新增 GET /api/repos/browser/history,查看指定路径历史。
  • 新增 GET /api/repos/browser/search,按关键字在当前目录下递归搜索路径。
  • 搜索结果继续按当前账号权限裁剪,普通用户不会搜到未授权路径。
  • 仓库浏览工具栏新增搜索框和路径历史按钮。
  • 文件预览区域新增历史按钮,可直接查看当前文件历史版本。
  • 搜索结果支持直接打开目录或预览文件。
  • 历史结果支持按历史版本打开目录或预览文件。
  • 进入目录后自动预览 README.md/README.txt/README。
  • 当前版本号更新为 v1.0.8。

17. v1.0.9 文件查看和差异增强

  • GET /api/repos/browser/diff 新增可选 path 参数,支持按文件或目录裁剪 diff 输出。
  • 文件预览区新增 差异 按钮,可查看当前文件在指定版本的变更。
  • 差异弹窗按新增、删除和 hunk 行做基础着色。
  • 文件预览新增行号,常见源码文件提供轻量关键字高亮。
  • 仓库浏览左侧新增最近访问路径,保存在浏览器本地 localStorage。
  • 最近访问支持一键回到目录或文件。
  • 当前版本号更新为 v1.0.9。

18. v1.1.0 仓库浏览体验重构

  • 仓库浏览去掉外露 HEAD 输入框,改为 最新 rX 版本胶囊和版本选择菜单。
  • 浏览、历史、提交详情、搜索结果和 Blame 改为页面内主视图,减少弹窗跳转。
  • 新增 GET /api/repos/browser/commit,聚合提交说明、变更路径和当前授权范围内的 diff。
  • 新增 GET /api/repos/browser/blame,通过 svn_bin 调用官方 svn blame。
  • GET /api/repos/browser/search 支持 type=content,提供受扫描上限保护的内容全文搜索。
  • GET /api/repos/browser/changed 支持 path 参数,按当前路径和权限裁剪变更列表。
  • 左侧保留最近访问,并新增收藏路径,均保存到浏览器本地 localStorage。
  • 系统检查页新增 svn 客户端版本检查。
  • 当前版本号更新为 v1.1.0。

19. v1.1.1 仓库浏览链接和编码修复

  • 新增 public_base_url 配置,用于生成 Apache mod_dav_svn 对外访问链接。
  • 仓库目录和文件视图新增 打开 SVN 地址、复制 SVN 地址。
  • 目录列表中每个可见条目可复制对应 SVN 地址。
  • 原始文件下载改为使用真实文件名,并支持中文文件名的 UTF-8 下载头。
  • svnlook cat 文件内容读取改为保留原始字节后再识别编码。
  • 文件预览自动识别 UTF-8、UTF-8 BOM 和 GBK,并返回 encoding 字段。
  • 当前版本号更新为 v1.1.1。

20. v1.1.2 原始文件下载和仓库权限修复

  • 原始文件下载 URL 改为 /api/repos/browser/raw/实际文件名?...,避免浏览器默认保存为 raw。
  • 后端继续输出 Content-Disposition,作为真实文件名下载的第二层保障。
  • 新增仓库创建后权限修正配置:repo_owner/repo_group/repo_chmod。
  • CentOS 可配置 apache:apache,Debian/Ubuntu 可配置 www-data:www-data。
  • 权限修正使用 chown -R 和 chmod -R 参数数组执行,不经过 shell。
  • 当前版本号更新为 v1.1.2。

21. v1.1.3 普通用户访问与会话控制

  • 普通用户可以使用平台账号登录,登录后默认进入“仓库浏览”。
  • 普通用户前端只显示仓库浏览入口;服务端只允许 /api/me、/api/logout 和 /api/repos/browser/*,不能读取用户、权限、审计和系统配置。
  • 仓库浏览继续按用户、用户组和 all 权限规则裁剪仓库与路径。
  • 新增 [security] session_timeout_minutes,按最后一次有效请求执行滑动空闲超时,默认 120 分钟。
  • 新增 POST /api/logout,同时销毁服务端会话并清除浏览器 Cookie。
  • 会话仅保存在进程内,服务停止或重启后旧会话自动失效。
  • 前端收到 HTTP 401 后会清除本地登录状态并返回登录页。
  • 最近访问和收藏改为按登录账号隔离,避免同一浏览器切换账号时显示其他账号路径。
  • 仓库浏览工具栏和普通用户移动端导航完成响应式修复。
  • 当前版本号更新为 v1.1.3。

22. v1.2.0 系统环境初始化

  • 空库首次启动不再使用固定密码,改为生成 20 位系统安全随机密码并在启动终端显示一次。
  • 新增离线 --reset-admin-password,用于首次凭据遗失后的随机密码恢复。
  • 新增超级管理员专属“系统初始化”页面和 /api/initializer/* 接口。
  • 支持检测操作系统、包管理器、root/管理员权限和现有 SVN/Apache/OpenSSL 命令。
  • 支持 Debian/Ubuntu、RHEL 系、openSUSE/SLES 的 Bash 安装脚本。
  • 支持 SVN 工具、svnserve、Apache HTTP/HTTPS 三种部署模式。
  • Apache 模式支持自签名证书或已有证书、mod_dav_svn、authz/passwd、服务启用、防火墙和 SELinux。
  • Windows 提供实验性的 PowerShell + Chocolatey + svnserve 脚本,暂不自动配置 Apache。
  • 脚本生成与执行分开;实际执行默认由 [initializer] enable_execute=0 关闭。
  • 执行前校验超级管理员角色、参数白名单、目标平台、root/管理员权限和脚本内容一致性。
  • 后台任务一次只运行一个,页面轮询显示日志和退出状态,不提供可能破坏包管理器的强制取消。
  • 安装成功后可备份并写入 app.ini 推荐配置,同时同步当前服务进程。
  • 当前版本号更新为 v1.2.0。

23. v1.2.1 Debian 12 编译工具链修复

  • 修复全新 Debian 12 仅安装 FPC 后,链接阶段找不到 crti.o/crtbegin.o/crtend.o/crtn.o 和 ld 时缺少明确处理入口的问题。
  • build.sh 新增 --install-deps,支持 apt、dnf、yum 和 zypper。
  • 编译前主动检查 ld、GCC、四个 CRT 对象和 SQLite 开发链接文件。
  • 自动把 GCC 返回的 CRT/SQLite 实际目录以 -Fl 传给 FPC,兼容手工安装或搜索路径陈旧的 FPC 配置。
  • 缺少依赖时在 FPC 编译前停止,并输出 Debian 12 可直接执行的安装命令。
  • 当前版本号更新为 v1.2.1。

24. v1.2.2 安全加固

  • 内置 HTTP 服务真正绑定 [server] host,默认只监听 127.0.0.1。
  • Session、CSRF、salt 和临时名称统一使用操作系统 CSPRNG,不再调用普通 Random。
  • 平台密码升级为 PBKDF2-HMAC-SHA256 210000 次;Apache 密码调用官方 htpasswd 生成 bcrypt cost 12。
  • 历史 $llsvn1$、{SHA} 和 $apr1$ 在成功登录或重置密码后自动升级,不再生成弱哈希。
  • 移除 URL ?token= 认证,所有认证写请求统一要求独立 CSRF 令牌。
  • API 改为逐接口、逐方法 RBAC 白名单;迁移秘密与原始 Hook 只允许 super。
  • 用户摘要、权限预览、快照、diff 和审计接口统一脱敏,不返回平台或 Apache 密码哈希。
  • 仓库登记限制为 repo_root/repoKey 直属目录;备份恢复限制为 repo_backup_dir 的直属有效 hotcopy。
  • 仓库、关键目录、备份和 Hook 拒绝符号链接;原始 Hook 编辑默认关闭,模板参数使用严格白名单。
  • Cookie 默认启用 Secure,authz 校验默认启用;新增浏览器安全响应头和配套安全回归测试。
  • 当前版本号更新为 v1.2.2。