#!/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