You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

97 lines
2.9 KiB

# -*- mode: shell-script -*-
## This place is not accessible from container on purpose: container
## don't need that. This should be stored in /var/lib/compose/ in a
## project, service directory a little like relation data.
PASSWORD_FILE="$SERVICE_CONFIGSTORE/etc/$SERVICE_NAME/pass"
has_user() {
local user="$1"
if ! out=$(occ user:info "$user"); then
if [ "$out" == "user not found" ]; then
return 1
else
err "Command 'occ user:info $user' failed:"
echo "OUT: '$out'" | prefix " | " >&2
return 2
fi
fi
return 0
}
set_admin_user_password() {
local user="$1" password="$2"
[ -z "$password" ] && {
err "Refusing to set admin user an empty password."
return 3
}
if ! has_user "$user"; then
info "User $user not found. Creating it in default 'admin' group."
(
occ_docker_run_opts=("-e" "OC_PASS=$password")
occ user:add --group=admin --password-from-env --display-name="$user" "$user"
)
else
(
occ_docker_run_opts=("-e" "OC_PASS=$password")
occ user:resetpassword "$user" "--password-from-env"
)
fi
mkdir -p "$(dirname "$PASSWORD_FILE")"
p0 "$user" "$password" > "$PASSWORD_FILE"
}
get_admin_user_password() {
if [ -e "$PASSWORD_FILE" ]; then
cat "$PASSWORD_FILE"
else
return 1
fi
}
create_occ_if_not_exists() {
if ! [ -e "$SERVICE_DATASTORE/var/www/html/occ" ]; then
## Here we use a nasty trick to launch only the initialisation
## part of the ``entrypoint.sh``. By setting 'apache' as first
## call argument, we satisfy the big first 'if' condition
## triggering the installation if necessary, and will fail to
## launch any apache
## Last, we do not want the relation web-proxy to run in this
## bare-minimum nextcloud run AND we will use occ to set some info
## in this very same relation.
export COMPOSE_IGNORE_ORPHANS=true
compose --debug --no-init --without-relation="$SERVICE_NAME":web-proxy run \
--rm --entrypoint /entrypoint.sh "$SERVICE_NAME" apache >&2 || true
if ! [ -e "$SERVICE_DATASTORE/var/www/html/occ" ]; then
err "Expected last command to create /var/www/html/occ"
return 1
fi
fi
}
occ() {
create_occ_if_not_exists
## occ.batch will require /var/www/html to be populated ('occ' is
## supposed to exist). For that we need to make sure nextcloud have
## be ran and setup prior to running this next command.
export COMPOSE_IGNORE_ORPHANS=true
compose --debug -q --no-init --no-relations run \
"${occ_docker_run_opts[@]}" \
-v "$HOST_CHARM_STORE/${CHARM_REL_PATH#${CHARM_STORE}/}/src/occ.batch:/var/www/html/occ.batch" \
-T --rm -u www-data "$SERVICE_NAME" /var/www/html/occ.batch "$@" | cat
return "${PIPESTATUS[0]}"
}