6 releases (3 breaking)
0.4.0 | Apr 29, 2024 |
---|---|
0.3.1 | Apr 16, 2024 |
0.2.0 | Apr 2, 2024 |
0.1.2 | Oct 29, 2023 |
#87 in Cryptography
461 downloads per month
125KB
3K
SLoC
DRACOON Commander RS
What is this?
This is a port of DRACOON Commander - initially a Python3 project to use DRACOON via CLI.
The project serves as a demo client implementation using dco3
- an API wrapper in Rust for DRACOON.
Built with
This project makes use of several awesome crates and uses async Rust throughout the project. Crates used:
Full dependency list: Cargo.toml
For all DRACOON operations dco3
is used.
Installation
You can download precompiled binaries on the Github releases page: Releases
If you have the Rust toolchain installed, you can install this using cargo like so:
cargo install dccmd-rs
If you like it even rougher or would like to contribute, feel free to compile from source:
Clone the repository and either use cargo run
or build your own executable with cargo build
:
git clone https://github.com/unbekanntes-pferd/dccmd-rs.git
cd dccmd-rs
cargo build
What works?
Currently, the following commands are working:
download
- downloads a file or folder / room from DRACOON to a desired location on disk (encrypted, unencrypted)upload
- uploads a file or folder to a parent in DRACOON (encrypted, unencrypted)ls
- lists all nodes for a given path in DRACOONmkdir
- creates a folder in given path in DRACOONmkroom
- creates a room (inherits permissions) in given path in DRACOONrm
- removes a node by given path in DRACOONusers
- user management in DRACOON (see subcommands below)
Example usage
For the sake of clarity, the usage of the binary is called dccmd-rs
, regardless of the use via cargo
or a compiled executable.
Downloads
To download a file, use the download command:
dccmd-rs download your.dracoon.domain/some/room/some-file.pdf ./your/path/your-name.pdf
To download a container (room or folder), use the download command with recursive flag:
dccmd-rs download -r your.dracoon.domain/some/room ./your/path
Note: This will create a directory with same name as your container. Sub rooms are not included.
To download a list search result, use the download command with a search string:
dccmd-rs download your.dracoon.domain/some/*.pdf ./your/path
To download a file with no authorization to a public download share (share):
dccmd-rs download your.dracoon.domain/public/download-shares/someLongAccessKey /your/path
Note: This essentially means you need to copy the created share link
Uploads
To upload a file, use the upload command:
dccmd-rs upload ./your/path/your-name.pdf your.dracoon.domain/some/room
Note: Currently, providing a custom name is not implemented.
You can share the file directly and create a share link (default settings) by passing the --share
flag:
dccmd-rs upload ./your/path/your-name.pdf your.dracoon.domain/some/room --share
To upload a folder, use the --recursive
flag:
dccmd-rs upload /your/path your.dracoon.domain/some/room
Note: Currently only absolute paths are supported for recursive uploads.
To upload a file with no authorization to a public upload share (file request):
dccmd-rs upload /your/path your.dracoon.domain/public/upload-shares/someLongAccessKey
Note: This essentially means you need to copy the created share link
Listing nodes
To list nodes, use the ls
command:
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
Options:
-l
,--long
- prints all details (size, updated by, node id...)-r
,--human-readable
- prints size in human readable format--managed
- shows room as room admin / room manager (rooms w/o permissions)--all
- fetches all items (default: first 500 items)
Deleting nodes
To delete nodes, use the rm
command:
dccmd-rs rm your.dracoon.domain/some/path/some_file.pdf
dccmd-rs rm -r your.dracoon.domain/some/path/some/room
Note: If you intend to delete a container (room or folder), use the recursive flag. Note: Room deletion always requires additional confirmation.
Creating folders
To create folders, use the mkdir
command:
dccmd-rs mkdir your.dracoon.domain/some/path/newfolder
To create rooms, use the mkroom
command:
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
Managing users
To import users, you can use the users import some.dracoon.domain.com
command:
# 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
To list users, you can use the users ls some.dracoon.domain.com
command:
# optional flags: --all (lists all users, default: 500, paging) --csv (csv format)
# optional flags: --search (by username)
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/ --search foo
To create users, you can use the users create some.dracoon.domain.com
command:
# params: --first-name, --last-name, --email, --login, --oidc-id
dccmd-rs users create your.dracoon.domain/ -f foo -l bar -e foo@bar.com # local user
dccmd-rs users create your.dracoon.domain/ -f foo -l bar -e foo@bar.com --oidc-id 2 # OIDC user
To delete users, you can use the users some.dracoon.domain.com rm
command:
# 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
To fetch specific user info, you can use the users info some.dracoon.domain.com
command:
# 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
CLI mode
Currently dccmd-rs will fail to store credentials if you are running a headless Linux or are trying to run in Windows with WSL. In such cases you can pass the username and password as arguments like so:
dccmd-rs --username your_username --password your_secure_password ls your.dracoon.domain/some/path
Use this at your own risk and be aware that the password is stored in plain in your shell history. Note: This only works for the password flow - this means you must use a local user.
This also works for the encryption password like so:
dccmd-rs --username your_username --password your_secure_password --encryption-password your_secure_encryption_password ls your.dracoon.domain/some/path
Dependencies
~21–37MB
~611K SLoC