nextcloud-install/docker/add-user.sh
2026-06-24 09:23:58 +03:00

86 lines
2.7 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# Интерактивное создание пользователя Nextcloud (Docker)
#
# Использование:
# ./add-user.sh
# ./add-user.sh bob 'SecretPass' 10GB
# ./add-user.sh bob 'SecretPass' none admin,users
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "${SCRIPT_DIR}"
# shellcheck source=../lib/common.sh
source "${SCRIPT_DIR}/../lib/common.sh"
drop_root_if_sudo "${SCRIPT_DIR}/add-user.sh" "$@"
[[ -f .env ]] || { echo "[ERROR] Сначала: ./install.sh"; exit 1; }
check_docker_access || exit 1
USER_NAME="${1:-}"
USER_PASS="${2:-}"
USER_QUOTA="${3:-}"
USER_GROUPS="${4:-}"
prompt() {
local var_name="$1"
local prompt_text="$2"
local secret="${3:-false}"
local value=""
if [[ -n "${!var_name:-}" ]]; then
return 0
fi
if [[ "${secret}" == true ]]; then
read -r -s -p "${prompt_text}: " value
echo ""
else
read -r -p "${prompt_text}: " value
fi
printf -v "${var_name}" '%s' "${value}"
}
prompt USER_NAME "Логин нового пользователя"
prompt USER_PASS "Пароль" true
prompt USER_QUOTA "Квота (none / 1GB / 5GB / 10GB / 100GB) [default]"
prompt USER_GROUPS "Группы через запятую (пусто = только users)"
[[ -n "${USER_NAME}" && -n "${USER_PASS}" ]] || {
echo "[ERROR] Логин и пароль обязательны"
exit 1
}
if run_compose exec -T -u www-data app php occ user:list | grep -q "^ - ${USER_NAME}$"; then
echo "[ERROR] Пользователь '${USER_NAME}' уже существует"
exit 1
fi
echo "[INFO] Создание пользователя ${USER_NAME}..."
export OC_PASS="${USER_PASS}"
run_compose exec -T -u www-data -e OC_PASS app php occ user:add "${USER_NAME}" --password-from-env
unset OC_PASS
QUOTA="${USER_QUOTA:-default}"
run_compose exec -T -u www-data app php occ user:setting "${USER_NAME}" files quota "${QUOTA}"
IFS=',' read -ra GROUPS <<< "${USER_GROUPS}"
for g in "${GROUPS[@]}"; do
g="$(echo "${g}" | xargs)"
[[ -z "${g}" ]] && continue
run_compose exec -T -u www-data app php occ group:adduser "${g}" "${USER_NAME}" 2>/dev/null \
|| echo "[WARN] Не удалось добавить в группу: ${g}"
done
# Группа users по умолчанию
run_compose exec -T -u www-data app php occ group:adduser users "${USER_NAME}" 2>/dev/null || true
echo ""
echo "[INFO] Пользователь создан:"
echo " Логин: ${USER_NAME}"
echo " Квота: ${QUOTA}"
[[ -n "${USER_GROUPS}" ]] && echo " Группы: ${USER_GROUPS}, users"
echo ""
run_compose exec -T -u www-data app php occ user:info "${USER_NAME}" 2>/dev/null || true