Mercurial > gemma
view schema/install-db.sh @ 521:139214cecc8f
backend: add FIXMEs to password reset.
* Add FIXMEs to write down knowledge about how the password request
probably has to be improved.
author | Bernhard Reiter <bernhard@intevation.de> |
---|---|
date | Mon, 27 Aug 2018 17:09:51 +0200 |
parents | 3af7ca761f6a |
children | ad07846b09d1 |
line wrap: on
line source
#!/bin/bash -e # Author(s): # Sascha Wilde <wilde@intevation.de> ME=`basename "$0"` BASEDIR=`dirname "$0"` usage() { cat <<EOF $ME [OPTION]... Options: -d, --db=NAME create the database NAME. Default: "gemma" -p, --port=PORT connect do the postgresql cluster at PORT. Default is the postgresql standard port 5432 -D, --demo also install demo accounts and data --adminpw set the password to use for the "sysadmin" account. Default is a random password. --metapw set the password to use for the "meta_login" account. Default is a random password. --drop drop database and all roles --help display this help and exit EOF } fatal() { echo >&2 "$1" exit 23 } genpw() # $1 - length { dd count=1 if=/dev/urandom 2>/dev/null \ | tr -cd '[:alnum:],._!?-' | tail -c "$1" } # Defaults: db=gemma port=5432 demo=0 drop=0 adminpw=`genpw 15` metapw=`genpw 15` # Parse options: OPTS=`getopt \ -l help,demo,db:,port:,drop,adminpw:,metapw: \ -o Dd:p: -n "$ME" -- "$@"` [ $? -eq 0 ] || { usage ; exit 1 ; } eval set -- "$OPTS" while true ; do case "$1" in --db|-d) db="$2" shift 2 ;; --port|-p) port="$2" shift 2 ;; --adminpw) adminpw="$2" shift 2 ;; --metapw) metapw="$2" shift 2 ;; --demo|-D) demo=1 shift 1 ;; --drop) drop=1 shift 1 ;; --help) { usage ; exit 0 ; } ;; --) shift break ;; esac done # Main ------------------------------------------------------------ if [[ drop -eq 0 ]] ; then # Default operation: create schema createdb -p "$port" "$db" psql -q -p "$port" -f "$BASEDIR/roles.sql" -d "$db" psql -qtv ON_ERROR_STOP= -p "$port" -d "$db" \ -c "SET client_min_messages TO WARNING;" \ -f "$BASEDIR/gemma.sql" \ -f "$BASEDIR/manage_users.sql" \ -f "$BASEDIR/auth.sql" # setup initial login roles with given passwords: psql -qt -p "$port" -d "$db" \ -v adminpw="$adminpw" -v metapw="$metapw" \ -f "$BASEDIR/std_login_roles.sql" if [[ $demo -eq 1 ]] ; then psql -qv ON_ERROR_STOP= -p "$port" \ -f "$BASEDIR/demo-data/responsibility_areas.sql" \ -f "$BASEDIR/demo-data/users.sql" -d "$db" psql -q -p "$port" -f "$BASEDIR/demo-data/roles.sql" \ -d "$db" fi else # Evil mode: drop everything gemma echo "Really drop database '$db' and all gemma roles? [type 'yes']: " read a if [[ $a == "yes" ]] ; then dropdb -p "$port" "$db" psql -p $port -A -t -c '\du' | awk -F '|' -v port=$port \ '$1 "." $3 ~ /waterway_user|waterway_admin|sys_admin|metamorph/ \ { system("dropuser -p " port " \"" $1 "\"") }' else echo "No harm done." fi fi