86 lines
2.7 KiB
Bash
86 lines
2.7 KiB
Bash
#!/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
|