#!/bin/sh
# Automate temporary shell envs

OPT="$1"
ENVDIR="/tmp/env"
ENVSHELL="/bin/bash"

print_title() {
    printf "\033[2m%s\033[0m\n" "$1"
}

print_dialogue() {
    printf "\033[2m%s:\033[0m " "$1"
}

print_warning() {
    printf "\033[31mWarning:\033[0m \033[2m%s\033[0m\n" "$1"
}

help() {
    printf "\033[2mUsage:\033[0m envm [list|create|login|delete]\n"
}

list() {
    print_title "Current users:"
    sed '/^env-.*::\/tmp\/env\/.*:\/bin\/bash$/!d;s/^env-//g;s/:.*::/ -> /g;s/:/ -> /g' /etc/passwd
}

create() {
    print_warning 'super user privileges are needed for user and home creation'
    print_dialogue 'Create user' && read -r ENVUSER
    ENVNAME="env-$ENVUSER"
    sudo mkdir -p "$ENVDIR"
    sudo useradd -m -d $ENVDIR/$ENVUSER -s $ENVSHELL $ENVNAME
}

login() {
    list && echo
    print_warning 'super user privileges are needed for login'
    print_dialogue 'Login as' && read -r ENVUSER
    [ -z "$ENVUSER" ] && print_warning 'Empty user' && return 0
    ENVNAME="env-$ENVUSER"
    sudo su - "$ENVNAME"
}

delete() {
    list && echo
    print_warning 'super user privileges are needed for user and home deletion'
    print_dialogue 'Delete user' && read -r ENVUSER
    [ -z "$ENVUSER" ] && print_warning 'Empty user' && return 0
    ENVNAME="env-$ENVUSER"
    sudo rm -rfv $ENVDIR/$ENVUSER
    sudo userdel $ENVNAME
}

[ "$OPT" = "" ] && help && list
[ "$OPT" = "help" ] && help
[ "$OPT" = "list" ] && list
[ "$OPT" = "create" ] && create
[ "$OPT" = "login" ] && login
[ "$OPT" = "delete" ] && delete