Skip to content

feat: 新增FTP部署插件 - #551

Open
AXmishell wants to merge 7 commits into
allinssl:1.1.3from
AXmishell:feat/ftp-plugin
Open

feat: 新增FTP部署插件#551
AXmishell wants to merge 7 commits into
allinssl:1.1.3from
AXmishell:feat/ftp-plugin

Conversation

@AXmishell

Copy link
Copy Markdown

功能概述

新增内置 FTP 部署插件,支持证书/私钥通过 FTP/FTPS 上传到远程服务器,覆盖完整加密体系:

  • 五种传输模式:不加密、显式TLS(AUTH TLS)、隐式TLS、显式mTLS、隐式mTLS
  • 双向认证(mTLS):客户端证书/私钥配置,开关控制证书加载,标准端口(21/990)与非标端口(992/993)均验证通过
  • 主动模式支持:fork 自 github.com/jlaffaye/ftp(MIT 许可),补充 PORT/EPRT 主动数据连接(含 TLS 数据通道),修复原库不支持主动模式的问题
  • 路径智能识别:证书路径支持两种写法——目录(/ssl/ 自动拼接默认文件名 fullchain.pem/privkey.pem)或完整文件路径(/ssl/test.crt
  • 前端授权表单:TLS/mTLS 开关联动显隐、端口自动匹配(显式→21、隐式→990,手动修改后不覆盖)、证书/私钥条件显示

改动文件

后端

  • backend/internal/cert/deploy/ftp.go(新增):FTP 插件核心(连接/TLS/mTLS/路径识别/上传/连通性测试)
  • backend/internal/cert/deploy/deploy.go:部署分发注册 ftp
  • backend/app/api/access.go:连通性测试接口注册 ftp
  • third_party/jlaffaye-ftp/(新增):fork 库,增加主动模式(EPRT/PORT + 延迟 accept + TLS 数据连接)
  • go.mod/go.sum:依赖 github.com/jlaffaye/ftp(replace 至 fork)

前端

  • config/data.tsx:授权类型新增 FTP
  • types/access.d.tsFtpAccessConfig 类型
  • authApiManage/useController.tsx:FTP 表单(TLS/mTLS 联动、端口自动匹配、星号控制)
  • workflowView/lib/NodeFormConfig.tsx + node/deploy/model.tsx:部署节点 FTP 字段
  • assets/icons/svg/resources/ftp.svg(新增):FTP 图标

构建修复

  • frontend/package.json:workspaces 补充 plugin/*(Linux 构建必需)

测试

  • 5 模式 × 标准/非标端口 10 套矩阵测试(连通性 + 上传 + 内容校验)全部通过
  • 自动化配置测试:4 用户 × 权限策略断言(只读/可写)通过
  • mTLS 开关行为锁定:关闭时不发送证书(含证书残留场景)、TLS 关闭时忽略全部 TLS 配置
  • 主动模式五模式 e2e 验证通过

说明

  • 证书路径仅支持 PEM 格式
  • 本地 FTP 服务端测试环境:vsftpd 7 实例(21/990/992/993/2121/2122/2123)
  • 测试文件(*_test.go)按项目 .gitignore 不入库,位于本地

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants