Skip to content

Releases: AsterCommunity/AsterDrive

AsterDrive v0.3.2

Choose a tag to compare

@github-actions github-actions released this 08 Jul 03:51
Immutable release. Only release title and notes can be modified.
v0.3.2
6c69528

Release Highlights

AsterDrive v0.3.20.3.1 之后的快速热修复版本,主线是前端公共认证路由的初始化与 token refresh 行为收敛。 在邀请注册、密码重置、邮箱验证、OIDC callback 等公共页面上,应用启动时不再发起无谓的 bootstrap auth 检查,401 错误时也不再尝试 token refresh,从而减少无效 API 调用并避免把公共流程错误地重定向到登录页;同时补全了多个认证相关页面、回收站页面和错误页的 i18n namespace 加载,分享视图页面补齐 tasks namespace,并新增对应测试覆盖。

  • 公共认证路由跳过初始化检查/invite/:token/reset-password 不再触发 bootstrap auth check
  • 公共端点跳过 token refresh — 密码重置、邮箱验证、OIDC callback、邀请相关端点 401 时不再尝试刷新 token
  • URL 匹配只比较 pathname — 修复 query/fragment 导致公共端点未被识别的问题
  • i18n namespace 补全 — 强制改密、重置密码、邀请注册、团队详情、回收站、错误页加载正确 namespace;分享视图补充 tasks

Fixed

  • 前端公共认证页面(邀请注册、密码重置)启动时不再执行 bootstrap auth check
  • 公共 auth 端点 401 错误时不再尝试 token refresh
  • token refresh skip 匹配改用 pathname,避免 query/fragment 干扰
  • 补全 ForcePasswordChangePage / ResetPasswordPage / InviteRegisterPage / AdminTeamDetailPage / TrashPage / ErrorPage 的 i18n namespace 加载
  • ShareViewPage 增加 tasks namespace

Statistics

  • 6 files changed, 133 insertions(+), 13 deletions(-)
  • 1 commit

Download

Platform Architecture Archive
Linux x86_64 aster_drive_v0.3.2_linux_x86_64.tar.gz
Linux x86 aster_drive_v0.3.2_linux_i686.tar.gz
Linux ARM64 aster_drive_v0.3.2_linux_aarch64.tar.gz
Linux ARMv7 aster_drive_v0.3.2_linux_armv7.tar.gz
Windows x86_64 aster_drive_v0.3.2_windows_x86_64.exe.zip
Windows x86 aster_drive_v0.3.2_windows_i686.exe.zip
Windows ARM64 aster_drive_v0.3.2_windows_arm64.zip
macOS x86_64 aster_drive_v0.3.2_macos_x86_64.tar.gz
macOS ARM64 aster_drive_v0.3.2_macos_aarch64.tar.gz

Extract with tar -xzf (Linux/macOS) or unzip (Windows).

Checksums: checksums.txt

Verify signatures

All release archives are signed with Sigstore cosign. To verify:

# Download checksums + signature + certificate
wget https://github.com/AsterCommunity/AsterDrive/releases/download/v0.3.2/{checksums.txt,checksums.txt.sig,checksums.txt.pem}

# Verify signature
cosign verify-blob checksums.txt \
  --signature checksums.txt.sig \
  --certificate checksums.txt.pem \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'github.com/AsterCommunity/AsterDrive'

# Verify archive integrity
sha256sum -c checksums.txt

AsterDrive v0.3.1

Choose a tag to compare

@github-actions github-actions released this 07 Jul 18:50
Immutable release. Only release title and notes can be modified.
v0.3.1
b51d3a3

Release Highlights

AsterDrive v0.3.10.3.0 系列的架构整理与性能打磨版本,主线是服务层领域模块化重组、WebDAV 性能与 HTTP 条件请求合规性提升、以及上传 finalize 路径契约化。 服务层从扁平的 *_service 文件重组为按领域嵌套的模块树(auth / files / share / user / mail / remote / workspace / preview / webdav / media 等),纯路径迁移不改 API 与 schema;WebDAV 落地 RFC 9110 条件请求(If-Match / If-None-Match / If-Modified-Since / If-Unmodified-Since)与 Last-Modified 响应,range 读取与大型 PROPFIND 显著提速,读写 DB 分离修复写后读一致性;上传 finalize 路径引入 VerifiedUploadedBlob 等不可变值对象,把 size / policy / path 校验与清理计划收敛到类型层。配套把 "managed ingress profile" 重命名为语义更清晰的 "remote storage target",远程存储策略可绑定到具体 target;本版本还顺带合并了贡献者提交的 SFTP 存储后端。

  • 服务层领域模块化重组 — 扁平 *_service 文件按领域嵌套为模块树,纯路径迁移,无 API / schema 变化
  • WebDAV 性能与合规性 — RFC 9110 条件请求与 Last-Modified 响应、range 读取与大型 PROPFIND 显著提速、读写 DB 分离修复写后读一致性、下载审计窗口合并
  • 上传 finalize 路径契约化VerifiedUploadedBlob / VerifiedTempStoreBlob 等不可变值对象收敛校验与清理计划,固化 complete 重试幂等与配额超限不扣配额不变量
  • 远程存储 target 化managed ingress profile 重命名为 remote storage target,远程策略绑定具体 target,旧 API 路径与配置 key 保留兼容(deprecated)
  • SFTP 存储后端 — 基于 russh,支持连接池、host key 强制固定(TOFU)、高效 range 读;纯服务端中继上传,不支持 presigned / multipart

Added

  • 远程节点 driver descriptor 发现

    • 新增 ManagedIngressDriverDescriptor 与字段 descriptor(Text / Secret / Boolean / Number + required / secret / label_key / placeholder / help_key),内置 local + S3 两个 driver 描述
    • 新 API 从远程节点拉取支持的 driver 描述,管理后台按当前 driver 动态渲染字段、显示 driver 专属 help / placeholder,选远程不支持的 driver 时给出校验错误
    • 远程内部协议版本 v4 → v5;RemoteStorageCapabilities 新增 managed_ingress 能力字段;v4 兼容层保留(MIN_SUPPORTED_PROTOCOL_VERSION 仍为 v4)
  • 远程存储策略绑定 target

    • storage_policies 表新增 remote_storage_target_key 列与索引;策略创建 / 更新时校验 target 已 applied 且无错误,非远程策略拒绝带 target key
    • 内部 / presigned 请求按策略指定的 target 路由,而非总走 binding 默认
    • 管理后台策略对话框新增 target 二级选择(loading / empty / error / hint),支持在策略表单内直接快速创建 target
  • 下载 disposition 参数 + resource-handle 端点

    • DownloadQuery 新增可选 dispositioninline / attachment),非法值返回校验错误;贯穿 personal / team / share 下载链路(空值 = attachment 旧行为,向后兼容)
    • 新端点 POST /api/v1/files/{id}/resource-handle 与 team 对应端点,返回 FileResourceHandleAuto 模式下为不可渲染图片(HEIC / RAW / TIFF)选派生 WebP 表示、HTML 等沙箱 MIME 强制同源
  • WebDAV HTTP 条件请求合规

    • 新增 src/utils/http_validators.rs 实现 RFC 9110 的 If-Match(强 ETag)/ If-None-Match(弱 ETag)/ If-Modified-Since / If-Unmodified-Since 求值与 header 优先级;GET / HEAD 响应携带 Last-Modified
  • WebDAV 下载审计合并

    • 新配置项 webdav_download_audit_coalesce_window_secs(默认 30s);同一账号 + 文件 + 请求类型(full / ranged)+ 客户端指纹(IP + User-Agent 的 SHA256)在窗口内的重复下载合并为一条审计记录,设为 0 表示每次都记录
  • SFTP 存储后端

    • 新增 DriverType::Sftp(持久化字符串 "sftp",sea-orm 以字符串存储,老库无需 migration),基于 russh 0.62.1 + russh-sftp 2.3.0
    • 连接池(默认 4,空闲 TTL 60s,获取超时 30s,RAII lease 归还)、强制 host key 固定(TOFU,未配置指纹直接拒绝并回传服务器实际 SHA256: 指纹)、高效 range 读(SFTP seek + take)
    • 上传走服务端中继流式,不支持 presigned / multipart / 浏览器直传——能力边界与 S3 不同

