feat: support custom DATA_DIR (fixed #17)

This commit is contained in:
ttionya
2021-03-03 00:02:54 +08:00
parent 5f9035422a
commit b406a37ddf
3 changed files with 65 additions and 12 deletions
+3 -5
View File
@@ -32,7 +32,7 @@ function backup_config() {
color blue "backup bitwarden_rs config" color blue "backup bitwarden_rs config"
if [[ -f "${DATA_CONFIG}" ]]; then if [[ -f "${DATA_CONFIG}" ]]; then
cp -f "${DATA_DIR}/config.json" "${BACKUP_FILE_CONFIG}" cp -f "${DATA_CONFIG}" "${BACKUP_FILE_CONFIG}"
else else
color yellow "not found bitwarden_rs config, skipping" color yellow "not found bitwarden_rs config, skipping"
fi fi
@@ -41,10 +41,8 @@ function backup_config() {
function backup_attachments() { function backup_attachments() {
color blue "backup bitwarden_rs attachments" color blue "backup bitwarden_rs attachments"
local DATA_ATTACHMENTS="attachments" if [[ -d "${DATA_ATTACHMENTS}" ]]; then
tar -c -C "${DATA_ATTACHMENTS_DIRNAME}" -f "${BACKUP_FILE_ATTACHMENTS}" "${DATA_ATTACHMENTS_BASENAME}"
if [[ -d "${DATA_DIR}/${DATA_ATTACHMENTS}" ]]; then
tar -c -C "${DATA_DIR}" -f "${BACKUP_FILE_ATTACHMENTS}" "${DATA_ATTACHMENTS}"
color blue "display attachments tar file list" color blue "display attachments tar file list"
+52 -6
View File
@@ -1,10 +1,6 @@
#!/bin/bash #!/bin/bash
ENV_FILE="/.env" ENV_FILE="/.env"
DATA_DIR="/bitwarden/data"
DATA_DB="${DATA_DIR}/db.sqlite3"
DATA_CONFIG="${DATA_DIR}/config.json"
DATA_ATTACHMENTS="${DATA_DIR}/attachments"
BACKUP_DIR="/bitwarden/backup" BACKUP_DIR="/bitwarden/backup"
RESTORE_DIR="/bitwarden/restore" RESTORE_DIR="/bitwarden/restore"
RESTORE_EXTRACT_DIR="/bitwarden/extract" RESTORE_EXTRACT_DIR="/bitwarden/extract"
@@ -24,7 +20,7 @@ function color() {
green) echo -e "\033[32m$2\033[0m" ;; green) echo -e "\033[32m$2\033[0m" ;;
yellow) echo -e "\033[33m$2\033[0m" ;; yellow) echo -e "\033[33m$2\033[0m" ;;
blue) echo -e "\033[34m$2\033[0m" ;; blue) echo -e "\033[34m$2\033[0m" ;;
none) echo $2 ;; none) echo "$2" ;;
esac esac
} }
@@ -41,6 +37,30 @@ function check_rclone_connection() {
fi fi
} }
########################################
# Check file is exist.
# Arguments:
# file
########################################
function check_file_exist() {
if [[ ! -f "$1" ]]; then
color red "cannot access $2: No such file"
exit 1
fi
}
########################################
# Check directory is exist.
# Arguments:
# directory
########################################
function check_dir_exist() {
if [[ ! -d "$1" ]]; then
color red "cannot access $2: No such directory"
exit 1
fi
}
######################################## ########################################
# Send mail by mailx. # Send mail by mailx.
# Arguments: # Arguments:
@@ -142,7 +162,8 @@ function get_env() {
######################################## ########################################
function init_env() { function init_env() {
# export # export
export_env_file
init_env_dir
# CRON # CRON
get_env CRON get_env CRON
@@ -225,6 +246,11 @@ function init_env() {
TIMEZONE="UTC" TIMEZONE="UTC"
fi fi
color yellow "========================================"
color yellow "DATA_DIR: ${DATA_DIR}"
color yellow "DATA_DB: ${DATA_DB}"
color yellow "DATA_CONFIG: ${DATA_CONFIG}"
color yellow "DATA_ATTACHMENTS: ${DATA_ATTACHMENTS}"
color yellow "========================================" color yellow "========================================"
color yellow "CRON: ${CRON}" color yellow "CRON: ${CRON}"
color yellow "RCLONE_REMOTE_NAME: ${RCLONE_REMOTE_NAME}" color yellow "RCLONE_REMOTE_NAME: ${RCLONE_REMOTE_NAME}"
@@ -244,3 +270,23 @@ function init_env() {
color yellow "TIMEZONE: ${TIMEZONE}" color yellow "TIMEZONE: ${TIMEZONE}"
color yellow "========================================" color yellow "========================================"
} }
function init_env_dir() {
# DATA_DIR
get_env DATA_DIR
DATA_DIR="${DATA_DIR:-"/bitwarden/data"}"
check_dir_exist "${DATA_DIR}"
# DATA_DB
get_env DATA_DB
DATA_DB="${DATA_DB:-"${DATA_DIR}/db.sqlite3"}"
# DATA_CONFIG
DATA_CONFIG="${DATA_DIR}/config.json"
# DATA_ATTACHMENTS
get_env DATA_ATTACHMENTS
DATA_ATTACHMENTS="$(realpath "${DATA_ATTACHMENTS:-"${DATA_DIR}/attachments"}")"
DATA_ATTACHMENTS_DIRNAME="$(dirname "${DATA_ATTACHMENTS}")"
DATA_ATTACHMENTS_BASENAME="$(basename "${DATA_ATTACHMENTS}")"
}
+10 -1
View File
@@ -77,8 +77,16 @@ function restore_config() {
function restore_attachments() { function restore_attachments() {
color blue "restore bitwarden_rs attachments" color blue "restore bitwarden_rs attachments"
# When customizing the attachments folder, the root directory of the tar file
# is the directory name at the time of packing
local RESTORE_FILE_ATTACHMENTS_DIRNAME=$(tar -tf "${DATA_ATTACHMENTS}" | head -n 1 | xargs basename)
local DATA_ATTACHMENTS_EXTRACT="${DATA_ATTACHMENTS}.extract"
rm -rf "${DATA_ATTACHMENTS}" rm -rf "${DATA_ATTACHMENTS}"
tar -x -C "${DATA_DIR}" -f "${RESTORE_FILE_ATTACHMENTS}" mkdir "${DATA_ATTACHMENTS_EXTRACT}"
tar -x -C "${DATA_ATTACHMENTS_EXTRACT}" -f "${RESTORE_FILE_ATTACHMENTS}"
mv "${DATA_ATTACHMENTS_EXTRACT}/${RESTORE_FILE_ATTACHMENTS_DIRNAME}" "${DATA_ATTACHMENTS}"
rf -rf "${DATA_ATTACHMENTS_EXTRACT}"
if [[ $? == 0 ]]; then if [[ $? == 0 ]]; then
color green "restore bitwarden_rs attachments successful" color green "restore bitwarden_rs attachments successful"
@@ -187,6 +195,7 @@ function restore() {
esac esac
done done
init_env_dir
check_empty_input check_empty_input
check_data_dir_exist check_data_dir_exist