11 个版本 (重大变更)

0.9.0 2024 年 8 月 5 日
0.8.0 2024 年 7 月 28 日
0.7.0 2024 年 7 月 19 日
0.1.2 2023 年 10 月 29 日

#147命令行工具

Download history 161/week @ 2024-04-24 38/week @ 2024-05-01 165/week @ 2024-05-15 19/week @ 2024-05-22 211/week @ 2024-05-29 15/week @ 2024-06-05 2/week @ 2024-06-12 1/week @ 2024-06-26 27/week @ 2024-07-03 106/week @ 2024-07-17 135/week @ 2024-07-24 126/week @ 2024-07-31 30/week @ 2024-08-07

每月 397 次下载

MIT 许可证

2MB
5K SLoC

DRACOON Commander RS

这是什么?

这是 DRACOON Commander 的移植版,最初是一个用于通过 CLI 使用 DRACOON 的 Python3 项目。该项目作为使用 dco3 的演示客户端实现,dco3 是 Rust 中的 DRACOON API 包装器。

构建

该项目使用几个出色的 crate,并在整个项目中使用异步 Rust。使用的 crate

完整依赖列表: Cargo.toml

所有 DRACOON 操作都使用 dco3

安装

您可以在 GitHub 发布页面下载预编译的二进制文件: 发布

如果您已安装 Rust 工具链,可以使用 cargo 安装此软件,如下所示

cargo install dccmd-rs

如果您喜欢更粗糙的版本或想贡献,可以自由地从源代码编译

克隆仓库,并使用 cargo run 或使用 cargo build 编译自己的可执行文件

git clone https://github.com/unbekanntes-pferd/dccmd-rs.git
cd dccmd-rs
cargo build

哪些功能正常?

目前,以下命令正常工作

  • config - DRACOON Commander 的配置管理(请参阅下面的子命令)
  • download - 从 DRACOON 下载文件或文件夹 / 房间到磁盘上的指定位置(加密,未加密)
  • ls - 列出 DRACOON 中给定路径的所有节点
  • mkdir - 在 DRACOON 的给定路径中创建一个文件夹
  • mkroom - 在 DRACOON 的给定路径中创建一个房间(继承权限)
  • rm - 通过给定路径在 DRACOON 中删除节点
  • upload - 将文件或文件夹上传到 DRACOON 的父目录(加密,未加密)
  • users - DRACOON 中的用户管理(请参阅下面的子命令)

示例用法

为了清晰起见,二进制的使用被称为 dccmd-rs,无论是通过 cargo 或编译后的可执行文件。

下载

dccmd-rs ls

要下载文件,请使用下载命令

dccmd-rs download your.dracoon.domain/some/room/some-file.pdf ./your/path/your-name.pdf

要下载容器(房间或文件夹),请使用带有递归标志的下载命令

dccmd-rs download -r your.dracoon.domain/some/room ./your/path

注意:这将会创建一个与您的容器同名的目录。子房间将 不会 包括在内。

要下载搜索结果列表,请使用带有搜索字符串的下载命令

