* ADD: initial commit
This commit is contained in:
196
vaultwarden-backup/app/includes.sh
Normal file
196
vaultwarden-backup/app/includes.sh
Normal file
@@ -0,0 +1,196 @@
|
||||
#!/bin/bash
|
||||
|
||||
ENV_FILE="/.env"
|
||||
CRON_CONFIG_FILE="${HOME}/crontabs"
|
||||
BACKUP_DIR="/backups/tmp"
|
||||
RESTORE_DIR="/restore"
|
||||
RESTORE_EXTRACT_DIR="/extract"
|
||||
|
||||
########################################
|
||||
# Check file is exist.
|
||||
# Arguments:
|
||||
# file
|
||||
########################################
|
||||
function check_file_exist() {
|
||||
if [[ ! -f "$1" ]]; then
|
||||
echo "cannot access $1: No such file"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
########################################
|
||||
# Check directory is exist.
|
||||
# Arguments:
|
||||
# directory
|
||||
########################################
|
||||
function check_dir_exist() {
|
||||
if [[ ! -d "$1" ]]; then
|
||||
echo "cannot access $1: No such directory"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
########################################
|
||||
# Configure PostgreSQL password file.
|
||||
# Arguments:
|
||||
# None
|
||||
########################################
|
||||
function configure_postgresql() {
|
||||
echo "${POSTGRES_HOST}:${POSTGRES_PORT}:${POSTGRES_DB}:${POSTGRES_USER}:${POSTGRES_PASSWORD}" > ~/.pgpass
|
||||
chmod 0600 ~/.pgpass
|
||||
}
|
||||
|
||||
########################################
|
||||
# Export variables from .env file.
|
||||
# Arguments:
|
||||
# None
|
||||
# Outputs:
|
||||
# variables with prefix 'DOTENV_'
|
||||
# Reference:
|
||||
# https://gist.github.com/judy2k/7656bfe3b322d669ef75364a46327836#gistcomment-3632918
|
||||
########################################
|
||||
function export_env_file() {
|
||||
if [[ -f "${ENV_FILE}" ]]; then
|
||||
echo "find \"${ENV_FILE}\" file and export variables"
|
||||
set -a
|
||||
source <(cat "${ENV_FILE}" | sed -e '/^#/d;/^\s*$/d' -e 's/\(\w*\)[ \t]*=[ \t]*\(.*\)/DOTENV_\1=\2/')
|
||||
set +a
|
||||
fi
|
||||
}
|
||||
|
||||
########################################
|
||||
# Get variables from
|
||||
# environment variables,
|
||||
# secret file in environment variables,
|
||||
# secret file in .env file,
|
||||
# environment variables in .env file.
|
||||
# Arguments:
|
||||
# variable name
|
||||
# Outputs:
|
||||
# variable value
|
||||
########################################
|
||||
function get_env() {
|
||||
local VAR="$1"
|
||||
local VAR_FILE="${VAR}_FILE"
|
||||
local VAR_DOTENV="DOTENV_${VAR}"
|
||||
local VAR_DOTENV_FILE="DOTENV_${VAR_FILE}"
|
||||
local VALUE=""
|
||||
|
||||
if [[ -n "${!VAR:-}" ]]; then
|
||||
VALUE="${!VAR}"
|
||||
elif [[ -n "${!VAR_FILE:-}" ]]; then
|
||||
VALUE="$(cat "${!VAR_FILE}")"
|
||||
elif [[ -n "${!VAR_DOTENV_FILE:-}" ]]; then
|
||||
VALUE="$(cat "${!VAR_DOTENV_FILE}")"
|
||||
elif [[ -n "${!VAR_DOTENV:-}" ]]; then
|
||||
VALUE="${!VAR_DOTENV}"
|
||||
fi
|
||||
|
||||
export "${VAR}=${VALUE}"
|
||||
}
|
||||
|
||||
########################################
|
||||
# Initialization environment variables.
|
||||
# Arguments:
|
||||
# None
|
||||
# Outputs:
|
||||
# environment variables
|
||||
########################################
|
||||
function init_env() {
|
||||
# export
|
||||
export_env_file
|
||||
|
||||
init_env_dir
|
||||
init_env_db
|
||||
|
||||
# CRON
|
||||
get_env CRON
|
||||
CRON="${CRON:-"5 * * * *"}"
|
||||
|
||||
# BACKUP_KEEP_DAYS
|
||||
get_env BACKUP_KEEP_DAYS
|
||||
BACKUP_KEEP_DAYS="${BACKUP_KEEP_DAYS:-"0"}"
|
||||
|
||||
# BACKUP_FILE_DATE_FORMAT
|
||||
get_env BACKUP_FILE_SUFFIX
|
||||
get_env BACKUP_FILE_DATE
|
||||
get_env BACKUP_FILE_DATE_SUFFIX
|
||||
BACKUP_FILE_DATE="$(echo "${BACKUP_FILE_DATE:-"%Y%m%d"}${BACKUP_FILE_DATE_SUFFIX}" | sed 's/[^0-9a-zA-Z%_-]//g')"
|
||||
BACKUP_FILE_DATE_FORMAT="$(echo "${BACKUP_FILE_SUFFIX:-"${BACKUP_FILE_DATE}"}" | sed 's/\///g')"
|
||||
|
||||
# HEALTHCHECK_FILE
|
||||
get_env HEALTHCHECK_FILE
|
||||
HEALTHCHECK_FILE="${HEALTHCHECK_FILE:-/app/health}"
|
||||
|
||||
# TIMEZONE
|
||||
get_env TIMEZONE
|
||||
local TIMEZONE_MATCHED_COUNT=$(ls "/usr/share/zoneinfo/${TIMEZONE}" 2> /dev/null | wc -l)
|
||||
if [[ "${TIMEZONE_MATCHED_COUNT}" -ne 1 ]]; then
|
||||
TIMEZONE="UTC"
|
||||
fi
|
||||
|
||||
echo "========================================"
|
||||
echo "DATA_DIR: ${DATA_DIR}"
|
||||
echo "DATA_CONFIG: ${DATA_CONFIG}"
|
||||
echo "DATA_RSAKEY: ${DATA_RSAKEY}"
|
||||
echo "DATA_ATTACHMENTS: ${DATA_ATTACHMENTS}"
|
||||
echo "DATA_SENDS: ${DATA_SENDS}"
|
||||
echo "========================================"
|
||||
|
||||
echo "DB_URL: postgresql://${POSTGRES_USER}:***(${#POSTGRES_PASSWORD} Chars)@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}"
|
||||
|
||||
echo "========================================"
|
||||
echo "CRON: ${CRON}"
|
||||
|
||||
echo "BACKUP_FILE_DATE_FORMAT: ${BACKUP_FILE_DATE_FORMAT} (example \"[filename].$(date +"${BACKUP_FILE_DATE_FORMAT}").[ext]\")"
|
||||
echo "BACKUP_KEEP_DAYS: ${BACKUP_KEEP_DAYS}"
|
||||
|
||||
echo "TIMEZONE: ${TIMEZONE}"
|
||||
|
||||
echo HEALTHCHECK_FILE="${HEALTHCHECK_FILE:-$APP_DIR/health}"
|
||||
echo "========================================"
|
||||
}
|
||||
|
||||
function init_env_dir() {
|
||||
# DATA_DIR
|
||||
get_env DATA_DIR
|
||||
DATA_DIR="${DATA_DIR:-"/data"}"
|
||||
check_dir_exist "${DATA_DIR}"
|
||||
|
||||
# DATA_CONFIG
|
||||
DATA_CONFIG="${DATA_DIR}/config.json"
|
||||
|
||||
# DATA_ATTACHMENTS
|
||||
get_env DATA_ATTACHMENTS
|
||||
DATA_ATTACHMENTS="$(dirname "${DATA_ATTACHMENTS:-"${DATA_DIR}/attachments"}/useless")"
|
||||
DATA_ATTACHMENTS_DIRNAME="$(dirname "${DATA_ATTACHMENTS}")"
|
||||
DATA_ATTACHMENTS_BASENAME="$(basename "${DATA_ATTACHMENTS}")"
|
||||
|
||||
# DATA_SEND
|
||||
get_env DATA_SENDS
|
||||
DATA_SENDS="$(dirname "${DATA_SENDS:-"${DATA_DIR}/sends"}/useless")"
|
||||
DATA_SENDS_DIRNAME="$(dirname "${DATA_SENDS}")"
|
||||
DATA_SENDS_BASENAME="$(basename "${DATA_SENDS}")"
|
||||
}
|
||||
|
||||
function init_env_db() {
|
||||
DB_TYPE="POSTGRESQL"
|
||||
|
||||
# POSTGRES_HOST
|
||||
get_env POSTGRES_HOST
|
||||
|
||||
# PG_PORT
|
||||
get_env POSTGRES_PORT
|
||||
POSTGRES_PORT="${POSTGRES_PORT:-"5432"}"
|
||||
|
||||
# POSTGRES_DB
|
||||
get_env POSTGRES_DB
|
||||
POSTGRES_DB="${POSTGRES_DB:-"vaultwarden"}"
|
||||
|
||||
# POSTGRES_USER
|
||||
get_env POSTGRES_USER
|
||||
POSTGRES_USER="${POSTGRES_USER:-"vaultwarden"}"
|
||||
|
||||
# POSTGRES_PASSWORD
|
||||
get_env POSTGRES_PASSWORD
|
||||
}
|
||||
Reference in New Issue
Block a user