pubsub_setup: rework options, allow to specify options or use a config by feedn… | |
git clone git://git.codemadness.org/pubsubhubbubblub | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 7d7c140fbc467e67745eb166c29f276b9d634a0a | |
parent 584f6877875619a77ee4435d3e4621e560ae48eb | |
Author: Hiltjo Posthuma <[email protected]> | |
Date: Sat, 28 May 2022 14:02:38 +0200 | |
pubsub_setup: rework options, allow to specify options or use a config by feedn… | |
Diffstat: | |
M README | 11 +++++++---- | |
M pubsub_setup | 102 ++++++++++++++++-------------… | |
2 files changed, 60 insertions(+), 53 deletions(-) | |
--- | |
diff --git a/README b/README | |
@@ -123,15 +123,18 @@ Get the hub and feed URL: | |
Setup the feed structure for the CGI program and also subscribe to the hub usi… | |
cd /var/www/pubsub-data | |
- pubsub_setup -s -b 'https://codemadness.org/pubsub/' \ | |
- 'slashdot' 'http://pubsubhubbub.appspot.com/' 'http://rss.slas… | |
+ pubsub_setup \ | |
+ -b 'https://codemadness.org/pubsub/' \ | |
+ -f 'slashdot' \ | |
+ -h 'http://pubsubhubbub.appspot.com/' \ | |
+ -t 'http://rss.slashdot.org/Slashdot/slashdot' | |
+ pubsub_setup -s -f 'slashdot' | |
Unsubscribe from a hub: | |
cd /var/www/pubsub-data | |
- pubsub_setup -u -b 'https://codemadness.org/pubsub/' \ | |
- 'slashdot' 'http://pubsubhubbub.appspot.com/' 'http://rss.slas… | |
+ pubsub_setup -u -f 'slashdot' | |
Monitor script example | |
diff --git a/pubsub_setup b/pubsub_setup | |
@@ -1,30 +1,51 @@ | |
#!/bin/sh | |
-while getopts "b:su" f; do | |
+usage() { | |
+ printf "usage: %s [-s] [-u] <-b base_callback> <-f feedname> <-h hub> … | |
+ printf "or\n" >&2 | |
+ printf "usage: %s [-s] [-u] <-f feedname>\n" "$0" >&2 | |
+ exit 1 | |
+} | |
+ | |
+base="" | |
+feedname="" | |
+hub="" | |
+topic="" | |
+dosubscribe=0 | |
+dounsubscribe=0 | |
+while getopts "b:f:h:t:su" f; do | |
case "${f}" in | |
b) base="${OPTARG}";; | |
+ f) feedname="${OPTARG}";; | |
+ h) hub="${OPTARG}";; | |
+ t) topic="${OPTARG}";; | |
s) dosubscribe=1;; | |
u) dounsubscribe=1;; | |
esac | |
done | |
shift $(expr ${OPTIND} - 1) | |
-feedname="$1" | |
-hub="$2" | |
-topic="$3" | |
-if test "$1" = "" -o "$2" = "" -o "$3" = "" -o "$base" = ""; then | |
- printf "usage: %s <-b base_callback> [-s] [-u] <feedname> <hub> <topic… | |
- exit 1 | |
+if test "${feedname}" != "" && test "${base}" = "" -o "${hub}" = "" -o "${topi… | |
+ test -d "config/${feedname}" || usage # if specifying only -f then it … | |
+ # read settings. | |
+ callback="$(cat "config/${feedname}/callback" 2>/dev/null)" | |
+ hub="$(cat "config/${feedname}/hub" 2>/dev/null)" | |
+ topic="$(cat "config/${feedname}/topic" 2>/dev/null)" | |
+ | |
+ test "${callback}" = "" -o "${hub}" = "" -o "${topic}" = "" && usage | |
+elif test "${base}" = "" -o "${feedname}" = "" -o "${hub}" = "" -o "${topic}" … | |
+ usage | |
fi | |
+ | |
# make sure it has a / at the end. | |
base="${base%%/}/" | |
-# Linux | |
+# sha256sum, typically on Linux. | |
shacmd="$(command -v sha256sum)" | |
-# BSD | |
+# sha256, typically on (OpenBSD)BSD. | |
test "${shacmd}" = "" && shacmd=$(command -v sha256) | |
if test "${shacmd}" = ""; then | |
- echo "no sha256 or sha256sum tool found" >&2 | |
+ log_error "no sha256 or sha256sum tool found" >&2 | |
exit 1 | |
fi | |
@@ -45,30 +66,21 @@ log_error() { | |
# subscribe(feedname, hub, topic, callback, mode, secret) | |
subscribe() { | |
- feedname="$1" | |
- hub="$2" | |
- topic="$3" | |
- callback="$4" | |
- mode="${5:-subscribe}" | |
- secret="$6" | |
- verify="async" # or "sync" | |
- lease_seconds="" | |
- | |
# if curl -s -f -H 'User-Agent:' -m 15 \ | |
# DEBUG | |
if curl -v -f -H 'User-Agent:' -m 15 \ | |
-L --max-redirs 3 \ | |
- --data-raw "hub.callback=${callback}" \ | |
- --data-raw "hub.lease_seconds=${lease_seconds}" \ | |
- --data-raw "hub.mode=${mode}" \ | |
- --data-raw "hub.secret=${secret}" \ | |
- --data-raw "hub.topic=${topic}" \ | |
- --data-raw "hub.verify=${verify}" \ | |
- "${hub}/subscribe"; then | |
- log "${mode} OK" | |
+ --data-raw "hub.callback=$4" \ | |
+ --data-raw "hub.lease_seconds=" \ | |
+ --data-raw "hub.mode=$5" \ | |
+ --data-raw "hub.secret=$6" \ | |
+ --data-raw "hub.topic=$3" \ | |
+ --data-raw "hub.verify=sync" \ | |
+ "$2/subscribe"; then | |
+ log "$5 OK" | |
return 0 | |
else | |
- log_error "${mode} FAIL" | |
+ log_error "$5 FAIL" | |
return 1 | |
fi | |
} | |
@@ -83,40 +95,36 @@ mkdir -p "tmp/${feedname}" | |
# create log if it does not exist. | |
test -f "log" || touch "log" | |
-if test "${dosubscribe}" = "1"; then | |
- f="config/${feedname}/hub" | |
- if test -f "${f}"; then | |
- log_error "already registered? file exists: ${f}, skipping sub… | |
- exit 1 | |
- fi | |
-fi | |
- | |
# generate random token if it does not exist. | |
f="config/${feedname}/token" | |
-if ! test -f "${f}" -a "${isnew}" = "1"; then | |
+if ! test -f "${f}" && test "${isnew}" = "1"; then | |
token="$(dd if=/dev/urandom count=10 bs=4096 2>/dev/null | sha)" | |
echo "${token}" > "${f}" | |
fi | |
# generate random secret if it does not exist. | |
f="config/${feedname}/secret" | |
-if ! test -f "${f}" -a "${isnew}" = "1"; then | |
+if ! test -f "${f}" && test "${isnew}" = "1"; then | |
secret="$(dd if=/dev/urandom count=10 bs=4096 2>/dev/null | sha)" | |
echo "${secret}" > "${f}" | |
fi | |
# read config. | |
-f="config/${feedname}/token" | |
-token=$(cat "${f}" 2>/dev/null) | |
-callback="$1/${token}" | |
f="config/${feedname}/secret" | |
secret=$(cat "${f}" 2>/dev/null) | |
+if test "${callback}" = ""; then | |
+ f="config/${feedname}/token" | |
+ token=$(cat "${f}" 2>/dev/null) | |
+ callback="${base}${feedname}/${token}" | |
+ printf '%s\n' "${callback}" > "config/${feedname}/callback" | |
+fi | |
-callback="${base}${feedname}/${token}" | |
+printf '%s\n' "${hub}" > "config/${feedname}/hub" | |
+printf '%s\n' "${topic}" > "config/${feedname}/topic" | |
status=0 | |
if test "${dosubscribe}" = "1"; then | |
- f="config/${feedname}/hub" | |
+ f="config/${feedname}/ok" | |
if test -f "${f}"; then | |
log_error "already registered? file exists: ${f}, skipping sub… | |
exit 1 | |
@@ -124,9 +132,7 @@ if test "${dosubscribe}" = "1"; then | |
# register at hub. save state when successfully registered. | |
if subscribe "${feedname}" "${hub}" "${topic}" "${callback}" "subscrib… | |
- printf '%s\n' "${callback}" > "config/${feedname}/callback" | |
- printf '%s\n' "${hub}" > "config/${feedname}/hub" | |
- printf '%s\n' "${topic}" > "config/${feedname}/topic" | |
+ touch "config/${feedname}/ok" | |
else | |
status=1 | |
fi | |
@@ -135,9 +141,7 @@ fi | |
if test "${dounsubscribe}" = "1"; then | |
# unregister at hub. remove state when successfully registered. | |
if subscribe "${feedname}" "${hub}" "${topic}" "${callback}" "unsubscr… | |
- rm -f "config/${feedname}/callback" | |
- rm -f "config/${feedname}/hub" | |
- rm -f "config/${feedname}/topic" | |
+ rm -f "config/${feedname}/ok" | |
else | |
status=1 | |
fi |