blob: 6012126a2ee22bc85957d9efa29f95d11f1e5ec8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#!/usr/bin/env bash
# Script to send message to matrix
set -x
# Matrix homeserver URL
MATRIX_HOMESERVER=''
# MATRIX room ID
MATRIX_ROOM_ID=''
# MATRIX token
MATRIX_TOKEN=''
# Check if variable are set
check_var() {
if [ "$MATRIX_HOMESERVER" == '' ]; then
error "MATRIX_HOMESERVER variable not set"
fi
if [ "$MATRIX_ROOM_ID" == '' ]; then
error "MATRIX_ROOM_ID variable not set"
fi
}
# Check if token is set
check_token() {
if [ "$MATRIX_TOKEN" == '' ]; then
error "MATRIX_TOKEN variable empty, use $0 -t <username> <password>"
fi
}
# Display an error and leave
error() {
echo $@
exit 1
}
# Clean an input
clean() {
local input=$@
printf '%s' "$input" | jq -Rs '.'
}
# Make a request, $1 the CURL request
request() {
local request=$@
local errorcode="$(jq -r '.errcode' <<< "$request")"
if [[ "$errorcode" != "" && "$errorcode" != "null" ]]; then
error "[x] Erreur: "$(jq -r '.error' <<< "$request")""
fi
}
# Get the token of the account
# usage: ./matrix.sh -t <username> <password>
# get_token <username> <password>
get_token() {
check_var
local token=$(curl -XPOST -H "Content-Type: application/json" --data "{\"type\": \"m.login.password\", \"identifier\": {\"user\": \"$1\", \"type\": \"m.id.user\"}, \"password\": \"$2\"}" \
"https://${MATRIX_HOMESERVER#https://}/_matrix/client/r0/login")
request $token
token=$(echo "$token" | jq -r '.access_token')
sed -i -e "s#^MATRIX_TOKEN=.*#MATRIX_TOKEN=\'${token}\'#g" $0
}
# Send a message
# usage: ./matrix.sh -s <message>
# usage: ./matrix.sh -html <message>
# send_message <message>
send_message() {
check_var
check_token
local id=$(date +%s%N) # Message id
local message=$(clean "$@")
if $HTML; then
local data="{\"msgtype\": \"m.text\", \"body\": $message, \"format\": \"org.matrix.custom.html\", \"formatted_body\": $message}"
else
local data="{\"body\": $message, \"msgtype\": \"m.text\"}"
fi
request $(curl -XPUT -H "Authorization: Bearer ${MATRIX_TOKEN}" -H "Content-Type: application/json" --data "$data" \
"https://${MATRIX_HOMESERVER#https://}/_matrix/client/r0/rooms/$MATRIX_ROOM_ID/send/m.room.message/$id")
echo "[v] Message sent"
}
# Show the help menu
help() {
echo "Usage: $0 <actions> <options>"
echo ""
echo "Actions:"
echo " -h, --help show this menu"
echo " -t <username> <password> get the token of the account and save it"
echo " -s <message> send a message"
echo " -html <html> send an html message"
}
# Main
hash curl >/dev/null 2>&1 || error "Curl is required!"
hash jq >/dev/null 2>&1 || error "jq is required!"
action=""
case $1 in
-t)
get_token $2 $3
exit 0
;;
-s)
action="send"
shift
;;
-html)
action="html"
shift
;;
-h|--help|*)
help
exit 0
;;
esac
MESSAGE=$@
case $action in
send)
send_message "$MESSAGE"
;;
html)
HTML="true"
send_message "$MESSAGE"
;;
esac
|
ArKa projects. All rights to me, and your next child right arm.