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 在 命令行工具
每月 397 次下载
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 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 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,则可以保留现有(下载)共享链接
列出节点
要列出节点,请使用 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