-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpm_webhook.py
91 lines (81 loc) · 3.26 KB
/
pm_webhook.py
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
import urllib3
from urllib3.exceptions import InsecureRequestWarning # for insecure https warnings
urllib3.disable_warnings(InsecureRequestWarning) # disable insecure https warnings
import json
import psycopg2
from flask import Flask, request
# from flask_basicauth import BasicAuth
import os
# WEBHOOK_USERNAME = os.getenv('WEBHOOK_USERNAME')
# WEBHOOK_PASSWORD = os.getenv('WEBHOOK_PASSWORD')
DB_USER = os.getenv('DB_USER')
DB_PASSWORD = os.getenv('DB_PASSWORD')
DB_NAME = os.getenv('DB_NAME')
DB_HOST = os.getenv('DB_HOST')
DB_PORT = os.getenv('DB_PORT')
TABLE_NAME = os.getenv('TABLE_NAME')
save_webhook_output_file = "webhooklogs.json"
app = Flask(__name__)
# app.config['BASIC_AUTH_USERNAME'] = WEBHOOK_USERNAME
# app.config['BASIC_AUTH_PASSWORD'] = WEBHOOK_PASSWORD
# app.config['BASIC_AUTH_FORCE'] = True
# basic_auth = BasicAuth(app)
@app.route('/')
# @basic_auth.required
def index():
return '<h1>Im Alive</h1>', 200
@app.route('/api', methods=['POST'])
# @basic_auth.required
def webhook():
if request.method == 'POST':
print('Webhook Received')
request_json = request.json
request_json['Details'] = request_json.get('Details', 'null')
request_json['Content'] = request_json.get('Content', 'null')
print('Payload: ')
print(json.dumps(request_json, indent=4))
with open(save_webhook_output_file, 'a') as filehandle:
filehandle.write('%s\n' % json.dumps(request_json, indent=4))
filehandle.write('= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - \n')
connection = psycopg2.connect(
user=DB_USER,
password=DB_PASSWORD,
database=DB_NAME,
host=DB_HOST,
port=DB_PORT
)
cursor = connection.cursor()
insert_query = f"""
INSERT INTO {TABLE_NAME} (ID, Type, RecordType, TypeCode, Tag, MessageID, Details, Email, fromaddress, BouncedAt, Inactive, DumpAvailable, CanActivate, Subject, ServerID, MessageStream, Content, Name, Description, Metadata)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
cursor.execute(insert_query, (
request_json.get('ID'),
request_json.get('Type'),
request_json.get('RecordType'),
request_json.get('TypeCode'),
request_json.get('Tag'),
request_json.get('MessageID'),
request_json.get('Details'),
request_json.get('Email'),
request_json.get('From'),
request_json.get('BouncedAt'),
request_json.get('Inactive'),
request_json.get('DumpAvailable'),
request_json.get('CanActivate'),
request_json.get('Subject'),
request_json.get('ServerID'),
request_json.get('MessageStream'),
request_json.get('Content'),
request_json.get('Name'),
request_json.get('Description'),
json.dumps(request_json.get('Metadata'))
))
connection.commit()
cursor.close()
connection.close()
return 'Webhook notification received', 202
else:
return 'POST Method not supported', 405
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5443, debug=True)