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
|
#!/usr/bin/env python3
import requests, json, sys
expected_status = 204
url = ""
# Default for discord, easy enough to override
msg = {
"username": "{hostname} script",
"content": "```{stdin}```",
}
customVars = {}
def merge_dicts(*dict_args):
result = {}
for dictionary in dict_args:
result.update(dictionary)
return result
def template(msg, fmt):
out = {}
for k, v in msg.items():
if isinstance(v, dict):
out[k] = template(v, fmt)
else:
out[k] = v.format(**fmt)
return out
def help():
print("Usage: {} [-m msg] [-u url] [-s expected_status] [-V var content]...".format(sys.argv[0]))
print("A small python script to send webhooks easily from the command line utilizing arguments and stdin")
print("Only requrement is the requests library")
print("Defaults:")
print("\tmsg: " + json.dumps(msg))
print("\turl: " + url)
print("\texpected_status: ", expected_status)
print("")
print("The [-V var content] arguments allow you to specifiy custom vars to be overridden in the json msg.")
sys.exit(2)
n = 1
while n < len(sys.argv):
if sys.argv[n] == "-u":
url = sys.argv[n+1]
n += 2
elif sys.argv[n] == "-m":
msg = json.loads(sys.argv[n+1])
n += 2
elif sys.argv[n] == "-s":
expected_status = int(sys.argv[n+1])
n += 2
elif sys.argv[n] == "-V":
customVars[sys.argv[n+1]] = sys.argv[n+2]
n += 3
else:
help()
if url == "":
sys.stderr.write("No URL provided\n")
help()
msg2 = template(msg, merge_dicts(customVars , {"stdin": sys.stdin.read()}))
r = requests.post(url, json=msg2)
if r.status_code != expected_status:
print(r)
print(r.text)
sys.exit(1)
|