Fully end to end encrypted anonymous chat program. Server only stores public key lookup for users and the encrypted messages. No credentials are transfered to the server, but kept in local browser storage. This allows 100% safe chatting.
https://safechat.ch
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.4 KiB
144 lines
4.4 KiB
#!/bin/bash |
|
|
|
#check for a text in a docker volume log |
|
function check() { |
|
if test $(docker inspect -f {{.State.Running}} $1) = "false"; then |
|
echo |
|
echo "**** ERROR: container $1 not running" |
|
exit 1 |
|
fi |
|
docker logs $1 2>&1 | grep -q "$2" |
|
} |
|
|
|
# call with volume name |
|
function wait_for_mysql() { |
|
check $1 "mysqld: ready for connections" |
|
} |
|
|
|
# run a countdown and call a check function |
|
# $1: expected time in seconds |
|
# $2-: check function |
|
function countdown() { |
|
set +x |
|
expect=$1 |
|
shift |
|
max=$1 |
|
shift |
|
for ((i=0; i<$((expect+max)); ++i)); do |
|
echo -en "\rPlease wait: $((expect-i))s " |
|
$* && break || sleep 1 |
|
done |
|
echo -e "\rdone in ${i}s: $* " |
|
echo |
|
set -x |
|
} |
|
|
|
# should not be called with sudo root |
|
if test "$(whoami)" = "root"; then |
|
echo "**** ERROR: call as non root user" |
|
exit 1 |
|
fi |
|
|
|
# option checks |
|
NEED_XVFB=0 |
|
NEED_DOCKER=1 |
|
NEED_WEBTESTER=0 |
|
PORT= |
|
while test $# -gt 0; do |
|
case "$1" in |
|
(--help|-h) |
|
echo "$0 [OPTIONS]" |
|
echo |
|
echo "OPTIONS:" |
|
echo |
|
echo " -p <PORT> don't run, just prepare test on port <PORT>" |
|
echo |
|
exit 0 |
|
;; |
|
(-p|--port) |
|
shift |
|
PORT=$1 |
|
;; |
|
(*) echo "**** ERROR: unknown option '$1', try --help"; exit 1;; |
|
esac |
|
if test $# -eq 0; then |
|
echo "**** ERROR: missing value, try --help"; exit 1; |
|
fi |
|
shift |
|
done |
|
|
|
error=0; |
|
|
|
# test for xvfb (needed by webtester) |
|
if test ${NEED_XVFB} -eq 1 -a \! -e "$(which xvfb-run)"; then |
|
echo "**** ERROR: XVFB Not Installed" |
|
echo "you need to install xvfb" |
|
echo "please execute as root:" |
|
echo " apt-get install xvfb" |
|
error=1 |
|
fi |
|
|
|
# test for docker if needed |
|
if test ${NEED_DOCKER} -eq 1 -a \! -e "$(which docker)"; then |
|
echo "**** ERROR: Docker Not Installed" |
|
echo "you need to install the latest docker" |
|
echo "please execute as root:" |
|
echo " apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \\" |
|
echo " --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9" |
|
echo " echo 'deb https://get.docker.io/ubuntu docker main' \\" |
|
echo " > /etc/apt/sources.list.d/docker.list" |
|
echo " apt-get update" |
|
echo " apt-get install lxc-docker" |
|
echo " adduser $(whoami) docker" |
|
echo "you need to add the following line to /etc/default/docker:" |
|
echo ' DOCKER_OPTS="--insecure-registry dev0004:5000"' |
|
echo "logout $(whoami) and login again to run $(whoami) with group docker" |
|
echo "additionals note:" |
|
echo " if you run docker inside a VM (not recommended), you probably" |
|
echo " need to foollow the instructions in chapter \"Changing Bridge" |
|
echo " Subnetwork\" on https://marc.wäckerlin.ch/computer/docker-overview" |
|
echo "introduction to docker, see:" |
|
echo " https://marc.wäckerlin.ch/computer/docker-overview" |
|
error=1 |
|
fi |
|
|
|
# check for webtester |
|
if test ${NEED_WEBTESTER} -eq 1 -a \! -e "$(which webrunner)"; then |
|
echo "**** ERROR: Webtester Not Installed" |
|
echo "you need to install webtester" |
|
echo "please execute as root:" |
|
echo " apt-get install -y wget software-properties-common apt-transport-https" |
|
echo " apt-add-repository https://dev.marc.waeckerlin.org/repository" |
|
echo " wget -O- https://dev.marc.waeckerlin.org/repository/PublicKey \\" |
|
echo " | apt-key add -" |
|
echo " apt-get update -y" |
|
echo " apt-get install -y webtester" |
|
echo "more information, see:" |
|
echo " https://dev.marc.waeckerlin.org/redmine/projects/webtester" |
|
error=1 |
|
fi |
|
|
|
if test "$error" = "1"; then |
|
exit 1 |
|
fi |
|
|
|
set -x |
|
|
|
# Add tests here |
|
MYSQL=$(docker run -d -e MYSQL_ROOT_PASSWORD=TopSecretLOL mysql) |
|
PHP=$(docker run -d --volume $(pwd)/../html:/usr/share/nginx/html:ro --link ${MYSQL}:mysql mwaeckerlin/php-fpm) |
|
if test -z "${PORT}"; then |
|
NGINX=$(docker run -d --volumes-from ${PHP} --link ${PHP}:php mwaeckerlin/nginx) |
|
trap "docker rm -f ${NGINX} ${PHP} ${MYSQL}" INT TERM EXIT |
|
docker pull mwaeckerlin/webtester |
|
set -e |
|
countdown 10 20 wait_for_mysql ${MYSQL} |
|
docker run --rm --link ${NGINX}:safechat -u $(id -u) -v $(pwd):/tests -e WEBRUNNER_SCRIPTS="settings.wt testcase.wt" mwaeckerlin/webtester |
|
else |
|
NGINX=$(docker run -d -p ${PORT}:80 --volumes-from ${PHP} --link ${PHP}:php mwaeckerlin/nginx) |
|
trap "docker rm -f ${NGINX} ${PHP} ${MYSQL}" INT TERM EXIT |
|
set +x |
|
echo "Ready to test; press enter to end" |
|
read |
|
set -x |
|
fi
|
|
|