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.
140 lines
5.2 KiB
140 lines
5.2 KiB
#! /bin/bash -e |
|
|
|
# build and test everything in a fresh docker installation |
|
img="ubuntu:latest" |
|
repos=() |
|
keys=() |
|
envs=() |
|
dirs=("-v $(pwd):/workdir") |
|
packages=() |
|
targets="all check distcheck" |
|
commands=() |
|
if test -e ./build-in-docker.conf; then |
|
# you can preconfigure the variables in file build-in-docker.conf |
|
# if you do so, add the file to EXTRA_DIST in makefile.am |
|
source ./build-in-docker.conf |
|
fi |
|
while test $# -gt 0; do |
|
case "$1" in |
|
(-h|--help) |
|
echo "$0 [OPTIONS]" |
|
echo |
|
echo "OPTIONS:" |
|
echo |
|
echo " -h, --help show this help" |
|
echo " -i, --image <image> use given docker image instead of ${img}" |
|
echo " -t, --targets targets specify build targets, default: ${targets}" |
|
echo " -r, --repo <url> add given apt repository" |
|
echo " -k, --key <url> add public key from url" |
|
echo " -e, --env <var>=<val> set environment variable in docker" |
|
echo " -d, --dir <dir> access given directory read only" |
|
echo " -p, --package <pkg> install extra debian packages" |
|
echo " -c, --cmd <command> execute commands as root in docker" |
|
echo |
|
echo " The options -r -k -e -d -p -c can be repeated several times." |
|
echo |
|
echo " The options -r -p -c allow an if-then-else contruct" |
|
echo " depending on the operating system:" |
|
echo " <os>:::<A>:::<B>" |
|
echo " <os>:::<A>" |
|
echo " Read as: On linux type <os> use <A> else use <B>" |
|
echo " That means: If the distributer ID or codename in lsb_release" |
|
echo " matches <os>, then <A> is replaced, else <B> is replaced." |
|
echo " The three colons are for splitting <os> from <A> and <B> part." |
|
echo " E.g.: Install package curl on wheezy and npm on olter systems:" |
|
echo " $0 -p wheezy:::curl:::npm" |
|
echo |
|
echo "EXAMPLE:" |
|
echo |
|
echo "$0 -i mwaeckerlin/ubuntu:trusty-i386 \\" |
|
echo " -t deb \\" |
|
echo " -e ANDROID_HOME=/opt/local/android \\" |
|
echo " -d /opt/local/android \\" |
|
echo " -r universe \\" |
|
echo " -r https://dev.marc.waeckerlin.org/repository \\" |
|
echo " -k https://dev.marc.waeckerlin.org/repository/PublicKey \\" |
|
echo " -p mrw-c++" |
|
echo |
|
exit 0 |
|
;; |
|
(-i|--image) shift; |
|
img="$1" |
|
;; |
|
(-t|--targets) shift; |
|
targets="$1" |
|
;; |
|
(-r|--repo) shift; |
|
repos+=("$1") |
|
;; |
|
(-k|--key) shift; |
|
keys+=("$1") |
|
;; |
|
(-e|--env) shift; |
|
envs+=("-e $1") |
|
;; |
|
(-d|--dirs) shift; |
|
dirs+=("-v $1:$1:ro") |
|
;; |
|
(-p|--package) shift; |
|
packages+=("$1") |
|
;; |
|
(-c|--cmd) shift; |
|
commands+=("$1") |
|
;; |
|
(*) |
|
echo "**** ERROR: unknown option '$1', try --help" 1>&2 |
|
exit 1 |
|
;; |
|
esac |
|
if test $# -eq 0; then |
|
echo "**** ERROR: missing value, try --help" 2>61 |
|
exit 1 |
|
fi |
|
shift |
|
done |
|
|
|
function ifthenelse() { |
|
arg="$1" |
|
shift |
|
cmd="$*" |
|
if test "${arg/:::/}" = "${arg}"; then |
|
docker exec ${DOCKER_ID} bash -c "${cmd//ARG/${arg}}" |
|
else |
|
os="${arg%%:::*}" |
|
thenpart="${arg#*:::}" |
|
if test "${thenpart/:::/}" = "${thenpart}"; then |
|
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if test "${os//$(lsb_release -is)/}${os//$(lsb_release -cs)/}" != "${os}${os}"; then '"${cmd//ARG/${thenpart}}"'; fi' |
|
else |
|
elsepart="${thenpart##*:::}" |
|
thenpart="${thenpart%:::*}" |
|
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if test "${os//$(lsb_release -is)/}${os//$(lsb_release -cs)/}" != "${os}${os}"; then '"${cmd//ARG/${thenpart}}"'; else '"${cmd//ARG/${elsepart}}"'; fi' |
|
fi |
|
fi |
|
} |
|
|
|
set -x |
|
|
|
DOCKER_ID=$(docker run -d ${dirs[@]} ${envs[@]} -w /workdir $img sleep infinity) |
|
trap "docker rm -f ${DOCKER_ID}" INT TERM EXIT |
|
docker exec ${DOCKER_ID} apt-get update |
|
docker exec ${DOCKER_ID} apt-get upgrade -y --force-yes |
|
if ! docker exec ${DOCKER_ID} apt-get install -y --force-yes python-software-properties apt-transport-https dpkg-dev lsb-release; then |
|
docker exec ${DOCKER_ID} apt-get install -y --force-yes software-properties-common apt-transport-https dpkg-dev lsb-release |
|
fi |
|
for repo in "${repos[@]}"; do |
|
ifthenelse "${repo}" "apt-add-repository ARG" |
|
done |
|
for key in "${keys[@]}"; do |
|
wget -O- \ |
|
| docker exec -i ${DOCKER_ID} apt-key add - |
|
done |
|
docker exec ${DOCKER_ID} apt-get update |
|
for package in "${packages[@]}"; do |
|
ifthenelse "${package}" "apt-get install -y --force-yes ARG" |
|
done |
|
for command in "${commands[@]}"; do |
|
ifthenelse "${command}" "ARG" |
|
done |
|
docker exec ${DOCKER_ID} ./resolve-debbuilddeps.sh |
|
docker exec -u $(id -u) ${DOCKER_ID} svn upgrade || true |
|
docker exec -u $(id -u) ${DOCKER_ID} ./bootstrap.sh -t "${targets}"
|
|
|