45 lines
1.3 KiB
Bash
Executable File
45 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
readonly GRAPH_API_VERSION="v25.0"
|
|
readonly PSID="27511427698460020"
|
|
readonly ASID="122111097783118257"
|
|
readonly APP_ID="26934819589512827"
|
|
readonly APP_SECRET="TODO_APP_SECRET"
|
|
readonly PAGE_ACCESS_TOKEN="TODO_PAGE_ACCESS_TOKEN"
|
|
|
|
appsecret_proof="$(
|
|
node -e '
|
|
const crypto = require("crypto");
|
|
const token = process.argv[1].trim();
|
|
const secret = process.argv[2].trim();
|
|
process.stdout.write(
|
|
crypto.createHmac("sha256", secret).update(token).digest("hex")
|
|
);
|
|
' "$PAGE_ACCESS_TOKEN" "$APP_SECRET"
|
|
)"
|
|
|
|
response="$(
|
|
curl -sS -G "https://graph.facebook.com/${GRAPH_API_VERSION}/${PSID}/ids_for_apps" \
|
|
--data-urlencode "app=${APP_ID}" \
|
|
--data-urlencode "access_token=${PAGE_ACCESS_TOKEN}" \
|
|
--data-urlencode "appsecret_proof=${appsecret_proof}"
|
|
)"
|
|
|
|
echo "$response"
|
|
|
|
if echo "$response" | node -e '
|
|
const fs = require("fs");
|
|
const expected = process.argv[1];
|
|
const payload = JSON.parse(fs.readFileSync(0, "utf8"));
|
|
const matched = Array.isArray(payload.data)
|
|
&& payload.data.some((item) => item && String(item.id) === expected);
|
|
process.exit(matched ? 0 : 1);
|
|
' "$ASID"; then
|
|
echo "Matched: PSID maps to ASID ${ASID}."
|
|
exit 0
|
|
fi
|
|
|
|
echo "Not matched: PSID does not map to ASID ${ASID}."
|
|
exit 1
|