3.7 KiB
Administrating WildDuck via command line
REST api
Well, the whole idea is, we can administrate wilduck via the REST api.
So we are crafting http queries, and sending it via curl
.
You can save these commands to ~/.bashrc
file (which is executed if you are coming through ssh,
the ~/.profile
file is for interactive login).
Not as aliases (because alias can not have arguments), but you can save them
as bash functions, which behave exactly like aliases but can have arguments too.
Saving functions to ~/.bashrc
file
Here is an example:
wduck-get-user() {
echo "Geeting info about user with id: $1"
curl -i http://localhost:8080/users/$1
}
Crash course about bash functions:
You only specify the function as functionname() { ... }
, no need to specifying the
arguments. You can call it either with or without arguments or with multiple arguments:
$ functionname
$ functionname myargument1
$ functionname myargument1 my2
If you save it to ~/.bashrc
, then you can call it as any alias
defined there.
Better to source our file in .bashrc
rather then defining there
It is better to have a separate file for wildduck related commands, and
source
it in bashrc
file, then polluting it too much.
So we create a file named ~/.wildduck.commands
, and source
it.
Paste this at the end of ~/.bashrc
file:
# include .wildduck.commands if it exists
if [ -f $HOME/.wildduck.commands ]; then
. $HOME/.wildduck.commands
echo ".wildduck.commands file has been sourced"
fi
Please note . file
is the same as source file
. But dot itself is
POSIX compatible, while source
is bash builtin (and some other shells too),
but bash itself does not make a distinction between dot and source.
List of commands
In the below examples, we are taking our commands from wildduck API. Please refer to the official api for the latest version if this guide gets old or out of sync.
List of all users in wildduck
curl -i http://localhost:8080/users
Function snippet to be saved in :~/.wildduck.commands`:
wduck-users() {
echo "List of all users"
curl -i http://localhost:8080/users
}
Query user informations
curl -i http://localhost:8080/users/$USERID
Function snippet to be saved in :~/.wildduck.commands`:
wduck-user() {
USERID=$1
echo "Querying info about user $USERID"
curl -i http://localhost:8080/users/$USERID
}
Searching messages in the whole database (chinese char)
Some mongodb foo:
mongo
> use wildduck
> db.
messages.
find({'headers.value': /[姚轉]/ }).
toArray().
map(doc => '/users/' + doc.user.str + '/mailboxes/' + doc.mailbox.str + '/messages/' + doc.uid )
Example output:
[
"/users/5b1xxx8dc5/mailboxes/5b1xxxdc6/messages/14343",
"/users/5b1xxx8dc5/mailboxes/5b1xxxdc6/messages/10837",
]
Where doc.user
is the owner of the mailbox, doc.mailbox
is the mailbox where the message located (inbox, sent, draft, etc), and doc.uid
is a number, what wildduck uses for message id. It is independent from mongodb builtin doc._id
.
Function snippet to be saved in :~/.wildduck.commands`:
wduck-message-delete() {
URL=$1
echo "Delete(format: /users/USERID/mailboxes/MAILBOXID/messages/UID) message: $URL"
curl -i -XDELETE http://localhost:8080$URL
}
Use it like:
wduck-message-delete /users/5b1xxx8dc5/mailboxes/5b1xxxdc6/messages/10837
where xxx are real chars.
Or in a shell script:
#! /bin/bash
source ~/.wildduck.commands
declare -a arr=(
"/users/5b1xxxc5/mailboxes/5b1xxxc6/messages/14343"
"/users/5b3xxx54/mailboxes/5b3xxx55/messages/10837"
)
for i in "${arr[@]}"
do
wduck-message-delete $i
done