diff --git a/scnserver/website/scn_send.sh.txt b/scn_send.sh similarity index 82% rename from scnserver/website/scn_send.sh.txt rename to scn_send.sh index 58897d3..f39545e 100644 --- a/scnserver/website/scn_send.sh.txt +++ b/scn_send.sh @@ -14,13 +14,10 @@ # or scn_send "@${channel} "${title}" ${content}" # or scn_send "@${channel} "${title}" ${content}" "${priority:0|1|2}" # +# content can be of format "--scnsend-read-body-from-file={path}" to read body from file +# (this circumvents max commandline length) # -################################################################################ -# INSERT YOUR DATA HERE # -################################################################################ -user_id="999" # your user_id -user_key="??" # use userkey with SEND permissions on the used channel ################################################################################ usage() { @@ -34,16 +31,40 @@ function cfgcol { [ -t 1 ] && [ -n "$(tput colors)" ] && [ "$(tput colors)" -ge function rederr() { if cfgcol; then >&2 echo -e "\x1B[31m$1\x1B[0m"; else >&2 echo "$1"; fi; } function green() { if cfgcol; then echo -e "\x1B[32m$1\x1B[0m"; else echo "$1"; fi; } +################################################################################ + +# +# Get env 'SCN_UID' and 'SCN_KEY' from conf file +# +# shellcheck source=/dev/null +. "/etc/scn.conf" +SCN_UID=${SCN_UID:-} +SCN_KEY=${SCN_KEY:-} + +[ -z "${SCN_UID}" ] && { rederr "Missing config value 'SCN_UID' in /etc/scn.conf"; exit 1; } +[ -z "${SCN_KEY}" ] && { rederr "Missing config value 'SCN_KEY' in /etc/scn.conf"; exit 1; } + +################################################################################ + args=( "$@" ) title="" content="" channel="" -priority=1 +priority="" usr_msg_id="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)" sendtime="$(date +%s)" sender="$(hostname)" +if command -v srvname &> /dev/null; then + sender="$( srvname )" +fi + +if [[ "${args[0]}" = "--" ]]; then + # only positional args form here on (currently not handled) + args=("${args[@]:1}") +fi + if [ ${#args[@]} -lt 1 ]; then rederr "[ERROR]: no title supplied via parameter" usage @@ -83,6 +104,11 @@ if [ ${#args[@]} -gt 0 ]; then exit 1 fi +if [[ "$content" == --scnsend-read-body-from-file=* ]]; then + path="$( awk '{ print substr($0, 31) }' <<< "$content" )" + content="$( cat "$path" )" +fi + curlparams=() curlparams+=( "--data-urlencode" "user_id=${SCN_UID}" ) diff --git a/scnserver/Makefile b/scnserver/Makefile index 68a5edb..3acbdd8 100644 --- a/scnserver/Makefile +++ b/scnserver/Makefile @@ -45,10 +45,10 @@ swagger: pygmentize: website/scn_send.html -website/scn_send.html: website/scn_send.sh.txt - _pygments/pygmentizew -l bash -f html "$(shell pwd)/website/scn_send.sh.txt" > "$(shell pwd)/website/scn_send.html" - _pygments/pygmentizew -S monokai -f html > "$(shell pwd)/website/css/pygmnetize-dark.css" - _pygments/pygmentizew -S borland -f html > "$(shell pwd)/website/css/pygmnetize-light.css" +website/scn_send.html: ../scn_send.sh + _pygments/pygmentizew -l bash -f html "$(shell pwd)/../scn_send.sh" > "$(shell pwd)/website/scn_send.html" + _pygments/pygmentizew -S monokai -f html > "$(shell pwd)/website/css/pygmnetize-dark.css" + _pygments/pygmentizew -S borland -f html > "$(shell pwd)/website/css/pygmnetize-light.css" run-docker-local: docker mkdir -p .run-data diff --git a/scnserver/TODO.md b/scnserver/TODO.md index ac167c1..dacc673 100644 --- a/scnserver/TODO.md +++ b/scnserver/TODO.md @@ -10,9 +10,11 @@ - ios purchase verification - - use goext.ginWrapper + - (!) use goext.ginWrapper - - use goext.exerr + - (!) use goext.exerr + + - use bfcodegen (enums+id) #### UNSURE diff --git a/scnserver/api/handler/apiMessage.go b/scnserver/api/handler/apiMessage.go index e5d29fe..b7fdfbc 100644 --- a/scnserver/api/handler/apiMessage.go +++ b/scnserver/api/handler/apiMessage.go @@ -1,18 +1,19 @@ package handler import ( + "database/sql" + "errors" + "net/http" + "strings" + "time" + "blackforestbytes.com/simplecloudnotifier/api/apierr" "blackforestbytes.com/simplecloudnotifier/api/ginresp" ct "blackforestbytes.com/simplecloudnotifier/db/cursortoken" "blackforestbytes.com/simplecloudnotifier/models" - "database/sql" - "errors" "github.com/gin-gonic/gin" "gogs.mikescher.com/BlackForestBytes/goext/langext" "gogs.mikescher.com/BlackForestBytes/goext/mathext" - "net/http" - "strings" - "time" ) // ListMessages swaggerdoc @@ -174,7 +175,7 @@ func (h APIHandler) ListMessages(g *gin.Context) ginresp.HTTPResponse { // @Failure 404 {object} ginresp.apiError "message not found" // @Failure 500 {object} ginresp.apiError "internal server error" // -// @Router /api/v2/messages/{mid} [PATCH] +// @Router /api/v2/messages/{mid} [GET] func (h APIHandler) GetMessage(g *gin.Context) ginresp.HTTPResponse { type uri struct { MessageID models.MessageID `uri:"mid" binding:"entityid"` diff --git a/scnserver/website/scn_send.html b/scnserver/website/scn_send.html index 97c348c..cf58d65 100644 --- a/scnserver/website/scn_send.html +++ b/scnserver/website/scn_send.html @@ -14,13 +14,10 @@ # or scn_send "@${channel} "${title}" ${content}" # or scn_send "@${channel} "${title}" ${content}" "${priority:0|1|2}" # +# content can be of format "--scnsend-read-body-from-file={path}" to read body from file +# (this circumvents max commandline length) # -################################################################################ -# INSERT YOUR DATA HERE # -################################################################################ -user_id="999" # your user_id -user_key="??" # use userkey with SEND permissions on the used channel ################################################################################ usage() { @@ -34,16 +31,40 @@ usage() { function rederr() { if cfgcol; then >&2 echo -e "\x1B[31m$1\x1B[0m"; else >&2 echo "$1"; fi; } function green() { if cfgcol; then echo -e "\x1B[32m$1\x1B[0m"; else echo "$1"; fi; } +################################################################################ + +# +# Get env 'SCN_UID' and 'SCN_KEY' from conf file +# +# shellcheck source=/dev/null +. "/etc/scn.conf" +SCN_UID=${SCN_UID:-} +SCN_KEY=${SCN_KEY:-} + +[ -z "${SCN_UID}" ] && { rederr "Missing config value 'SCN_UID' in /etc/scn.conf"; exit 1; } +[ -z "${SCN_KEY}" ] && { rederr "Missing config value 'SCN_KEY' in /etc/scn.conf"; exit 1; } + +################################################################################ + args=( "$@" ) title="" content="" channel="" -priority=1 +priority="" usr_msg_id="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)" sendtime="$(date +%s)" sender="$(hostname)" +if command -v srvname &> /dev/null; then + sender="$( srvname )" +fi + +if [[ "${args[0]}" = "--" ]]; then + # only positional args form here on (currently not handled) + args=("${args[@]:1}") +fi + if [ ${#args[@]} -lt 1 ]; then rederr "[ERROR]: no title supplied via parameter" usage @@ -83,6 +104,11 @@ usage() { exit 1 fi +if [[ "$content" == --scnsend-read-body-from-file=* ]]; then + path="$( awk '{ print substr($0, 31) }' <<< "$content" )" + content="$( cat "$path" )" +fi + curlparams=() curlparams+=( "--data-urlencode" "user_id=${SCN_UID}" )