Changed

  • 服务层重组为领域模块(纯内部,无 API / schema 变化)

    • src/services/ 下扁平 *_service 文件 → 按领域嵌套模块树,绝大部分是 use 路径迁移
    • 新增 developer-docs/{en,zh-CN}/backend-service-ownership.md 服务层责任边界文档
  • 术语统一:managed ingress profile → remote storage target

    • API 端点 /ingress-profiles/storage-targets,旧路径保留为 deprecated 别名(计划于 0.4.0 移除)
    • 配置项 server.follower.managed_ingress_local_rootserver.follower.remote_storage_target_local_root,loader 同时接受新旧两个键;默认值 managed-ingressremote-storage-targets
    • 保留兼容项:API 错误码仍为 managed_ingress.*;审计日志 entity type / action 仍为 RemoteIngressProfile;wire protocol capabilities 仍用 managed_ingress 字段名
  • max_file_size 从 target 层上移到 policy 层

    • 删除 remote_storage_targets.max_file_size 列;改从请求的 max_file_size 签名查询参数读取(值来源于存储策略),负值 clamp 到 0
    • target 创建表单移除 max_file_size,target 卡片移除 revision 显示
  • WebDAV 读写 DB 分离与缓存精细化

    • resolve_path_cached_in_scope 拆 read / write 两变体:写操作(PUT / MKCOL / COPY / MOVE / DELETE / LOCK)走 writer_db(),读操作走 reader_db(),避免写后读命中过期缓存
    • 引入 CacheInvalidationTargets 支持 prefix + 定向 key 删除;文件夹变更改为定向删 key 而非全前缀刷;PROPFIND 只请求标准 live property 时跳过 dead property 与锁发现加载
  • WebDAV range 读与 PROPFIND 路径优化

    • 下载路径一次解析 file + blob + meta,消除重复 metadata 查询;流式块大小 16 KiB → 64 KiB
    • read_dir 去 N+1:直接用 file 记录构造目录项;ETag 改用结构化 file_etag,不再依赖 blob hash
    • 团队成员变更触发的 WebDAV auth 缓存失效改为 fire-and-forget(带重试 + 日志),不再阻塞成员操作
  • 上传 finalize 路径契约化(纯内部,无 API / 行为变化)

    • 新增 VerifiedUploadedBlob / VerifiedTempStoreBlob / VerifiedPreuploadedNondedupStoreBlob 不可变值对象,把 size / policy / path 校验与清理计划收敛到类型层
    • 新增回归测试固化不变量:complete 重试不重复扣配额、配额超限时 session 置 Failed 且不扣配额(错误码 E032
  • 前端 admin / 文件操作改造为插件可扩展

    • 新增 admin settings action / editor / invalidation / save-transaction 四个 registry;文件操作 fileActionRegistry(声明式 action descriptor,支持 builtin + plugin action)
    • AdminPoliciesPage 从 1595 行减到 235 行(抽 5 个 controller hook + 3 个工具模块);12 个 controller 迁移到通用 useManagedListQueryState / useManagedAdminList,减少约 800 行样板
  • S3 remote target 编辑强制输入 access_key

    • 新增 src/storage/field_contract.rs 统一 required / secret / boolean 字段语义;编辑 S3 remote target 时每次必须输入 access_keysecret_key 未变更时保留原值
    • 前端从硬编码 driver_type === "s3" 改为查 descriptor secretKeyField?.secret === true

Fixed

  • WebDAV 写后读一致性 — 写操作走 writer_db() 权威解析,新增测试覆盖 PUT / COPY / MOVE / LOCK / DELETE 后立即 GET / PROPFIND
  • 音乐播放 metadata 刷新打断播放 — track metadata 按 resource path 而非全对象做 key;跨域重定向资源跳过 range probe
  • WebDAV 团队归档 / 恢复后 auth 缓存陈旧 — 归档 / 恢复团队时失效 WebDAV auth 缓存
  • k6 基准测试 token 复用refreshSession 原本一直复用旧 refresh token;mixed-ramp.js / soak-mixed.js 每个 VU 改为单独 login()

Security

  • SFTP host key 强制固定 — 从盲信任意 host key 收紧到 TOFU + pin,防 MITM;未配置指纹时拒绝连接并回传服务器实际 SHA256: 指纹引导管理员确认
  • S3 remote target 编辑强制 access_key — 公开凭证每次必须输入,仅 secret_key 在未变更时保留原值
  • 负值 max_file_size 被拒normalize_storage_policy_max_file_size 拒绝负值
  • remote target 相对路径逃逸检测normalize_relative_local_target_path 检测路径逃逸段

Database Migrations

  • m20260704_000001_rename_managed_ingress_profiles_to_remote_storage_targets(表 / 列改名,可回滚)
  • m20260704_000002_add_remote_storage_target_key_to_storage_policies(加列 + 索引)
  • m20260705_000001_drop_remote_storage_target_max_file_size(删 max_file_size 列,改走策略查询参数)

Configuration Changes

  • server.follower.managed_ingress_local_rootserver.follower.remote_storage_target_local_root(loader 同时接受新旧 key,旧 key deprecated,计划于 0.4.0 移除)
  • 默认值 managed-ingressremote-storage-targets
  • 新增 webdav_download_audit_coalesce_window_secs(默认 30s,设为 0 表示每次下载都记录审计)

Statistics

  • 916 files changed, 45826 insertions(+), 17459 deletions(-)
  • 30 commits(含若干 [skip ci] 仓库迁移 / 测试镜像固定)
  • 3 个数据库 migration(自动执行,可回滚)
  • 新增后端驱动:1(SFTP)

Notes

  • v0.3.0 升级:3 个 DB migration 在启动时自动执行;API 旧路径 /ingress-profiles 与旧配置 key 保留兼容(deprecated),建议尽快迁移到 /storage-targets / remote_storage_target_local_root
  • SFTP 策略首次配置需走 host key TOFU 确认流程:未配 sftp_host_key_fingerprint 时连接测试会返回服务器实际 SHA256: 指纹,确认后写入即可
  • SFTP 后端为纯服务端中继,不支持 presigned / multipart / 浏览器直传,能力边界与 S3 不同
  • 远程内部协议 v4 → v5:MIN_SUPPORTED_PROTOCOL_VERSION 仍为 v4,旧 follower 靠兼容层继续工作;primary + follower 混合部署建议一并升级
  • Docker 用户建议使用 v0.3.1 / stable / latest 镜像标签

Download

Platform Architecture Archive
Linux x86_64 aster_drive_v0.3.1_linux_x86_64.tar.gz
Linux x86 aster_drive_v0.3.1_linux_i686.tar.gz
Linux ARM64 aster_drive_v0.3.1_linux_aarch64.tar.gz
Linux ARMv7 aster_drive_v0.3.1_linux_armv7.tar.gz
Windows x86_64 aster_drive_v0.3.1_windows_x86_64.exe.zip
Windows x86 aster_drive_v0.3.1_windows_i686.exe.zip
Windows ARM64 aster_drive_v0.3.1_windows_arm64.zip
macOS x86_64 aster_drive_v0.3.1_macos_x86_64.tar.gz
macOS ARM64 aster_drive_v0.3.1_macos_aarch64.tar.gz

Extract with tar -xzf (Linux/macOS) or unzip (Windows).

Checksums: checksums.txt

Verify signatures

All release archives are signed with Sigstore cosign. To verify:

# Download checksums + signature + certificate
wget https://github.com/AsterCommunity/AsterDrive/releases/download/v0.3.1/{checksums.txt,checksums.txt.sig,checksums.txt.pem}

# Verify signature
cosign verify-blob checksums.txt \
  --signature checksums.txt.sig \
  --certificate checksums.txt.pem \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'github.com/AsterCommunity/AsterDrive'

# Verify archive integrity
sha256sum -c checksums.txt

AsterDrive v0.3.0

Choose a tag to compare

@github-actions github-actions released this 22 Jun 16:26
Immutable release. Only release title and notes can be modified.
v0.3.0
a1035f3

Release Highlights

AsterDrive 0.3.0 正式发布。v0.3.0 beta / RC 线(Azure Blob 与 OneDrive 驱动、统一 StorageConnector 抽象、对象存储术语统一与凭据脱敏、内联预览走预签名直链、审计日志无限期保留等)基础上,本版本收口公开分享预览的缓存稳定性与 CI 构建流水线,把 0.3.0 系列从 RC 阶段推进到稳定发布。

  • 预览资源缓存身份稳定化 — 公开分享预览响应返回 canonical ETag(blob hash),前端按 stable identity 复用 blob / text 缓存,跨过期 preview token 共享同一份资源
  • 条件请求 no longer 触发 CORS 预检If-None-Match 条件请求留在 same-origin,不再 302 到预签名对象存储 URL
  • CI 前端构建独立化 — GitHub Actions 把前端构建拆成独立 build-frontend job,下游 build / integration-backends 通过 artifact 下载产物,避免重复构建与 Rust cache 污染
  • 依赖升级react-image-crop 11.0.10 → 11.1.2,@typescript/native-preview 升至 7.0.0-dev.20260622.1

Added

  • 预览资源 stable identity 类型
    • 前端新增 ResourceRequest 类型区分 cacheKey / etag / requestPath,新增 resourceCacheKey / resourceRequestPath / resourceCanonicalEtag 辅助函数集中处理
    • useBlobUrl / useTextContent 按 stable identity 缓存,提供 canonical ETag 时跳过 If-None-Match 条件请求
    • 各预览组件(BlobImagePreview / PdfPreview / CsvTablePreview / JsonPreview / MarkdownPreview / TextCodePreview / XmlPreview / FilePreviewBody / ImagePreviewPanel)接受 ResourcePath(string | ResourceRequest
    • PreviewLinkInfo 新增 canonical etag 字段(blob hash),公开分享预览响应携带稳定身份
    • 新增 resourceRequest / useBlobUrl / useTextContent 单元测试覆盖 cache key 回落与条件重验证逻辑

Changed

  • 条件请求 same-origin 收敛

    • file_service::download::build 在 presigned redirect 前拒绝条件请求(If-None-Match),避免浏览器跨 origin 携带条件触发 CORS 预检
    • preview_link_service 在响应中携带 canonical ETag,供前端复用缓存
  • CI 前端构建独立 job

    • rust.yml 新增 build-frontend job 单独构建前端并上传 artifact,build / integration-backends 改为 needs: build-frontend 并通过 download-artifact 拉取 frontend-panel/dist
    • 移除原先散落在 build / integration-backends 中的 Setup bunBuild frontend 步骤,避免 Rust cache 被前端产物污染
  • 预览组件路径类型统一

    • 前端预览组件从内联类型定义改为导入公共 ResourcePath 类型,测试中的 mock helper 收敛到 resourceCacheKey / resourceCanonicalEtag 工具
  • 依赖升级

    • react-image-crop 11.0.10 → 11.1.2
    • @typescript/native-preview 升至 7.0.0-dev.20260622.1

Fixed

  • OverviewRecentEventsSection 表格列改为固定宽度 + max-w-0 截断,修复内容过长时列宽抖动

Notes

  • 本版本为 0.3.0 系列正式发布版
  • v0.3.0-rc.2 升级到 v0.3.0 没有新增数据库 migration
  • 生产配置 schema 未新增必需项
  • Docker 用户建议使用 v0.3.0stablelatest 镜像标签;edge 继续保留给后续预发布版本
  • 统计数据:31 files changed, 923 insertions(+), 174 deletions(-)
  • 本次范围共 2 个提交

Download

Platform Architecture Archive
Linux x86_64 aster_drive_v0.3.0_linux_x86_64.tar.gz
Linux x86 aster_drive_v0.3.0_linux_i686.tar.gz
Linux ARM64 aster_drive_v0.3.0_linux_aarch64.tar.gz
Linux ARMv7 aster_drive_v0.3.0_linux_armv7.tar.gz
Windows x86_64 aster_drive_v0.3.0_windows_x86_64.exe.zip
Windows x86 aster_drive_v0.3.0_windows_i686.exe.zip
Windows ARM64 aster_drive_v0.3.0_windows_arm64.zip
macOS x86_64 aster_drive_v0.3.0_macos_x86_64.tar.gz
macOS ARM64 aster_drive_v0.3.0_macos_aarch64.tar.gz

Extract with tar -xzf (Linux/macOS) or unzip (Windows).

Checksums: checksums.txt

Verify signatures

All release archives are signed with Sigstore cosign. To verify:

# Download checksums + signature + certificate
wget https://github.com/AsterCommunity/AsterDrive/releases/download/v0.3.0/{checksums.txt,checksums.txt.sig,checksums.txt.pem}

# Verify signature
cosign verify-blob checksums.txt \
  --signature checksums.txt.sig \
  --certificate checksums.txt.pem \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'github.com/AptS-1547/AsterDrive'

# Verify archive integrity
sha256sum -c checksums.txt

AsterDrive v0.3.0-rc.2

Pre-release

Choose a tag to compare

@github-actions github-actions released this 22 Jun 13:00
Immutable release. Only release title and notes can be modified.
v0.3.0-rc.2
786fb0f

Release Highlights

AsterDrive 0.3.0-rc.2 是 0.3.0 发布候选线的预览体验与审计保留补强版本,主线是内联预览走对象存储预签名直链与审计日志无限期保留。 Inline 预览(图片 / 视频 / 音频 / PDF / Markdown / 代码 / 表格 / JSON / XML 等)在策略允许且 MIME 不需要 same-origin CSP sandbox 时直接 302 到对象存储预签名 URL,不再由服务端统一加 CSP 与缓存头转流,降低服务端带宽与转发延迟;公开分享预览(preview link)下载路径切换到统一下载出口以同样享受预签名。前端 apiUrl 把后端 API origin 的 URL 从「外部资源」中排除并新增 shouldSendResourceCredentials——预签名 URL 落在对象存储 origin 时不会携带会话凭据,避免 CORS 预检失败与凭据外泄;各预览组件 path 改为可空,加载期间显示 loading 占位。审计日志保留期 audit_log_retention_days 设为 0 时跳过自动清理,实现永久保留。

  • Inline 预览走预签名直链 — 策略允许且 MIME 不需 same-origin sandbox 时 inline 预览直接 302 到对象存储预签名 URL,preview link 同步切换到统一下载出口
  • CORS 安全的凭据处理 — 后端 API origin 的 URL 不再被前端误判为外部资源,新增 shouldSendResourceCredentials 集中判断;预签名 URL 属于对象存储 origin 时不携带会话凭据
  • 审计日志无限期保留audit_log_retention_days = 0 跳过自动清理,i18n 文案补充「设为 0 表示永久保留」
  • 存储操作审计文案补全 — 新增「管理员触发存储操作」i18n 文案(en / zh)

Added

  • 审计日志无限期保留
    • audit_service::cleanup_expiredretention_days <= 0 时跳过清理并返回 0,管理员可将 audit_log_retention_days 设为 0 实现永久保留
    • settings-operations i18n 文案补充「设为 0 表示永久保留,不自动清理」
    • 新增 audit_action_admin_trigger_storage_action i18n 文案(en / zh)覆盖存储操作审计
    • 新增 test_audit_cleanup_retention_zero_keeps_logs 集成测试断言 365 天前的记录在 retention=0 时仍被保留

Changed

  • Inline 预览走预签名直链

    • file_service::download::buildshould_presign 从「仅 Attachment」改为「除需 same-origin CSP sandbox 的 inline MIME 类型外均走 presigned redirect」;build_presigned_redirect_outcome 接受 disposition 参数,content-disposition 不再硬编码 Attachment
    • preview_link_service::download_file 由直接调用 build_stream_outcome_with_disposition_and_range 改为 build_download_outcome_with_disposition_and_range,公开分享预览同样享受预签名
    • 前端新增 useContentPreviewResourcePath hook:存在 previewLinkFactory 时优先解析 preview link 路径,否则回落 downloadPath
    • 前端各预览组件(PdfPreview / BlobImagePreview / MusicPreview / VideoPreview / MarkdownPreview / CsvTablePreview / XmlPreview / JsonPreview / TextCodePreview)从 downloadPath 切换到 contentPreviewPathpath 改为可空并在加载期间显示 loading
    • tests/test_upload.rs 中 direct-link inline presigned 测试断言改为 302 redirect + Cache-Control: no-store + Location 携带 response-content-disposition
  • 前端资源凭据判断收紧

    • apiUrl.ts 新增 isConfiguredApiUrl 判断 URL 是否属于后端 API origin;isExternalResourceUrl 不再把后端 API URL 当作外部资源
    • 新增 shouldSendResourceCredentials(path):仅在「非外部资源且非公开资源」时携带会话凭据,authenticatedResource 改用该判断
    • 预签名 URL 落在对象存储 origin(与 API origin 不同)时不会被携带凭据,避免 CORS 预检失败与凭据泄露
  • S3 / MinIO / R2 文档补全

    • docs/storage/s3-minio-r2.mddocs/en/storage/s3-minio-r2.md 补全内联预览走预签名直链所需的 CORS 与凭据配置说明

Statistics

  • 35 files changed, 1641 insertions(+), 116 deletions(-)
  • 3 commits

Download

Platform Architecture Archive
Linux x86_64 aster_drive_v0.3.0-rc.2_linux_x86_64.tar.gz
Linux x86 aster_drive_v0.3.0-rc.2_linux_i686.tar.gz
Linux ARM64 aster_drive_v0.3.0-rc.2_linux_aarch64.tar.gz
Linux ARMv7 aster_drive_v0.3.0-rc.2_linux_armv7.tar.gz
Windows x86_64 aster_drive_v0.3.0-rc.2_windows_x86_64.exe.zip
Windows x86 aster_drive_v0.3.0-rc.2_windows_i686.exe.zip
Windows ARM64 aster_drive_v0.3.0-rc.2_windows_arm64.zip
macOS x86_64 aster_drive_v0.3.0-rc.2_macos_x86_64.tar.gz
macOS ARM64 aster_drive_v0.3.0-rc.2_macos_aarch64.tar.gz

Extract with tar -xzf (Linux/macOS) or unzip (Windows).

Checksums: checksums.txt

Verify signatures

All release archives are signed with Sigstore cosign. To verify:

# Download checksums + signature + certificate
wget https://github.com/AsterCommunity/AsterDrive/releases/download/v0.3.0-rc.2/{checksums.txt,checksums.txt.sig,checksums.txt.pem}

# Verify signature
cosign verify-blob checksums.txt \
  --signature checksums.txt.sig \
  --certificate checksums.txt.pem \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'github.com/AptS-1547/AsterDrive'

# Verify archive integrity
sha256sum -c checksums.txt

AsterDrive v0.3.0-rc.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Jun 20:14
Immutable release. Only release title and notes can be modified.
v0.3.0-rc.1
cdb4c2c

Release Highlights

AsterDrive 0.3.0-rc.1 是 0.3.0 系列的发布候选版本,主线是存储策略术语统一与凭据安全加固。 将面向 S3 命名的策略字段统一为通用对象存储术语(s3_upload_strategyobject_storage_upload_strategy 等,serde alias 保留旧名向后兼容),Microsoft Graph 的 client secret / token 用 secrecy::SecretString 包装并在所有持有凭据的类型上手动实现 Debug 确保日志脱敏;reverse tunnel stream lane 在离线 / 关闭 / 超时时自动回退 poll 模式而非直接失败。

  • 存储策略术语统一(Object Storage,向后兼容) — S3 专属字段名改为通用对象存储命名,旧名通过 serde alias 与前端 legacy fallback 继续可用
  • 凭据安全加固 — Microsoft Graph client secret / token 用 SecretString 包装,相关 entity 与 provider 手动实现 Debug 保证日志脱敏
  • Reverse tunnel 可靠性 — stream lane 离线 / 关闭 / 超时自动回退 poll 请求
  • OneDrive / Azure Blob 文档补完 — admin API 与存储后端文档补齐新驱动说明

Changed

  • 存储策略术语统一(Breaking,向后兼容)

    • StoragePolicyOptions JSON 字段 s3_upload_strategy / s3_download_strategyobject_storage_upload_strategy / object_storage_download_strategy,旧名通过 #[serde(alias = "...")] 与前端 legacy fallback 继续可用
    • enum 类型 S3UploadStrategy / S3DownloadStrategyObjectStorageUploadStrategy / ObjectStorageDownloadStrategy(Rust + OpenAPI + 前端 types),枚举值 relay_stream / presigned 不变
    • connector capability s3_transfer_strategyobject_storage_transfer_strategy
    • 前端管理面板文案从"S3 上传 / 下载方式"改为"对象存储上传 / 下载方式"
  • OneDrive 授权请求体收紧

    • POST /admin/policies/{id}/storage-authorization/start 仅接受 { "provider": "microsoft_graph" },Client ID / Secret / tenant / scopes 必须先保存到 application_config.microsoft_graph

Security

  • 新增 secrecy = "0.10" 依赖,Microsoft Graph client_secret / refresh_token / access_tokenSecretString 包装,仅在调用 Microsoft Graph 时通过 expose_secret() 取出
  • storage_policy / managed_follower / master_binding / managed_ingress_profile entity 与所有 Microsoft Graph token provider / request 类型手动实现 Debug,日志中 access_key / secret_key 显示为 ***REDACTED***,每个类型带单元测试断言不泄露明文

Fixed

  • reverse tunnel stream lane 在 reverse tunnel is offline / lane closed / response channel closed / 流式等待超时时自动回退 poll 请求,此前直接失败
  • RenameDialog 重命名提交期间禁用按钮并用 ref 守卫,防止用户快速重复点击触发多次重命名请求

Statistics

  • 109 files changed, 1808 insertions(+), 691 deletions(-)
  • 3 commits

Download

Platform Architecture Archive
Linux x86_64 aster_drive_v0.3.0-rc.1_linux_x86_64.tar.gz
Linux x86 aster_drive_v0.3.0-rc.1_linux_i686.tar.gz
Linux ARM64 aster_drive_v0.3.0-rc.1_linux_aarch64.tar.gz
Linux ARMv7 aster_drive_v0.3.0-rc.1_linux_armv7.tar.gz
Windows x86_64 aster_drive_v0.3.0-rc.1_windows_x86_64.exe.zip
Windows x86 aster_drive_v0.3.0-rc.1_windows_i686.exe.zip
Windows ARM64 aster_drive_v0.3.0-rc.1_windows_arm64.zip
macOS x86_64 aster_drive_v0.3.0-rc.1_macos_x86_64.tar.gz
macOS ARM64 aster_drive_v0.3.0-rc.1_macos_aarch64.tar.gz

Extract with tar -xzf (Linux/macOS) or unzip (Windows).

Checksums: checksums.txt

Verify signatures

All release archives are signed with Sigstore cosign. To verify:

# Download checksums + signature + certificate
wget https://github.com/AsterCommunity/AsterDrive/releases/download/v0.3.0-rc.1/{checksums.txt,checksums.txt.sig,checksums.txt.pem}

# Verify signature
cosign verify-blob checksums.txt \
  --signature checksums.txt.sig \
  --certificate checksums.txt.pem \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'github.com/AptS-1547/AsterDrive'

# Verify archive integrity
sha256sum -c checksums.txt

AsterDrive v0.3.0-beta.2

Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Jun 16:06
Immutable release. Only release title and notes can be modified.
v0.3.0-beta.2
8a3341e

Release Highlights

AsterDrive 0.3.0-beta.2 是 0.3.0 beta 线的稳定性与错误处理打磨版本,主线是连接器抽象的健壮性收口与 OneDrive 授权流程修正。 全面将 panic 路径(expect/unwrap)替换为 Result 错误传播,统一存储连接测试的诊断返回(从成功响应 payload 迁移到 error metadata);OneDrive 授权改为"先保存凭据再授权",draft 策略连接测试支持复用已保存凭据;各 service 缓存逻辑下沉到独立 cache 子模块。

  • 错误处理健壮性收口expect/unwrap 全面替换为 Result,multipart 读取失败映射 BAD_REQUEST,connector 注册缺失改为显式错误而非静默回退 local
  • 存储连接测试 API 契约统一 — 诊断信息从成功响应 payload 迁移到 ApiErrorInfo.diagnostic,前端从 ApiError.diagnostic 读取
  • OneDrive 授权流程修正 — 授权请求只发 provider type,要求先保存凭据变更才能发起授权
  • draft 策略凭据复用 — 连接测试可选 policy_id,空白凭据字段复用已保存凭据(S3 / Azure Blob / Tencent COS)
  • cache 模块抽取 — 各 service 缓存逻辑下沉到独立 cache 子模块

Added

  • draft 策略凭据复用
    • 连接测试端点新增可选 policy_id,S3 / Azure Blob / Tencent COS 在凭据字段为空时复用已保存凭据,管理员改配置时无需重输敏感信息

Changed

  • 错误处理重构

    • CORS、加密、shutdown handler、CLI 序列化、时间/时区运算、内存 mail sender mutex 中毒等 panic 路径替换为 Result 传播与日志降级
    • signal handler 安装失败不再 panic;archive preview / offline download / WOPI discovery client 构建失败由静默 fallback 改为错误传播
    • connector_or_local 静默回退 local 改为 connector_or_registered 显式报错;故意不可达分支加 #[allow(clippy::expect_used)] 标注不变式
  • 存储连接测试 API 契约统一

    • 移除 StoragePolicyProbeResultprobe_connection* 端点,改用标准错误响应携带 ApiErrorInfo.diagnostic
    • 新增 ApiErrorDiagnostic schema,对外暴露 message / kind,api_code / retryable 内部保留
    • 前端连接测试从 ApiError.diagnostic 读取失败原因
  • OneDrive 授权流程

    • 授权请求不再携带 draft Microsoft Graph 凭据,仅发送 provider type,后端复用已保存 application_config
    • 凭据变更后必须先保存才能发起授权
  • 连接器 descriptor 配置

    • driver-type 条件分支改为显式 input struct(ObjectStorageConnectorDescriptorInput / ObjectStorageFieldDescriptorInput
    • descriptor UI 逻辑从集中函数下沉到各 connector;multipart ETag 要求改为显式 input 字段
  • cache 模块抽取

    • admin / auth / folder / passkey / preview link / share stream / stream ticket / workspace scope / WebDAV auth / WebDAV path resolver 的缓存操作下沉到独立 cache 子模块,补全作用域与失效测试
    • share_stream marker 编码移入 cache 模块,reserve_count_marker / store_count_marker 改为 Result 传播
  • 依赖升级

    • actix-web 4.13.0 → 4.14.0、actix-multipart 0.7.2 → 0.8.0、actix-http 3.12.1 → 3.13.0、actix-multipart-derive 0.7.0 → 0.8.0
    • derive_more 统一为 2.1.1、foldhash 0.2.0、impl-more 0.3.1;parse-size 替换为 bytesize 2.4.0
    • 前端 @typescript/native-preview 升至 7.0.0-dev.20260621.1

Fixed

  • multipart 上传读取失败(UploadFieldReadFailed / AvatarUploadReadFailed)映射为 BAD_REQUEST,此前为 500
  • offline download 循环在 shutdown 信号下不再静默中断,改为返回 transient 错误
  • WOPI discovery client 构建失败不再回退 reqwest::Client::new,改为传播错误

Statistics

  • 114 files changed, 3665 insertions(+), 1347 deletions(-)
  • 4 commits

Download

Platform Architecture Archive
Linux x86_64 aster_drive_v0.3.0-beta.2_linux_x86_64.tar.gz
Linux x86 aster_drive_v0.3.0-beta.2_linux_i686.tar.gz
Linux ARM64 aster_drive_v0.3.0-beta.2_linux_aarch64.tar.gz
Linux ARMv7 aster_drive_v0.3.0-beta.2_linux_armv7.tar.gz
Windows x86_64 aster_drive_v0.3.0-beta.2_windows_x86_64.exe.zip
Windows x86 aster_drive_v0.3.0-beta.2_windows_i686.exe.zip
Windows ARM64 aster_drive_v0.3.0-beta.2_windows_arm64.zip
macOS x86_64 aster_drive_v0.3.0-beta.2_macos_x86_64.tar.gz
macOS ARM64 aster_drive_v0.3.0-beta.2_macos_aarch64.tar.gz

Extract with tar -xzf (Linux/macOS) or unzip (Windows).

Checksums: checksums.txt

Verify signatures

All release archives are signed with Sigstore cosign. To verify:

# Download checksums + signature + certificate
wget https://github.com/AsterCommunity/AsterDrive/releases/download/v0.3.0-beta.2/{checksums.txt,checksums.txt.sig,checksums.txt.pem}

# Verify signature
cosign verify-blob checksums.txt \
  --signature checksums.txt.sig \
  --certificate checksums.txt.pem \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'github.com/AptS-1547/AsterDrive'

# Verify archive integrity
sha256sum -c checksums.txt

AsterDrive v0.3.0-beta.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Jun 19:25
Immutable release. Only release title and notes can be modified.
v0.3.0-beta.1
e8c4ad1

Release Highlights

AsterDrive 0.3.0-beta.1 是 0.3.0 系列的第一个 beta 版本,主线是存储后端扩展与连接器抽象统一。 本版本新增 Azure Blob Storage 与 OneDrive(含 SharePoint site / Group drive)两类云盘驱动,引入统一的 StorageConnector 抽象让六个驱动以一致的 descriptor 暴露能力与表单字段;OneDrive 凭据走 Microsoft Graph OAuth + PKCE,token 用 HKDF 派生密钥 + AES-256-GCM 加密落库。缓存后端精简为 memory / Redis 两种并移除已失效的 cache.enabled 开关,Redis 引入本地 memory 二级回退;存储策略连接探测改为结构化诊断端点,失败返回 200 + 脱敏原因。同时补全审计日志结构化详情、Tencent COS CORS 一键配置、PWA precache 重构与 toast 视觉重做。

  • Azure Blob Storage 驱动 — Block Blob CRUD、SAS URL 预签名上传/下载、分块上传
  • OneDrive 驱动 + OAuth 凭据管理 — personal / work_or_school / SharePoint site / group drive,PKCE 流程,>250MiB 分块续传
  • StorageConnector 统一抽象 — 六驱动统一 descriptor、字段与上传工作流,新增 /admin/policies/storage-drivers
  • 缓存后端精简与 Redis 二级回退(Breaking) — 移除 cache.enabled,Redis 故障时回落 memory
  • 存储策略诊断端点 — 结构化 StoragePolicyDiagnostic,SAS / account key 脱敏
  • 审计日志结构化 — 文件 / 用户 / 策略 / 会话操作补全上下文
  • Tencent COS CORS 自动配置 — 从 public_site_url 派生多 origin,一键应用
  • PWA precache 与 toast 重做 — glob 化预缓存清单 + 预算告警,toast 主题化

Added

  • Azure Blob Storage 驱动

    • 新增 azure_blob driver type,完整 CRUD、SAS URL 预签名上传 / 下载、Block Blob 分块上传
    • InitUploadResponse 新增 presigned_require_etag 字段;presigned_put_requires_etag trait 方法区分驱动(Azure Blob = false,S3 / remote = true)
    • AzureBlobConfigError:生产环境 SAS spr 协议限 https,loopback / Azurite 放行 https + http
    • 前端表单字段改为 Storage Account Name / Key,预签名请求附带 x-ms-blob-type: BlockBlob
  • OneDrive 驱动与 OAuth 凭据管理

    • 新增 onedrive driver type + OneDriveAccountMode(personal / work_or_school / sharepoint_site / group_drive)
    • 7 个 onedrive_* 策略字段;Microsoft Graph OAuth + PKCE 授权流程
    • token 与 client secret 用 auth.storage_credential_secret_key 经 HKDF 派生 + AES-256-GCM 加密落库
    • 250MiB 走 Graph 原生分块上传 session

    • 驱动根动态解析(personal / work / site / group)
    • 前端凭据面板含授权状态徽章、授权 / 回调入口
  • StorageConnector 统一抽象与驱动 descriptor

    • 引入 StorageConnector trait + StorageConnectorDescriptor,六驱动统一暴露 capabilities / fields / upload workflows / actions
    • 新增 GET /admin/policies/storage-drivers 端点;前端用 TTL 缓存的 descriptor 取代 driver-type 字符串判断
    • 新增 ProviderResumableUploadDriver trait(OneDrive / Graph 原生断点续传)
    • 新增 DB 表 storage_connector_application_configs,Microsoft Graph app 配置从 policy key 字段迁移到 connector application config
  • 存储策略诊断端点

    • 连接探测返回结构化 StoragePolicyDiagnostic(api_code / kind / message / retryable)
    • 探测失败改为 200 + ok:false 而非 4xx
    • SAS token、account key 在响应中脱敏
  • Tencent COS CORS 自动配置

    • 新增 POST /admin/policies/actionPOST /admin/policies/{id}/actionStoragePolicyActionType 可扩展动作枚举
    • configure_tencent_cos_corspublic_site_url 派生多 origin,仅替换 ID 为 asterdrive-presigned-access 的规则
    • 草稿动作支持复用已保存 policy 凭据
    • 触发审计日志
  • 审计日志结构化详情

    • 用户管理、存储策略、团队、会话撤销等操作补全审计快照与展示文案
    • 文件 / 文件夹操作补全 location 与 transfer 路径细节
    • 标签批量操作、MFA 挑战、passkey 登录、WebDAV、WOPI 改为结构化详情
    • 新增 ShareDeleteAuditDetailsUserMfaManageAuditDetailsExternalAuthUnlinkAuditDetails 等 struct

Changed

  • 缓存后端精简(Breaking)

    • 移除 cache.enabled 配置项与 noop cache backend,仅保留 memory / Redis
    • CacheBackend trait 新增 take_bytes / delete_many
    • Redis 引入二级回退:Redis 失败或熔断时落本地 MemoryCache,恢复后清理影子条目
    • 抽出 RedisClient trait + FakeRedisClient 测试替身
  • 存储策略前端判断重构

    • 移除 isS3CompatibleDriver / isOneDriveDriver / isObjectStorageDriver,改 field-presence 检测
    • POLICY_OPTION_SERIALIZERS 替换为 buildPolicyOptionsFallback,仅写非默认值
  • 上传会话字段统一(DB 迁移自动处理)

    • 重命名 s3_temp_keyobject_temp_keys3_multipart_idobject_multipart_id
    • S3_MULTIPART_MIN_PART_SIZEOBJECT_MULTIPART_MIN_PART_SIZE
    • OneDrive 凭据存储从 storage_policies.access_key / secret_key 迁移到 storage_connector_application_configs,旧字段自动清空(代码兼容旧字段回退读取)
  • PWA precache 与 toast 重做

    • vite-plugin-pwa 改用 glob 通配 + 关键资源校验,移除手动 precache 清单与 forbidden 列表
    • 预缓存预算软告警:entries ≤450、raw size ≤5MB;排除 admin / file browser / music player / PDF / office 等大模块
    • pwaWarmup 区分 user / admin 路由独立追踪
    • Toaster 主题化(oklch、backdrop-blur、4.2s 时长、i18n.dir 方向)
  • 审计日志穷举化

    • detail_message 通配分支改为穷举 match,防止新增 action 被静默遗漏
    • mfa_factor_repo::list_for_user 泛化为 ConnectionTrait,支持事务内调用
  • 依赖升级

    • Rust:sea-orm 2.0.0-rc.41、aws-sdk-s3 1.137、h2 0.4.15
    • 前端:@base-ui/react 1.6、axios 1.18、react-router-dom 7.18、tailwindcss 4.3.1、biome 2.5、@types/node 26、@typescript/native-preview 7.0.0-dev.20260620.1

Fixed

  • PWA precache 大小写敏感漏排除
    • 大小写敏感文件系统漏排除补全:新增 assets/**/*admin*assets/**/*musicPlayer* 小写 / camelCase 变体

Security

  • OneDrive OAuth token 与 Client Secret 用 HKDF 派生密钥 + AES-256-GCM 加密落库,API 与审计只暴露 client_secret_configured 布尔状态
  • 存储策略连接诊断在响应中脱敏 SAS token 与 account key
  • OneDrive 创建 / 更新策略时清空 legacy storage_policies.access_key / secret_key 字段,避免明文 secret 长期驻留

Database Migrations

  • 新增 m20260612_000001storage_policy_credentialstorage_policy_authorization_flow 表(OneDrive OAuth token 加密存储)
  • 新增 m20260620_000001:3 个 JSON 列 backfill {} 并强制 NOT NULL(跨 MySQL / SQLite / PostgreSQL)

Configuration Changes

  • 移除 cache.enabled(Breaking) — 缓存开关已失效,仅保留 memory / Redis 两种 backend;已有配置中的 cache.enabled 字段不再生效
  • 新增 auth.storage_credential_secret_key — OneDrive / 后续 OAuth 驱动的凭据加密主密钥(缺失时启动自动生成)
  • 新增 OneDrive 策略字段:onedrive_account_modeonedrive_tenantonedrive_site_idonedrive_drive_idonedrive_group_idonedrive_scopes

Statistics

  • 316 files changed, 36108 insertions(+), 3381 deletions(-)
  • 9 commits

Download

Platform Architecture Archive
Linux x86_64 aster_drive_v0.3.0-beta.1_linux_x86_64.tar.gz
Linux x86 aster_drive_v0.3.0-beta.1_linux_i686.tar.gz
Linux ARM64 aster_drive_v0.3.0-beta.1_linux_aarch64.tar.gz
Linux ARMv7 aster_drive_v0.3.0-beta.1_linux_armv7.tar.gz
Windows x86_64 aster_drive_v0.3.0-beta.1_windows_x86_64.exe.zip
Windows x86 aster_drive_v0.3.0-beta.1_windows_i686.exe.zip
Windows ARM64 aster_drive_v0.3.0-beta.1_windows_arm64.zip
macOS x86_64 aster_drive_v0.3.0-beta.1_macos_x86_64.tar.gz
macOS ARM64 aster_drive_v0.3.0-beta.1_macos_aarch64.tar.gz

Extract with tar -xzf (Linux/macOS) or unzip (Windows).

Checksums: checksums.txt

Verify signatures

All release archives are signed with Sigstore cosign. To verify:

# Download checksums + signature + certificate
wget https://github.com/AsterCommunity/AsterDrive/releases/download/v0.3.0-beta.1/{checksums.txt,checksums.txt.sig,checksums.txt.pem}

# Verify signature
cosign verify-blob checksums.txt \
  --signature checksums.txt.sig \
  --certificate checksums.txt.pem \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'github.com/AptS-1547/AsterDrive'

# Verify archive integrity
sha256sum -c checksums.txt

AsterDrive v0.3.0-alpha.5

Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Jun 11:41
Immutable release. Only release title and notes can be modified.
v0.3.0-alpha.5
d909c32

Release Highlights

AsterDrive 0.3.0-alpha.5 是 0.3.0 系列的第五个预发布版本,聚焦安全加固、文件夹级存储策略绑定、激活流程防枚举以及只读浏览/分享归档下载体验。 本版本将公开分享密码 Cookie、公共直链、预览链接和分享流式播放会话从 auth.jwt_secret 拆分到专用 HMAC 密钥,并在 WebDAV 路径、XML 解析、上传大小校验、分享下载并发等多处加固边界检查;新增文件夹级存储策略绑定(管理员独占)与策略继承解析;激活邮件重发改为防账号枚举的统一响应;文件浏览器引入只读模式并支持分享归档下载;上传重试、缩略图懒加载与 i18n 分包拆分进一步优化前端性能。

  • 认证与公开链接密钥隔离(Breaking) — 新增 share_cookie_secretdirect_link_secret,拆分直链/预览/流式播放 token 验签
  • 文件夹级存储策略绑定 — 管理员可绑定/清除文件夹策略,上传走最近祖先策略,完整继承解析
  • 激活重发防枚举流程 — 登录与激活重发统一响应、强制时延、按结果细分指标
  • 分享归档下载与只读浏览FileBrowserProvider 只读模式、/s/{token}/archive-download 端点、下载限额与中断回滚
  • 多模块安全加固 — XXE 防护、WebDAV 路径规范化、锁数量限额、分享 Cookie 绑定客户端、上传实际大小校验
  • schema drift 检测 — SeaORM 实体与迁移产物的列定义跨 SQLite/Postgres/MySQL 一致性校验
  • 前端性能优化 — i18n 按需分包、登录后 PWA 预热路径、缩略图视窗内拉取、上传重试去抖

Added

  • 文件夹级存储策略绑定

    • 新增 PUT /api/v1/admin/folders/{id}/policy 端点(管理员独占),设置或清除文件夹策略绑定
    • 策略继承解析:文件夹继承最近祖先的显式策略,回落至用户/团队策略组
    • 上传服务沿文件夹层级解析有效策略
    • 审计日志新增 folder_policy_change 动作(记录原策略 ID 和新策略 ID)
    • 访问控制:仅管理员可设置/清除文件夹策略;普通 PATCH 请求拒绝 policy_id 字段
    • 校验:拒绝不可用策略、锁定/已删除文件夹和断裂的层级链
    • 前端 FolderPolicyDialog 组件(策略选择、继承可视化、有效策略提示)
    • 仅管理员可见的右键菜单入口与对话框预加载
  • 激活重发防枚举流程

    • 新增 ActivationResendRequestPanel 组件(登录表单内入口、不暴露账号是否存在)
    • 邮箱字段自动从登录标识符填充
    • 后端引入 RegisterActivationResendOutcome 枚举(Sent / EmailNotFound / AlreadyActive / AccountDisabled / Cooldown / EmailPolicyRejected)
    • 通过 record_auth_event 按 outcome 发出结构化指标,外部仅看到通用 200 响应
    • 邮件策略拒绝时返回通用 200 而非 400,避免泄漏账号状态
    • apply_auth_mail_response_floorsetup/register/login 强制最小响应时延,缓解时序枚举攻击
    • 登录失败统一收敛为 auth.credentials_failed(凭据错误、待激活、账号禁用同响应)
    • 引入 LoginFailureReason 枚举保留内部上下文用于指标,不写入 API 响应
  • 分享归档下载(共享 ZIP)

    • 新增 POST /s/{token}/archive-downloadGET /s/{token}/archive-download/{ticket} 端点
    • stream_ticket_service 新增 SharedArchiveDownload 票据类型
    • task_service::archive::selection 新增 prepare_shared_archive_downloadstream_shared_archive_download
    • 新增 archive_download_user_enabledarchive_download_share_enabled 运行时配置开关
    • 新增 API 错误码 ArchiveDownloadUserDisabledArchiveDownloadShareDisabled
    • 分享下载额度与归档下载共用:创建/消费票据时预留与回滚下载计数,客户端中断流式传输时自动回滚
  • 文件浏览器只读模式

    • FileBrowserContextValue 新增 readOnlyselectionEnabled 标志
    • FileBrowserContextValue 新增 getThumbnailPath 回调(只读场景注入缩略图)
    • 只读模式下抑制选择、拖拽、排序和右键菜单,可独立通过 selectionEnabled 解锁
    • 删除/标签/移动按钮在没有对应 handler 时自动隐藏
    • useFileBrowserBatchActions 新增 allowDeleteallowTagManagement 选项
    • 移除 ReadOnlyFileCollection/ReadOnlyFileGrid/ReadOnlyFileTable,用 FileBrowserProvider + readOnly 模式替代
    • ShareFolderView 改用 FileBrowserProvider + 只读模式,归档下载走 shareService.streamArchiveDownload
  • schema drift 检测

    • 新增 tests/test_schema_drift.rs::test_entity_columns_match_migrated_database_schema
    • 跨 SQLite(PRAGMA)、PostgreSQL/MySQL(information_schema.columns)做架构内省
    • 通过宏化注册表收集 42 个实体的列定义并与迁移结果比对
    • 使用 BTreeSet 保证比对顺序确定性
  • 管理员系统信息端点

    • 新增 GET /api/v1/admin/system-info(认证后才暴露构建版本与构建时间)
    • 前端管理"关于"页展示后端构建时间,缺失/无效时回落到本地化的"未知"
    • 新增 formatBuildTime 校验时间戳并复用 formatDateTime
  • WebDAV 单用户锁数量上限

    • 新增 webdav.max_active_locks_per_user 配置(默认 1024)
    • 新增 count_active_by_owner 仓库函数(统计未过期与无超时锁)
    • 引入 DavLockPreflightErrorDavLockSystem::prepare_lock 钩子,事务内复核避免 TOCTOU
    • 超限返回 HTTP 507 Insufficient Storage(webdav.lock_limit_exceeded
    • 增加用户行级锁(lock_by_id)确保并发场景下额度判断准确

Changed

  • 认证与公开链接密钥隔离(Breaking)

    • 新增 auth.share_cookie_secretauth.direct_link_secret,并将公开分享密码验证 Cookie、公共直链、预览链接和分享流式播放会话从 auth.jwt_secret 拆分到专用 HMAC 密钥
    • 已有 data/config.toml 在启动时会自动补齐缺失的 auth.jwt_secretauth.share_cookie_secretauth.direct_link_secretauth.mfa_secret_key,不会覆盖已有值
    • 由于 direct link / preview / stream token 不再接受 auth.jwt_secret 验签,升级前生成的公共直链、预览链接和分享流式播放会话 token 会失效,需要重新生成
    • 分享密码验证 Cookie 会因 auth.share_cookie_secret 切换而失效,用户需要重新输入分享密码
  • 下载文件名编码(Content-Disposition)

    • DownloadDisposition 抽离到独立 download_headers 模块
    • 改为 RFC 5987 filename*=UTF-8''<percent-encoded> 格式,使用 actix-web 的 ContentDisposition 构造器
    • 净化 \r\n\0 等控制字符防止头部注入
    • 覆盖所有下载端点(直链、预览链接、归档流)
  • 分享密码 Cookie 客户端绑定

    • 引入 ShareCookieBinding:将 Cookie MAC 绑定到 user agent SHA256 哈希 + IP 子网(IPv4 /24、IPv6 /64)
    • HMAC 结构:share_verified:{token}:ua:{hash}:ip:{subnet}
    • 合并重复的 cookie 校验为 check_share_cookie / check_share_cookie_ignoring_download_limit
    • 同子网与同 user agent 内 Cookie 仍有效,阻断跨客户端/跨网络重放
  • 公共健康检查信息收敛

    • /health/ready 不再裸返回 versionbuild_time,避免未认证客户端获取构建元数据
    • 存储就绪失败响应移除 error 字段防止驱动细节泄漏
    • 健康检查接口直接返回 HealthResponse,不再包裹 ApiResponse
    • 构建元数据移至上文新增的认证后 /admin/system-info 端点
  • 多部分/直传上传实际大小校验

    • UploadedMultipartPart 携带 part number + size 元数据
    • list_uploaded_parts 重命名为 list_uploaded_part_details,返回带大小信息
    • S3 完成流程:拉取每个分片的实际大小、校验序号连续、对比声明总大小,不一致直接 AbortMultipartUpload
    • 直传流式上传完成后回读 blob 元数据,比对声明大小并对照策略上限,复核配额
    • 校验失败清理 preuploaded blob,防止客户端绕过配额
  • WebDAV 路径规范化与 XXE 防护

    • 引入 PathEscape 错误,先做百分号解码、再做 . / .. 段折叠
    • 拒绝带前置 .. 段(含 %2e%2e 等编码变体)逃逸挂载根的路径
    • 集合资源保留尾部斜杠
    • 在 PROPFIND / PROPPATCH / LOCK / REPORT 解析前调用 reject_xml_dtd_or_entity,检测 <!DOCTYPE<!ENTITY
    • 触发时返回 403 + <no-external-entities/> 错误体(带 xmlns:D 命名空间)
  • WebDAV 锁错误模型

    • 引入 DavLockErrorConflict/LimitExceeded/Backend)取代 Result<DavLock, DavLock>,使锁冲突与额度耗尽返回不同响应
    • Backend 用于数据库失败,映射 HTTP 500
    • 增加结构化 tracing:包含路径、实体类型/ID 与错误细节
    • 锁额度校验从 prepare_lock no-op 修正为实际生效,刷新 timeout 前先校验 scope
    • 默认无 Timeout 头时使用 MAX_LOCK_DURATION_SECS(7 天)替代"无限"语义,并拒绝可能溢出 chrono 的超大值
  • WebDAV 缓存认证复核

    • CachedWebdavAuth 新增 account_id,命中缓存时通过 DB 直接复核
    • validate_cached_scope 替换为 validate_cached_account:复核账号 username、user/team/folder ID 与启用状态
    • 账号被禁用或字段变化时立即让缓存失效并返回 AuthForbidden
    • 校验 cached 密码哈希,防止旧凭据继续命中
  • WOPI 安全增强

    • 新增 X-WOPI-Token 头作为首选认证途径,query 参数 fallback 兼容旧客户端
    • 所有 WOPI 响应附加 Cache-Control: no-store,避免 token 通过浏览器缓存泄漏
    • access_token query 参数由必填改为可选
    • 默认 WOPI access token TTL 从 60 分钟降为 15 分钟
  • 分享下载计数原子性

    • increment_download_count 成功后立即重读 share 记录,避免使用 stale 内存值做 limit 检查
    • 用直接 >= 重读后的计数器替代 saturating_add(1) 比较
    • 重载失败时记录 warning 并回落缓存失效
    • 调试日志补充 share_iddownload_countmax_downloads
  • 管理后台量纲单位输入控件

    • 新增 AdminNumberUnitInput 通用数值 + 单位下拉控件
    • 配额输入由硬编码 MB 替换为 AdminStorageQuotaInput(字节 → TB)
    • 系统设置中的缩放数值字段统一使用共享的单位组件
    • 系统设置说明文案移到 help trigger tooltip 后面,降低视觉噪音
    • 缩放数值控件加入实时校验:拒绝超 Number.MAX_SAFE_INTEGER 的换算结果、保留无效草稿与显示单位
    • AdminTeamDetailDialog 配额状态合并为单一 quotaDraftOveride,修正 save/delete/restore 时的 stale draft 行为
    • 配额校验接受 0 与正整数;非正乘数与负向换算被 schema 拒绝
  • 前端缩略图与认证缓存隔离

    • 持久化用户缓存仅保留 profile、preferences、token 过期时间,剥离 id/email/role/storage
    • 读取既有缓存时迁移并清除敏感字段
    • 缩略图缓存命名空间从用户 ID 派生改为 sessionStorage 中的 session UUID
    • 会话过期时清理命名空间
  • 前端 i18n 与 PWA 预热重排

    • 拆分 i18n 加载为 authenticated shell 与完整 bundle,shell 仅含 core/files/tasks/share/search/errors/offline
    • 登录成功路径直接预热 shell i18n 与文件浏览器路由
    • 用户路由预热在登录后路径触发后跳过,避免重复
    • 预览引擎按需在进入文件浏览器时预热
    • App 鉴权检查与 shell i18n 全部 ready 后再渲染认证路由,避免未翻译闪烁
    • Service Worker 静态资源缓存策略由 StaleWhileRevalidate 改为 CacheFirst,离线场景更稳
  • 前端文件浏览器 / 上传 / 缩略图体验

    • useEnteredViewport 增加 trackVisibility/isInViewportFileThumbnail 仅在视窗内拉取
    • 持久化缩略图按 ETag 做后台 revalidation;离开视窗时清理 blob URL 释放内存
    • useUploadAreaUploads 增加 retryingTaskIdsRef 集合,去抖并发重试触发
    • summarizeUploadTasks 进度分母改用 progressCount,按尺寸加权
    • UploadPanel 引入 taskRowKey、向 virtualizer 传 getItemKey,状态变化时不复用旧行
    • FolderPolicyDialogFileBrowserPage 多个 UI 状态迁移到 useReducer,加入 targetKey 哨兵丢弃过期异步结果
    • 升级到 @testing-library/user-event 模拟真实交互
  • 路由与延迟加载

    • 引入 localizedLazyPage helper,在渲染 lazy 页面前预加载所需 i18n 命名空间
    • AdminRoute 渲染前预加载 admincore 命名空间,失败降级并 warn
    • 调整 /external-auth/links 路由顺序,避免被 /{kind}/{provider} 通配吞掉
  • token 生成方案

    • new_share_token() 由 8 字符 base62 改为 32 字符 UUID v4 hex
    • 移除自定义字符集与未使用的 rand::RngExt 引用
  • 窗口跳转安全属性

    • 分享视图下载与文件夹下载的 window.open 全部传入 noopener,noreferrer 三参数
  • 依赖更新

    • nom-exif 3.6.0 → 3.6.1,aws-smithy-types 1.4.9 → 1.5.0,aws-smithy-eventstream 0.60.20 → 0.60.21
    • block-bufferccmemchrregexregex-syntaxrust_decimalsmallvectime/time-core/time-macrosuuidzerocopy/zerocopy-derive 等小幅更新
    • 移除未使用的 powerfmt 依赖
    • Cargo.toml 新增 AptS-1543 作为作者

Fixed

  • 分享归档下载并发与回滚

    • 创建/消费归档票据时预留并回滚分享下载计数
    • 客户端中断或下游流失败时将下载计数回滚到 0,错误日志补充 share_id
    • 缓存校验后的文件夹 ID,避免重复鉴权
    • FileCard checkbox 的 onChange fallback 防止未定义 handler 报错
  • 管理员配额草稿

    • quotaValueToBytes 比较实际字节值而非显示字符串,避免误判变化
    • AdminNumberUnitInputinvalidState 时为数字输入和单位选择器都加 destructive 边框
    • 单位变化 handler 改为基于 units 数组匹配,避免空值类型不安全比较
    • 草稿无效时保留显示而非静默丢弃
    • UserDetailDialogBody 拆分为 Content / Footer / Profile / Security 子组件,提高可读性
  • 路由防护与并发刷新

    • test_concurrent_refresh_same_token_has_single_winner 中为获胜 token 种入 CSRF token
    • routeGuards.test.tsx 补充 ensureI18nNamespaces 与 logger mock,新增管理员 locale 加载失败用例
  • 杂项修复

    • 远端驱动 list_uploaded_part_details 过滤无效 part number(≤0)
    • S3 list_parts 翻页缺 next_part_number_marker 时正确处理
    • MFA 测试断言更新为 401 UNAUTHORIZED + auth.credentials_failed,与未验证邮箱登录现行行为一致
    • 分享下载并发测试隔离到独立的 SQLite 文件,并使用 pool-size-1 的连接避免共享态干扰

Security

  • 公开分享密码 Cookie / 公共直链 / 预览链接 / 分享流式播放会话切换到独立 HMAC 密钥
  • 分享密码 Cookie 绑定 user agent 哈希与 IP 子网,阻断跨客户端重放
  • 多部分与直传上传校验实际上传大小、对照策略上限、按真实大小判额
  • WebDAV 路径规范化阻断目录穿越(含百分号编码 .. 变体)
  • WebDAV XML 端点拒绝 DTD/ENTITY,缓解 XXE
  • WebDAV 单用户活跃锁数量限额,避免资源滥用
  • 登录与激活重发统一错误码 + 响应时延下限,缓解账号枚举
  • 健康检查不再泄漏版本与构建时间,存储就绪不再泄漏驱动错误细节
  • WOPI 优先头部认证、响应 Cache-Control: no-store、默认 TTL 缩短到 15 分钟
  • 持久化的用户缓存剥离 ID/email/role/storage 等敏感字段
  • 缩略图缓存命名空间从用户 ID 切换为 session UUID
  • 共享 RFC 5987 编码净化 \r/\n/\0,防 Content-Disposition 头注入
  • window.open 调用统一附加 noopener,noreferrer,防 tabnabbing 与 referrer 泄漏
  • WebDAV 缓存认证命中时复核账号状态与密码哈希

Testi...

Read more

AsterDrive v0.3.0-alpha.4

Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Jun 22:36
Immutable release. Only release title and notes can be modified.
v0.3.0-alpha.4
0b88d18

Release Highlights

AsterDrive 0.3.0-alpha.4 聚焦 PWA 启动性能审计、API 错误码细粒度分类、Service Worker 缓存优化和数据库类型约束统一。 本版本新增启动性能监测工具链,可自动生成性能报告和 Web Vitals 指标;API 错误码按模块(search, policy, storage, tasks)分层细化,提升调试和文档准确度;Service Worker 缓存策略重构以支持精细粒度版本控制;运行时数据库类型约束统一为 DatabaseConnection,移除 ConnectionTrait 泛型冗余。同时更新安全策略文档支持分支标识为 master,修复文档示例。

  • PWA 启动性能审计 — 自动化性能测试脚本、Web Vitals 指标收集、HTML 报告生成
  • API 错误码细粒度分类 — search / policy / storage / tasks 模块独立错误码集
  • Service Worker 缓存优化 — 支持版本级别缓存隔离和更新策略
  • 数据库类型约束统一ConnectionTrait 泛型移除,使用 DatabaseConnection trait object
  • 文档和配置更新 — 安全策略分支引用更新、Cargo.toml 优化

Added

  • PWA 启动性能审计工具

    • 新增 frontend-panel/scripts/audit-startup.mjs 自动化审计脚本
    • Web Vitals 指标收集(LCP、FID、CLS、FCP、TTFB)
    • HTML 报告生成,支持分数评级和详细指标
    • 性能基线和阈值检测
  • API 错误码细粒度分类(Breaking)

    • search 模块:search.invalid_querysearch.query_timeout
    • policy 模块:policy.not_foundpolicy.driver_type_mismatch
    • storage 模块:storage.quota_exceededstorage.access_denied
    • tasks 模块:tasks.not_foundtasks.invalid_state
    • 文档同步更新,所有错误码映射到细分类别
  • Service Worker 缓存版本隔离

    • 版本级别缓存键支持(cache name 包含应用版本)
    • PWA 路由预热阶段增强
    • 缓存更新和清理策略优化

Changed

  • 数据库访问类型统一(Breaking on internal API)

    • ConnectionTrait 泛型完全移除
    • 所有服务层和 API 路由使用 DatabaseConnection trait object
    • 零成本抽象,行为完全一致
    • 影响 40+ 个文件
  • 文档和配置更新

    • SECURITY.md 支持分支从 main 更新为 master
    • CONTRIBUTING.md 示例仓库 URL 更新
    • Cargo.toml release 配置:strip = falsestrip = true

Fixed

  • 启动性能测试覆盖
    • 新增 frontend-panel/src/lib/pwaWarmupLoaders.test.ts 单元测试
    • 改进初始化路由加载逻辑验证

Database Migrations

无新增迁移。

Statistics

  • 150 files changed, 3676 insertions(+), 1022 deletions(-)
  • 6 commits


Download

Platform Architecture Archive
Linux x86_64 aster_drive_v0.3.0-alpha.4_linux_x86_64.tar.gz
Linux x86 aster_drive_v0.3.0-alpha.4_linux_i686.tar.gz
Linux ARM64 aster_drive_v0.3.0-alpha.4_linux_aarch64.tar.gz
Linux ARMv7 aster_drive_v0.3.0-alpha.4_linux_armv7.tar.gz
Windows x86_64 aster_drive_v0.3.0-alpha.4_windows_x86_64.exe.zip
Windows x86 aster_drive_v0.3.0-alpha.4_windows_i686.exe.zip
Windows ARM64 aster_drive_v0.3.0-alpha.4_windows_arm64.zip
macOS x86_64 aster_drive_v0.3.0-alpha.4_macos_x86_64.tar.gz
macOS ARM64 aster_drive_v0.3.0-alpha.4_macos_aarch64.tar.gz

Extract with tar -xzf (Linux/macOS) or unzip (Windows).

Checksums: checksums.txt

Verify signatures

All release archives are signed with Sigstore cosign. To verify:

# Download checksums + signature + certificate
wget https://github.com/AptS-1547/AsterDrive/releases/download/v0.3.0-alpha.4/{checksums.txt,checksums.txt.sig,checksums.txt.pem}

# Verify signature
cosign verify-blob checksums.txt \
  --signature checksums.txt.sig \
  --certificate checksums.txt.pem \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'github.com/AptS-1547/AsterDrive'

# Verify archive integrity
sha256sum -c checksums.txt

AsterDrive v0.3.0-alpha.3

Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Jun 12:51
Immutable release. Only release title and notes can be modified.
v0.3.0-alpha.3
aa14035

Release Highlights

AsterDrive 0.3.0-alpha.30.3.0-alpha.2 的发布流水线修正版。二者在应用代码、数据库迁移、运行时配置和用户可见功能上等价;alpha.3 仅用于重新发布完整的 GitHub Release 资产。 0.3.0-alpha.2 的首次发布触发了 GitHub immutable release 限制,导致部分归档资产未能上传完成;本版本通过先创建 draft release、上传全部资产后再发布,修复该发布流程问题。由于本次修正只影响 GitHub Release 发布流程,Docker 镜像或镜像内版本元数据可能仍标识为 0.3.0-alpha.2,这与 0.3.0-alpha.3 的应用层内容等价。

Changed

  • 发布流程修复
    • GitHub Release 现在先以 draft 形式创建并上传全部归档资产,再发布为正式 release / prerelease
    • 避免 immutable release 仓库中 release 已发布后继续上传 assets 导致失败
    • v0.3.0-alpha.3v0.3.0-alpha.2 的应用层变更等价,完整功能变更见 v0.3.0-alpha.2
    • Docker 镜像或镜像内版本元数据可能仍显示为 0.3.0-alpha.2,属于发布标识差异,不代表功能或代码差异

Download

Platform Architecture Archive
Linux x86_64 aster_drive_v0.3.0-alpha.3_linux_x86_64.tar.gz
Linux x86 aster_drive_v0.3.0-alpha.3_linux_i686.tar.gz
Linux ARM64 aster_drive_v0.3.0-alpha.3_linux_aarch64.tar.gz
Linux ARMv7 aster_drive_v0.3.0-alpha.3_linux_armv7.tar.gz
Windows x86_64 aster_drive_v0.3.0-alpha.3_windows_x86_64.exe.zip
Windows x86 aster_drive_v0.3.0-alpha.3_windows_i686.exe.zip
Windows ARM64 aster_drive_v0.3.0-alpha.3_windows_arm64.zip
macOS x86_64 aster_drive_v0.3.0-alpha.3_macos_x86_64.tar.gz
macOS ARM64 aster_drive_v0.3.0-alpha.3_macos_aarch64.tar.gz

Extract with tar -xzf (Linux/macOS) or unzip (Windows).

Checksums: checksums.txt

Verify signatures

All release archives are signed with Sigstore cosign. To verify:

# Download checksums + signature + certificate
wget https://github.com/AptS-1547/AsterDrive/releases/download/v0.3.0-alpha.3/{checksums.txt,checksums.txt.sig,checksums.txt.pem}

# Verify signature
cosign verify-blob checksums.txt \
  --signature checksums.txt.sig \
  --certificate checksums.txt.pem \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp 'github.com/AptS-1547/AsterDrive'

# Verify archive integrity
sha256sum -c checksums.txt