#! /bin/bash # shellcheck source=../scripts/helpers/index.sh source /usr/local/bin/helpers/index.sh function _main { [[ ${1:-} == 'help' ]] && { __usage ; exit 0 ; } 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 [] ${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 "${@}"