mirror of
https://github.com/docker-mailserver/docker-mailserver
synced 2024-12-18 14:04:17 +01:00
5908d9f060
* chore: Extract out Dovecot Quota test cases into new test file Test cases are just cut + paste, no logic changed there yet. * chore: Rename test case descriptions * chore: Use `setup ...` methods instead of direct calls * chore: Adjust `_run_in_container_bash` to `_run_in_container` Plus some additional bug fixes in the disabled test case * tests(refactor): Revise ENV test cases for max mailbox and message sizes * tests(refactor): Revise ENV test cases for mailbox and message limits v2 Removes the extra variables and filtering in favour of explicit values instead of matching for comparison. - Easier at a glance to know what is actually expected. - Additionally reworks the quota limit checks in other test cases. Using a different formatter for `doveadm` is easier to match the desired value (`Limit`). * chore: Sync improvement from `tests.bats` master --- NOTE: This PR has been merged to avoid additional maintenance burden without losing the improvements. It was not considered complete, but remaining tasks were not documented in the PR.
74 lines
2.0 KiB
Bash
Executable File
74 lines
2.0 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
|
|
}
|
|
|
|
|
|
# Dovecot docs incorrectly refer to these units with names for SI types (base 10),
|
|
# But then mentions they're actually treated as IEC type (base 2):
|
|
# https://doc.dovecot.org/settings/types/#size
|
|
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 (kibibyte), M (mebibyte), G (gibibyte) or T (tebibyte))'
|
|
fi
|
|
}
|
|
|
|
_main "${@}"
|