#!/bin/bash
set -e
. $(dirname ${0})/../../test/util/lib.sh
init
go build || exit 1
function r() {
./chasquid-util -C=.config "$@"
}
function check_userdb() {
if ! r check-userdb domain > /dev/null; then
echo check-userdb failed
exit 1
fi
}
mkdir -p .config/domains/domain/ .data/domaininfo
rm -f .config/chasquid.conf
echo 'data_dir: ".data"' >> .config/chasquid.conf
if ! r print-config > /dev/null; then
echo print-config failed
exit 1
fi
if ! r user-add user@domain --password=passwd > /dev/null; then
echo user-add failed
exit 1
fi
check_userdb
if ! r authenticate user@domain --password=passwd > /dev/null; then
echo authenticate failed
exit 1
fi
if r authenticate user@domain --password=abcd > /dev/null; then
echo authenticate with bad password worked
exit 1
fi
# Interactive authentication.
# Need to wrap the execution under "script" since the interaction requires an
# actual TTY, and that's a fairly portable way to do that.
if hash script 2>/dev/null; then
if ! (echo passwd; echo passwd ) \
| script \
-qfec "./chasquid-util -C=.config authenticate user@domain" \
".script-out" \
| grep -q "Authentication succeeded";
then
echo interactive authenticate failed
exit 1
fi
fi
if ! r user-remove user@domain > /dev/null; then
echo user-remove failed
exit 1
fi
check_userdb
if r authenticate user@domain --password=passwd > /dev/null; then
echo authenticate for removed user worked
exit 1
fi
touch '.data/domaininfo/s:dom%C3%A1in'
if ! r domaininfo-remove domáin; then
echo domaininfo-remove failed
exit 1
fi
if [ -f '.data/domaininfo/s:dom%C3%A1in' ]; then
echo domaininfo-remove did not remove file
exit 1
fi
echo "alias: user@somewhere" > .config/domains/domain/aliases
A=$(r aliases-resolve alias@domain | grep somewhere)
if [ "$A" != "(email) user@somewhere" ]; then
echo aliases-resolve failed
echo output: "$A"
exit 1
fi
C=$(r print-config | grep hostname)
if ! ( echo "$C" | grep -E -q "hostname:.*\"$HOSTNAME\"" ); then
echo print-config failed
echo output: "$C"
exit 1
fi
if r aliases-add alias2@domain target > /dev/null; then
A=$(grep alias2 .config/domains/domain/aliases)
if [ "$A" != "alias2: target" ]; then
echo aliases-add failed
echo output: "$A"
exit 1
fi
fi
if r aliases-add alias2@domain target > /dev/null; then
echo aliases-add on existing alias worked
exit 1
fi
if r aliases-add alias3@notexist target > /dev/null; then
echo aliases-add on non-existing domain worked
exit 1
fi
if r aliases-add alias4@domain > /dev/null; then
echo aliases-add without target worked
exit 1
fi
success