Files
2026-10-30 06:48:02 -06:00

49 lines
1.9 KiB
Bash

#!/bin/bash
#
# Purpose : Nextcloud app passwords for configure.d items. Source this file.
# Basic auth header for curl, read from stdin (-H @-) so the password isn't
# in the process list
auth_header() {
printf 'Authorization: Basic %s\n' "$(printf '%s:%s' "$1" "$2" | base64 -w0)"
}
# Create a Nextcloud app password, so what CoreDesktop sets up doesn't keep
# your Core password. It shows in Nextcloud under Settings > Security with the
# name given, where it can be revoked. Uses CORE_USER, PASSWORD and NEXTCLOUD;
# sets APP_PASSWORD. Returns 2 if Nextcloud says the password is wrong.
nextcloud_app_password() {
local name="$1" response code
response="$(auth_header "$CORE_USER" "$PASSWORD" | curl -s -w '\n%{http_code}' -H @- \
-H 'OCS-APIRequest: true' -A "$name" \
"$NEXTCLOUD/ocs/v2.php/core/getapppassword?format=json")"
code="${response##*$'\n'}"
case "$code" in
200) APP_PASSWORD="$(jq -r '.ocs.data.apppassword // empty' <<< "${response%$'\n'*}")"
[ -n "$APP_PASSWORD" ] ;;
401) return 2 ;;
*) return 1 ;;
esac
}
# Revoke an app password, signing in with it. Uses CORE_USER and NEXTCLOUD.
nextcloud_revoke_app_password() {
auth_header "$CORE_USER" "$1" | curl -sf -o /dev/null -X DELETE -H @- \
-H 'OCS-APIRequest: true' "$NEXTCLOUD/ocs/v2.php/core/apppassword"
}
# Sign in to Nextcloud as CORE_USER with a password ($1), or PASSWORD if not
# given. Signing in with your Core password (not an app password) also turns
# back on the app passwords Nextcloud turned off when the Core password
# changed. Uses NEXTCLOUD. Returns 2 if Nextcloud says the password is wrong.
nextcloud_sign_in() {
local code
code="$(auth_header "$CORE_USER" "${1:-$PASSWORD}" | curl -s -o /dev/null -w '%{http_code}' -H @- \
-H 'OCS-APIRequest: true' "$NEXTCLOUD/ocs/v2.php/cloud/user?format=json")"
case "$code" in
200) return 0 ;;
401) return 2 ;;
*) return 1 ;;
esac
}