REST api
We can administrate wilduck via the REST api. In the examples, we craft http queries and send them via curl
.
You can save these commands to ~/.bashrc
file (which is executed if you are comming 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.
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 specify the function as functionname() { ... }
, there is no need to specify the
arguments. You can call functions with 0 or more arguments:
$ functionname
$ functionname myargument1
$ functionname arg1 arg2
Functions saved in ~/.bashrc
can be called any time, just as with an alias
defined there.
Source from ~/.bashrc
It is better to have a separate file for wildduck related commands, and source
it in ~/.bashrc
.
Create a file named ~/.wildduck.commands
, and source
it by adding this to the end of ~/.bashrc
:
# 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 syntax is POSIX compatible, while source
is a bash builtin (and some other shells too). Bash makes no distinction between dot and source.
List of commands
The examples below take commands from the wildduck API. Refer to the official api for the latest syntax.
List all users
curl -i http://localhost:8080/users
Function snippet to be saved in :~/.wildduck.commands`:
wduck-users() {
echo "List all users"
curl -i http://localhost:8080/users
}
Query user information
curl -i http://localhost:8080/users/$USERID
Function snippet to be saved in :~/.wildduck.commands`:
wduck-user() {
USERID=$1
echo "Querying 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
© 2015-2024 Andris Reinman. Wild Duck IMAP Server wildduck.email