Introduction
Introduction Statistics Contact Development Disclaimer Help
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
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.