dccmd-rs download your.dracoon.domain/some/*.pdf ./your/path

要下载没有权限到公共下载共享(共享)的文件

dccmd-rs download your.dracoon.domain/public/download-shares/someLongAccessKey /your/path

注意:这实际上意味着您需要复制创建的共享链接

上传

dccmd-rs ls

要上传文件,请使用上传命令

dccmd-rs upload ./your/path/your-name.pdf your.dracoon.domain/some/room

注意:目前,尚未实现提供自定义名称。

您可以通过传递 --share 标志直接共享文件并创建共享链接(默认设置)

dccmd-rs upload ./your/path/your-name.pdf your.dracoon.domain/some/room --share

要上传文件夹,请使用 --recursive 标志

dccmd-rs upload /your/path your.dracoon.domain/some/room

注意:目前只支持递归上传的绝对路径。

要上传没有权限到公共上传共享(文件请求)的文件

dccmd-rs upload /your/path your.dracoon.domain/public/upload-shares/someLongAccessKey

注意:这实际上意味着您需要复制创建的共享链接

上传选项

在上传时,默认的分辨率策略是 重命名,这意味着如果上传并已存在的文件 foo.pdf,它将由 DRACOON 自动重命名(例如,到 foo (1).pdf)。

为了更改此行为,您可以传递以下标志/选项

  • --overwrite - 具有相同名称的文件将被覆盖(实际上创建同一文件的版本)
  • --keep-share-links - 如果使用 --overwrite,则可以保留现有(下载)共享链接

传输

要从 DRACOON 实例传输文件到另一个实例,请使用传输命令

dccmd-rs transfer instance1.domain.com/some/file.pdf instance2.domain.com/some/target/path

传输选项

这些选项与上传选项类似(参见上方)。

在上传时,默认的分辨率策略是 重命名,这意味着如果上传并已存在的文件 foo.pdf,它将由 DRACOON 自动重命名(例如,到 foo (1).pdf)。

为了更改此行为,您可以传递以下标志/选项

  • --overwrite - 具有相同名称的文件将被覆盖(实际上创建同一文件的版本)
  • --keep-share-links - 如果使用 --overwrite,则可以保留现有(下载)共享链接

列出节点

dccmd-rs ls

要列出节点,请使用 ls 命令

dccmd-rs ls your.dracoon.domain/some/path

// for root node use a trailing slash
dccmd-rs ls your.dracoon.domain/

// for searches within the room
dccmd-rs ls your.dracoon.domain/*.pdf 

// only files
dccmd-rs ls your.dracoon.domain/some/room --filter type:eq:file

选项

  • -l--long - 打印所有详细信息(大小、更新者、节点 ID...)
  • -r--human-readable - 以可读格式打印大小
  • --managed - 以房间管理员/房间经理的身份显示房间(没有权限的房间)
  • --all - 获取所有项目(默认:前 500 个项目)
  • --filter - 对特定值进行筛选(有关筛选信息,请参阅 API 文档)

删除节点

要删除节点,请使用 rm 命令

dccmd-rs rm your.dracoon.domain/some/path/some_file.pdf
dccmd-rs rm -r your.dracoon.domain/some/path/some/room
dccmd-rs rm -r your.dracoon.domain/*test

注意:如果您打算删除容器(房间或文件夹),请使用递归标志。 注意:房间删除始终需要额外确认。 注意:您可以通过使用搜索字符串(* 删除所有)来删除房间中的内容。这 包括房间。

创建文件夹

要创建文件夹,请使用 mkdir 命令

dccmd-rs mkdir your.dracoon.domain/some/path/newfolder

要创建房间,请使用 mkroom 命令

dccmd-rs mkroom your.dracoon.domain/some/path/newroom
# pass optional usernames for admins (example adds admins with usernames foo1, foo2 and foo3)
dccmd-rs mkroom your.dracoon.domain/some/path/newroom -a foo1 -a foo2 -a foo3

# you can additionally inherit permissions using the --inherit-permissions flag 
dccmd-rs mkroom your.dracoon.domain/some/path/newroom -a foo1 --inherit-permissions

# you can also set the default classification (example sets to confidential)
dccmd-rs mkroom your.dracoon.domain/some/path/newroom --classification 3

管理用户

要导入用户,您可以使用 users import some.dracoon.domain.com 命令

# csv header must be 'first_name,last_name,email,login,oidc_id,mfa_enforced'
# the order of these fields does not matter
# login, oidc_id and mfa_enforced are optional but must be present as field
dccmd-rs users import your.dracoon.domain/ /path/to/users.csv
dccmd-rs users import your.dracoon.domain/ /path/to/users.csv --oidc-id 2 # import as OIDC users

要列出用户,您可以使用 users ls some.dracoon.domain.com 命令

# optional flags: --all (lists all users, default: 500, paging) --csv (csv format)
# optional flags: --filter (see API docs for filter info)
dccmd-rs users ls your.dracoon.domain/
dccmd-rs users ls your.dracoon.domain/ --csv --all > userlist.csv
dccmd-rs users ls your.dracoon.domain/ --filter userName:cn:foo

要创建用户,您可以使用 users create some.dracoon.domain.com 命令

# params: --first-name, --last-name, --email, --login, --oidc-id 
dccmd-rs users create your.dracoon.domain/ -f foo -l bar -e [email protected] # local user
dccmd-rs users create your.dracoon.domain/ -f foo -l bar -e [email protected] --oidc-id 2 # OIDC user

要删除用户,您可以使用 users some.dracoon.domain.com rm 命令

# supported: user id, user login / username
dccmd-rs users rm your.dracoon.domain/ --user-id 2
dccmd-rs users rm your.dracoon.domain/ --user-name foo # short: -u

要获取特定用户信息,您可以使用 users info some.dracoon.domain.com 命令

# supported: user id, user login / username
dccmd-rs users info your.dracoon.domain/ --user-id 2
dccmd-rs users info your.dracoon.domain/ --user-name foo # short: -u

切换认证方法

您可以为属于当前认证方法的具体子集(或所有用户)切换认证方法。要使用它,您需要传递以下参数

  • current-method - DRACOON 中的当前认证方法 - 有效选项:基本(或本地)、openid(或oidc)、active-directory(或ad)
  • new-method - DRACOON 中的新认证方法 - 有效选项见上
  • current-oidc-id - 可选的当前 OIDC 配置 ID - 如果当前方法是 openid,则必须提供
  • new-oidc-id - 可选的新 OIDC 配置 ID - 如果新方法是 openid,则必须提供
  • current-ad-id - 可选的当前 AD 配置 ID - 如果当前方法是 active-directory,则必须提供
  • new-ad-id - 可选的新 AD 配置 ID - 如果新方法是 active-directory,则必须提供
  • filter - 可选的用户过滤器 - 详细信息请参阅 API 文档(例如 email🇨🇳somedomain.com)
  • login - 可选的登录转换(例如 email,username,firstname.lastname)默认:email
# in order to identify AD or openid ids, use the config system-info command (see below)

# switch from basic auth (local) to openid if local user email contains somedomain.com
dccmd-rs users switch-auth --current-method basic --new-method openid --new-oidc-id 99 --filter email:cn:somedomain.com your.dracoon.domain/

# switch from openid with id 88 to openid with id 99 while setting the login as firstname.lastname (replaced by user values)
dccmd-rs users switch-auth --current-method openid --new-method openid --current-oidc-id 88 --new-oidc-id 99 --filter email:cn:somedomain.com your.dracoon.domain/ --login "firstname.lastname"

管理组

要列出组,您可以使用 groups ls some.dracoon.domain.com 命令

# optional flags: --all (lists all groups, default: 500, paging) --csv (csv format)
# optional flags: --filter (see API docs for filter info)
dccmd-rs groups ls your.dracoon.domain/
dccmd-rs groups ls your.dracoon.domain/ --csv --all > grouplist.csv
dccmd-rs groups ls your.dracoon.domain/ --filter name:eq:foo

要创建组,您可以使用 groups create some.dracoon.domain.com 命令

# params: --name
dccmd-rs groups create your.dracoon.domain/ --name foo

要删除组,您可以使用 groups some.dracoon.domain.com rm 命令

# supported: group id, group name
dccmd-rs groups rm your.dracoon.domain/ --group-id 2
dccmd-rs groups rm your.dracoon.domain/ --group-name foo

组用户

要列出组用户,您可以使用 groups users ls some.dracoon.domain.com 命令

# get all group users for every group
dccmd-rs groups users ls your.dracoon.domain/

# list group users in csv format 
dccmd-rs groups users ls your.dracoon.domain/ --csv
dccmd-rs groups users ls your.dracoon.domain/ --csv --all > groupusers.csv

# get specific group users (for a group)
dccmd-rs groups users ls your.dracoon.domain/YourGroupName --csv --all

报告

要获取事件或权限的报表(无论是表格实时视图还是 CSV),请使用相应的 reports 命令

事件(审计日志)

此命令仅适用于 DRACOON 服务器,且不支持 DRACOON 云! 对于 DRACOON 云,请使用内置的报告。

# lists first 500 events of your domain
dccmd-rs reports events your.dracoon.domain/ 
# list all events of your domain (will *not* parallelize and might take a long time to conclude!)
dccmd-rs reports events your.dracoon.domain/ --all
# list events as CSV format
dccmd-rs reports events your.dracoon.domain/ --csv > events.csv # store in CSV

# provide optional start date or end date
dccmd-rs reports events your.dracoon.domain/ --start-date 2021-01-01
dccmd-rs reports events your.dracoon.domain/ --end-date 2024-01-01

# filter by event status (failure: 2, success: 0)
dccmd-rs reports events your.dracoon.domain/ --status 0 # all success operations

# filter by user id (only display events from user 99)
dccmd-rs reports events your.dracoon.domain/ --user-id 99

# list eventlog operations (needed for filtering by operation id)
dccmd-rs reports operation-types your.dracoon.domain/

# filter by operation id (type) 
dccmd-rs reports events your.dracoon.domain/ --operation-type 125

权限(节点权限)

此命令仅适用于 DRACOON 服务器,且不支持 DRACOON 云! 对于 DRACOON 云,请使用内置的报告。

# list all permissions of your domain (will *not* parallelize and might take a long time to conclude!)
# note: if you call this, in order to reduce load, first, all users are fetched and then all permissions generated per user
# there is no pagination in this, so you can ommit offset and limit
dccmd-rs reports permissions your.dracoon.domain/ 
# list permissions as CSV format
dccmd-rs reports permissions your.dracoon.domain/ --csv > events.csv # store in CSV

# list permissions for a specific user
dccmd-rs reports permissions your.dracoon.domain/ --filter userId:eq:99

# list permissions for a specific room
dccmd-rs reports permissions your.dracoon.domain/ --filter nodeId:eq:99
# for a full list of available filters, check the API documentation

配置

存储的授权

您可以使用 config auth ls 命令验证刷新 stoken 是否(安全地)存储。要删除存储的令牌,请使用 config auth rm 命令。

# displays user info for stored refresh token
dccmd-rs config auth ls your.dracoon.domain/
# removes stored refresh token for given domain
dccmd-rs config auth rm your.dracoon.domain/ 

存储的加密密钥

您可以使用 config crypto ls 命令验证加密密钥是否(安全地)存储。要删除存储的令牌,请使用 config crypto rm 命令。

# displays user info for stored crypto secret
dccmd-rs config crypto ls your.dracoon.domain/
# removes stored crypto secret for given domain
dccmd-rs config crypto rm your.dracoon.domain/ 

系统信息

您可以通过 config system-info 命令获取系统信息(OpenID 配置、AD 配置、使用的用户和存储)。

# displays system information
# requires config manager role
dccmd-rs config system-info your.dracoon.domain/

CLI 模式

当前 dccmd-rs 在运行无头 Linux 或尝试在 WSL 中运行时无法存储凭证。在这种情况下,您可以将用户名和密码作为参数传递,如下所示

dccmd-rs --username your_username --password your_secure_password ls your.dracoon.domain/some/path

使用此方法时请自行承担风险,并请注意密码会以明文形式存储在您的 shell 历史记录中。注意:此方法仅适用于密码流 - 这意味着您 必须 使用本地用户。

此方法也适用于加密密码,如下所示

dccmd-rs --username your_username --password your_secure_password --encryption-password your_secure_encryption_password ls your.dracoon.domain/some/path

依赖项

~19–36MB
~579K SLoC