From 345223914b852603a2feda84c09baf5e10fec9a1 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Wed, 18 Mar 2020 20:21:23 +0100 Subject: [PATCH] Hook: Proper handling of occurrences --- hook.wsgi | 136 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 99 insertions(+), 37 deletions(-) diff --git a/hook.wsgi b/hook.wsgi index 5306dfe..320af2d 100644 --- a/hook.wsgi +++ b/hook.wsgi @@ -66,61 +66,123 @@ class HookApp: ]) return ["{} {}".format(code, msg)] - def create_meeting(self, js): - payload = js["payload"] - object = payload["object"] - meeting_id = object["id"] - - type = object["type"] - if type != 2 and type != 8: - self.log(f"Meeting type {type} ignored") - return - - host_user_id = object["host_id"] - db_query("SELECT * FROM zoom_users WHERE user_id=%s", (host_user_id,)) - user = db.fetchone() - if user is None: - self.log(f"Meeting {meeting_id}: Host {host_user_id} not found in zoom_users") - + def create_regular_meeting(self, uid, meeting): + meeting_id = meeting["id"] self.log(f"Meeting {meeting_id}: Planning") + db_query(""" INSERT INTO zoom_meetings (meeting_id, uuid, host_id, topic, type, start_time, duration) VALUES (%s, %s, %s, %s, %s, %s, %s) """, ( meeting_id, - object['uuid'], - user.id, - object['topic'], - object['type'], - parse_time(object['start_time'], object['timezone']), - object['duration'], + meeting['uuid'], + uid, + meeting['topic'], + meeting['type'], + parse_time(meeting['start_time'], meeting['timezone']), + meeting['duration'], )) db_connection.commit() - def delete_meeting(self, js): + + def create_recurring_meeting(self, uid, meeting): + meeting_id = meeting["id"] + + for occ in meeting["occurrences"]: + occ_id = occ["occurrence_id"] + self.log(f"Meeting {meeting_id}: Planning occurrence {occ_id}") + + db_query(""" + INSERT INTO zoom_meetings + (meeting_id, uuid, occurrence_id, host_id, topic, type, start_time, duration) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s) + """, ( + meeting_id, + meeting['uuid'], + occ_id, + uid, + meeting['topic'], + meeting['type'], + parse_time(occ['start_time'], meeting['timezone']), + occ['duration'], + )) + + db_connection.commit() + + + def create_meeting(self, js): payload = js["payload"] - object = payload["object"] - meeting_id = object["id"] + meeting = payload["object"] + meeting_id = meeting["id"] + + host_user_id = meeting["host_id"] + db_query("SELECT * FROM zoom_users WHERE user_id=%s", (host_user_id,)) + user = db.fetchone() + if user is None: + self.log(f"Meeting {meeting_id}: Host {host_user_id} not found in zoom_users") + return - type = object["type"] - if type != 2 and type != 8: - self.log(f"Meeting type {type} ignored") + type = meeting["type"] + if type == 2: + self.create_regular_meeting(user.id, meeting) + elif type == 8: + self.create_recurring_meeting(user.id, meeting) + else: + self.log(f"Meeting {meeting_id}: Unknown type {type}") return + + def delete_regular_meeting(self, meeting): + meeting_id = meeting["id"] + self.log(f"Meeting {meeting_id}: Deleting") db_query(""" DELETE FROM zoom_meetings - WHERE meeting_id=%s AND start_time=%s AND duration=%s + WHERE meeting_id=%s """, ( meeting_id, - parse_time(object['start_time'], object['timezone']), - object['duration'], )) db_connection.commit() + + def delete_recurring_meeting(self, meeting): + meeting_id = meeting["id"] + + if "occurrences" not in meeting: + return self.delete_regular_meeting(meeting) + + for occ in meeting["occurrences"]: + occ_id = occ["occurrence_id"] + self.log(f"Meeting {meeting_id}: Deleting occurrence {occ_id}") + db_query(""" + DELETE FROM zoom_meetings + WHERE meeting_id=%s AND occurrence_id=%s + """, ( + meeting_id, + occ_id, + )) + + db_connection.commit() + + + def delete_meeting(self, js): + payload = js["payload"] + meeting = payload["object"] + meeting_id = meeting["id"] + + type = meeting["type"] + if type == 2: + self.delete_regular_meeting(meeting) + elif type == 8: + self.delete_recurring_meeting(meeting) + else: + self.log(f"Meeting {meeting_id}: Unknown type {type}") + return + + def run(self): method = self.env['REQUEST_METHOD'] if method != 'POST': @@ -135,12 +197,12 @@ class HookApp: self.log(js) event = js["event"] -# if event == "meeting.created": -# self.create_meeting(js) -# elif event == "meeting.deleted": -# self.delete_meeting(js) -# else: -# self.log(f"Unknown event: {event}") + if event == "meeting.created": + self.create_meeting(js) + elif event == "meeting.deleted": + self.delete_meeting(js) + else: + self.log(f"Unknown event: {event}") self.wsgi_start("204 No Content", []) return b"" -- GitLab