diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index cd4c77d..0000000 --- a/.drone.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -kind: pipeline -type: exec -name: Matrix Notifier check - -steps: -- name: Pre-commit checks - commands: - - nix flake check - -- name: Notifiy - commands: - - nix run . - environment: - ADDRESS: - from_secret: matrix_homeserver - ROOM: - from_secret: matrix_roomid - USER: - from_secret: matrix_username - PASS: - from_secret: matrix_password - when: - status: - - failure - - success -... diff --git a/matrix-notifier b/matrix-notifier index b92fb3e..ebc2f67 100755 --- a/matrix-notifier +++ b/matrix-notifier @@ -4,18 +4,6 @@ print_err() { printf "%s\n" "$1" >&2 } -usage() { - print_err "Usage: $0 [option]..." - print_err "" - print_err " -h, --help" - print_err " print this usage screen and exit" - print_err " -t, --type" - print_err " which message type should be sent must be one of" - print_err " 'text' or 'notice', or 'auto'." - print_err " The special value 'auto' defaults to 'notice', unless" - print_err " 'DRONE_BUILD_STATUS' indicates a failure." -} - # Blessed Stack Overflow rawurlencode() { (set +x @@ -42,100 +30,41 @@ default_drone_message() { printf '%s' "$msg" } -ensure_variables() { - if [ "$DRONE" == "true" ] && [ -z "$MESSAGE" ]; then - MESSAGE="$(default_drone_message)" - fi +if [ "$DRONE" == "true" ] && [ -z "$MESSAGE" ]; then + MESSAGE="$(default_drone_message)" +fi - if [ -z "$USER" ] || [ -z "$PASS" ]; then - print_err "You must provide USER and PASS" - exit 1 - elif [ -z "$ADDRESS" ] || [ -z "$ROOM" ]; then - print_err "You must provide ADDRESS and ROOM" - exit 1 - elif [ -z "$MESSAGE" ]; then - print_err "You must provide MESSAGE" - exit 1 - fi -} +if [ -z "$USER" ] || [ -z "$PASS" ]; then + print_err "You must provide USER and PASS" + exit 1 +elif [ -z "$ADDRESS" ] || [ -z "$ROOM" ]; then + print_err "You must provide ADDRESS and ROOM" + exit 1 +elif [ -z "$MESSAGE" ]; then + print_err "You must provide MESSAGE" + exit 1 +fi -get_message_type() { - if [ "$MSG_TYPE" == "auto" ]; then - if [ "$DRONE_BUILD_STATUS" == "failure" ]; then - MSG_TYPE="text" - else - MSG_TYPE="notice" - fi - fi - - printf '%s' "m.$MSG_TYPE" -} - -send_message() { - local login_json - local token - local message_json - - if [ "$(curl -XGET "$ADDRESS/_matrix/client/r0/login" 2>/dev/null | - jq 'any(.flows[].type; .== "m.login.password")')" != "true" ]; then - print_err "Login method not supported" - exit 1 - fi +if [ "$(curl -XGET "$ADDRESS/_matrix/client/r0/login" 2>/dev/null | + jq 'any(.flows[].type; .== "m.login.password")')" != "true" ]; then + print_err "Login method not supported" + exit 1 +fi - login_json="$(printf '%s\n%s' "$USER" "$PASS" | - jq -Rn '[inputs] | {type: "m.login.password", user: .[0], password: .[1]}')" &>/dev/null - token="$(curl -XPOST \ - -d "$login_json" \ - "$ADDRESS/_matrix/client/r0/login" 2>/dev/null| jq .access_token --raw-output)" +LOGIN_JSON="$(printf '%s\n%s' "$USER" "$PASS" | + jq -Rn '[inputs] | {type: "m.login.password", user: .[0], password: .[1]}')" &>/dev/null +TOKEN="$(curl -XPOST \ + -d "$LOGIN_JSON" \ + "$ADDRESS/_matrix/client/r0/login" 2>/dev/null| jq .access_token --raw-output)" - if [ -z "$token" ] || [ "$token" == "null" ]; then - print_err "Error during login" - exit 1 - fi +if [ -z "$TOKEN" ] || [ "$TOKEN" == "null" ]; then + print_err "Error during login" + exit 1 +fi - message_json="$(printf '%s' "$MESSAGE" | - jq --raw-input --slurp "{msgtype: \"$(get_message_type)\", body: .}")" - curl -XPOST \ - -d "$message_json" \ - "$ADDRESS/_matrix/client/r0/rooms/$(rawurlencode "$ROOM")/send/m.room.message?access_token=$(rawurlencode "$token")" 2>/dev/null -} - -MSG_TYPE='auto' - -while [ $# -gt 0 ]; do - opt="$1" - shift - - case "$opt" in - -t|--type) - arg="$1" - shift - - if [ -z "$arg" ]; then - print_err "Must give a message type when using '-t|--type'" - exit 1 - fi - - for type in text notice auto; do - if [ "$arg" == "$type" ]; then - continue 2 # Go to next argument - fi - done - print_err "Invalid message type '$arg'" - exit 1 - ;; - -h|--help) - usage - exit - ;; - *) - print_err "Unknown argument '$opt'" - usage - exit 1 - ;; - esac -done - -ensure_variables -send_message +MESSAGE_JSON="$(printf '%s' "$MESSAGE" | + jq --raw-input --slurp '{msgtype: "m.text", body: .}')" +curl -XPOST \ + -d "$MESSAGE_JSON" \ + "$ADDRESS/_matrix/client/r0/rooms/$(rawurlencode "$ROOM")/send/m.room.message?access_token=$(rawurlencode "$TOKEN")" 2>/dev/null