docker-mailserver/target/bin/setquota
2023-05-26 01:01:41 +02:00

70 lines
1.8 KiB
Bash
Executable file

#!/bin/bash
# shellcheck source=../scripts/helpers/index.sh
source /usr/local/bin/helpers/index.sh
function _main() {
_require_n_parameters_or_print_usage 1 "${@}"
local MAIL_ACCOUNT="${1}"
shift
local QUOTA="${*}"
_validate_parameters
_manage_dovecot_quota_update "${MAIL_ACCOUNT}" "${QUOTA}"
}
function __usage() {
printf '%s' "${PURPLE}setquota${RED}(${YELLOW}8${RED})
${ORANGE}USAGE${RESET}
./setup.sh quota set <MAIL ACCOUNT> [<QUOTA>]
${ORANGE}OPTIONS${RESET}
${BLUE}Generic Program Information${RESET}
help Print the usage information.
${ORANGE}DESCRIPTION${RESET}
Set a quota (storage limit) for an existing mail account.
The quota value is in bytes. You may use a unit suffix for convenience,
such as 10M for 10 MebiBytes (MiB). A value of 0 opts out of enforcing quota.
${ORANGE}EXAMPLES${RESET}
${LWHITE}./setup.sh quota set user@example.com 5G${RESET}
The account 'user@example.com' is restricted to a 5GiB storage limit.
${ORANGE}EXIT STATUS${RESET}
Exit status is 0 if command was successful. If wrong arguments are provided
or arguments contain errors, the script will exit early with exit status 1.
"
}
function _validate_parameters() {
# MAIL_ACCOUNT
_arg_expect_mail_account
_account_should_already_exist
# QUOTA
_quota_request_if_missing
_quota_unit_is_valid
}
function _quota_request_if_missing() {
if [[ -z ${QUOTA} ]]; then
read -r -p 'Enter quota (e.g. 10M): ' QUOTA
echo
[[ -z "${QUOTA}" ]] && _exit_with_error 'Quota must not be empty (use 0 for unlimited quota)'
fi
}
function _quota_unit_is_valid() {
if ! grep -qE "^([0-9]+(B|k|M|G|T)|0)\$" <<< "${QUOTA}"; then
__usage
_exit_with_error 'Invalid quota format. e.g. 302M (B (byte), k (kilobyte), M (megabyte), G (gigabyte) or T (terabyte))'
fi
}
_main "${@}"