Compare commits
No commits in common. "bad1c90d39b49578e948f7d192cfbb942749d178" and "ca3b5a053c8f38a9f8c8d8b26fe319d7adfda37c" have entirely different histories.
bad1c90d39
...
ca3b5a053c
27
.drone.yml
27
.drone.yml
|
@ -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
|
|
||||||
...
|
|
135
matrix-notifier
135
matrix-notifier
|
@ -4,18 +4,6 @@ print_err() {
|
||||||
printf "%s\n" "$1" >&2
|
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
|
# Blessed Stack Overflow
|
||||||
rawurlencode() {
|
rawurlencode() {
|
||||||
(set +x
|
(set +x
|
||||||
|
@ -42,100 +30,41 @@ default_drone_message() {
|
||||||
printf '%s' "$msg"
|
printf '%s' "$msg"
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure_variables() {
|
if [ "$DRONE" == "true" ] && [ -z "$MESSAGE" ]; then
|
||||||
if [ "$DRONE" == "true" ] && [ -z "$MESSAGE" ]; then
|
MESSAGE="$(default_drone_message)"
|
||||||
MESSAGE="$(default_drone_message)"
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$USER" ] || [ -z "$PASS" ]; then
|
if [ -z "$USER" ] || [ -z "$PASS" ]; then
|
||||||
print_err "You must provide USER and PASS"
|
print_err "You must provide USER and PASS"
|
||||||
exit 1
|
exit 1
|
||||||
elif [ -z "$ADDRESS" ] || [ -z "$ROOM" ]; then
|
elif [ -z "$ADDRESS" ] || [ -z "$ROOM" ]; then
|
||||||
print_err "You must provide ADDRESS and ROOM"
|
print_err "You must provide ADDRESS and ROOM"
|
||||||
exit 1
|
exit 1
|
||||||
elif [ -z "$MESSAGE" ]; then
|
elif [ -z "$MESSAGE" ]; then
|
||||||
print_err "You must provide MESSAGE"
|
print_err "You must provide MESSAGE"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
|
||||||
|
|
||||||
get_message_type() {
|
if [ "$(curl -XGET "$ADDRESS/_matrix/client/r0/login" 2>/dev/null |
|
||||||
if [ "$MSG_TYPE" == "auto" ]; then
|
jq 'any(.flows[].type; .== "m.login.password")')" != "true" ]; then
|
||||||
if [ "$DRONE_BUILD_STATUS" == "failure" ]; then
|
print_err "Login method not supported"
|
||||||
MSG_TYPE="text"
|
exit 1
|
||||||
else
|
fi
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
login_json="$(printf '%s\n%s' "$USER" "$PASS" |
|
LOGIN_JSON="$(printf '%s\n%s' "$USER" "$PASS" |
|
||||||
jq -Rn '[inputs] | {type: "m.login.password", user: .[0], password: .[1]}')" &>/dev/null
|
jq -Rn '[inputs] | {type: "m.login.password", user: .[0], password: .[1]}')" &>/dev/null
|
||||||
token="$(curl -XPOST \
|
TOKEN="$(curl -XPOST \
|
||||||
-d "$login_json" \
|
-d "$LOGIN_JSON" \
|
||||||
"$ADDRESS/_matrix/client/r0/login" 2>/dev/null| jq .access_token --raw-output)"
|
"$ADDRESS/_matrix/client/r0/login" 2>/dev/null| jq .access_token --raw-output)"
|
||||||
|
|
||||||
if [ -z "$token" ] || [ "$token" == "null" ]; then
|
if [ -z "$TOKEN" ] || [ "$TOKEN" == "null" ]; then
|
||||||
print_err "Error during login"
|
print_err "Error during login"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
message_json="$(printf '%s' "$MESSAGE" |
|
MESSAGE_JSON="$(printf '%s' "$MESSAGE" |
|
||||||
jq --raw-input --slurp "{msgtype: \"$(get_message_type)\", body: .}")"
|
jq --raw-input --slurp '{msgtype: "m.text", body: .}')"
|
||||||
curl -XPOST \
|
curl -XPOST \
|
||||||
-d "$message_json" \
|
-d "$MESSAGE_JSON" \
|
||||||
"$ADDRESS/_matrix/client/r0/rooms/$(rawurlencode "$ROOM")/send/m.room.message?access_token=$(rawurlencode "$token")" 2>/dev/null
|
"$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
|
|
||||||
|
|
Loading…
Reference in a new issue