aboutsummaryrefslogtreecommitdiff
path: root/webhook.py
blob: 3db70a8a882ae8592c58a68ec2be4dd2641ada6f (plain) (blame)
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)