#!/command/with-contenv bashio
# shellcheck shell=bash
# ==============================================================================
# Home Assistant Community Add-on: Vaultwarden
# Runs the Vaultwarden server
# ==============================================================================
declare admin_token
declare log_level
declare request_size_limit
declare secret_key

# Set defaults
export DATA_FOLDER=/data
export ROCKET_PORT=80
export ROCKET_WORKERS=2

# Set a random secret, to remove confusing warning from logs.
secret_key=$(openssl rand -base64 32)
export ROCKET_SECRET_KEY="${secret_key}"

# Find the matching log level
if bashio::config.has_value 'log_level'; then
    case "$(bashio::string.lower "$(bashio::config 'log_level')")" in
        all|trace)
            log_level="trace"
            ;;
        debug)
            log_level="debug"
            ;;
        info|notice)
            log_level="info"
            ;;
        warning)
            log_level="warn"
            ;;
        error|fatal)
            log_level="error"
            ;;
        off)
            log_level="off"
            ;;
    esac

    export LOG_LEVEL="${log_level}"
fi

# Show admin token in the log, if config does not exist.
if ! bashio::fs.file_exists '/data/config.json'; then
    admin_token=$(openssl rand -base64 48)
    export ADMIN_TOKEN="${admin_token}"

    bashio::log.info
    bashio::log.info
    bashio::log.info "READ THIS CAREFULLY! READ THIS CAREFULLY!"
    bashio::log.info
    bashio::log.info
    bashio::log.info "This is your temporary random admin token/password!"
    bashio::log.info
    bashio::log.info "${admin_token}"
    bashio::log.info
    bashio::log.info "Be sure to change it in the admin panel, as soon as possible."
    bashio::log.info
    bashio::log.info "After you have changed ANY setting in the admin panel,"
    bashio::log.info "the add-on will NOT generate a new token on each start"
    bashio::log.info "and stops showing this message."
    bashio::log.info
fi

# API request size limit
if bashio::config.has_value 'request_size_limit'; then
    request_size_limit=$(bashio::config 'request_size_limit')
    export ROCKET_LIMITS="{json=${request_size_limit}}"
fi

# Run the Bitwarden server
bashio::log.info 'Starting the Vaultwarden server...'
cd /opt || bashio::exit.nok
exec ./vaultwarden
