Files

62 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
FREEBOX_HOST="${FREEBOX_HOST:-mafreebox.freebox.fr}"
API_BASE="${API_BASE:-http://${FREEBOX_HOST}/api/v8}"
APP_ID="${APP_ID:-fr.bash.reboot}"
APP_NAME="${APP_NAME:-RebootScript}"
APP_VERSION="${APP_VERSION:-1.0}"
DEVICE_NAME="${DEVICE_NAME:-bash-script}"
TOKEN_FILE="${TOKEN_FILE:-./freebox_app_token.txt}"
command -v curl >/dev/null || { echo "curl is required" >&2; exit 1; }
command -v jq >/dev/null || { echo "jq is required" >&2; exit 1; }
echo "Requesting app authorization..."
auth_response="$(
curl -fsS -X POST "${API_BASE}/login/authorize/" \
-H "Content-Type: application/json" \
-d "{
\"app_id\":\"${APP_ID}\",
\"app_name\":\"${APP_NAME}\",
\"app_version\":\"${APP_VERSION}\",
\"device_name\":\"${DEVICE_NAME}\"
}"
)"
app_token="$(jq -r '.result.app_token // empty' <<<"$auth_response")"
track_id="$(jq -r '.result.track_id // empty' <<<"$auth_response")"
if [[ -z "$app_token" || -z "$track_id" ]]; then
echo "Authorization request failed:"
echo "$auth_response"
exit 1
fi
echo "Approve the request on the Freebox now."
echo "track_id: $track_id"
while true; do
status_response="$(curl -fsS "${API_BASE}/login/authorize/${track_id}")"
status="$(jq -r '.result.status // empty' <<<"$status_response")"
case "$status" in
granted)
echo "$app_token" > "$TOKEN_FILE"
chmod 600 "$TOKEN_FILE" 2>/dev/null || true
echo "App token saved to: $TOKEN_FILE"
echo "APP_ID=$APP_ID"
echo "APP_TOKEN=$app_token"
exit 0
;;
denied)
echo "Authorization denied."
exit 1
;;
*)
sleep 2
;;
esac
done