11import json
22import os
3- from urllib .parse import urlparse , parse_qs
4- from flask import Flask , session , redirect , render_template , request , url_for
3+ from flask import Flask , session , redirect , render_template , request
54import workos
65from datetime import datetime , timedelta
76from audit_log_events import (
87 user_organization_set ,
98)
9+ from workos .audit_logs import AuditLogEvent
1010from flask_lucide import Lucide
1111
1212
1313# Flask Setup
14- DEBUG = False
1514app = Flask (__name__ )
1615app .secret_key = os .getenv ("APP_SECRET_KEY" )
1716
1817lucide = Lucide (app )
1918
2019
2120# WorkOS Setup
22- workos .api_key = os .getenv ("WORKOS_API_KEY" )
23- workos .project_id = os .getenv ("WORKOS_CLIENT_ID" )
24- workos .base_api_url = "http://localhost:7000/" if DEBUG else workos .base_api_url
21+ base_api_url = os .getenv ("WORKOS_BASE_API_URL" )
22+ workos_client = workos .WorkOSClient (
23+ api_key = os .getenv ("WORKOS_API_KEY" ),
24+ client_id = os .getenv ("WORKOS_CLIENT_ID" ),
25+ base_url = base_api_url ,
26+ )
2527
2628
2729def to_pretty_json (value ):
@@ -34,14 +36,14 @@ def to_pretty_json(value):
3436@app .route ("/" , methods = ["POST" , "GET" ])
3537def index ():
3638 try :
37- link = workos . client .portal .generate_link (
38- organization = session ["organization_id" ], intent = "audit_logs"
39+ link = workos_client .portal .generate_link (
40+ organization_id = session ["organization_id" ], intent = "audit_logs"
3941 )
4042 today = datetime .today ()
4143 last_month = today - timedelta (days = 30 )
4244 return render_template (
4345 "send_events.html" ,
44- link = link [ " link" ] ,
46+ link = link . link ,
4547 organization_id = session ["organization_id" ],
4648 org_name = session ["organization_name" ],
4749 last_month_iso = last_month .isoformat (),
@@ -50,29 +52,29 @@ def index():
5052 except KeyError :
5153 before = request .args .get ("before" )
5254 after = request .args .get ("after" )
53- organizations = workos . client .organizations .list_organizations (
54- before = before , after = after , limit = 5 , order = None
55+ organizations = workos_client .organizations .list_organizations (
56+ before = before , after = after , limit = 5 , order = "desc"
5557 )
56- before = organizations [ "listMetadata" ][ " before" ]
57- after = organizations [ "listMetadata" ][ " after" ]
58+ before = organizations . list_metadata . before
59+ after = organizations . list_metadata . after
5860 return render_template (
5961 "login.html" ,
60- organizations = organizations [ " data" ] ,
62+ organizations = organizations . data ,
6163 before = before ,
6264 after = after ,
6365 )
6466
6567
6668@app .route ("/set_org" , methods = ["POST" , "GET" ])
6769def set_org ():
68- organization_id = request .args .get ("id" )
70+ organization_id = request .args .get ("id" ) or request .form ["organization_id" ]
71+
6972 session ["organization_id" ] = organization_id
70- organization_set = workos . client .audit_logs .create_event (
71- organization_id , user_organization_set
73+ workos_client .audit_logs .create_event (
74+ organization_id = organization_id , event = user_organization_set
7275 )
73- org = workos .client .organizations .get_organization (organization_id )
74- org_name = org ["name" ]
75- session ["organization_name" ] = org_name
76+ org = workos_client .organizations .get_organization (organization_id )
77+ session ["organization_name" ] = org .name
7678 return redirect ("/" )
7779
7880
@@ -87,28 +89,32 @@ def send_event():
8789 )
8890 organization_id = session ["organization_id" ]
8991
90- event = {
91- "action" : "user.organization_deleted" ,
92- "version" : int (event_version ),
93- "occurred_at" : datetime .now ().isoformat (),
94- "actor" : {
95- "type" : actor_type ,
96- "name" : actor_name ,
97- "id" : "user_01GBNJC3MX9ZZJW1FSTF4C5938" ,
98- },
99- "targets" : [
100- {
101- "type" : target_type ,
102- "name" : target_name ,
103- "id" : "team_01GBNJD4MKHVKJGEWK42JNMBGS" ,
92+ event = AuditLogEvent (
93+ {
94+ "action" : "user.organization_deleted" ,
95+ "version" : int (event_version ),
96+ "occurred_at" : datetime .now ().isoformat (),
97+ "actor" : {
98+ "type" : actor_type ,
99+ "name" : actor_name ,
100+ "id" : "user_01GBNJC3MX9ZZJW1FSTF4C5938" ,
104101 },
105- ],
106- "context" : {
107- "location" : "123.123.123.123" ,
108- "user_agent" : "Chrome/104.0.0.0" ,
109- },
110- }
111- organization_set = workos .client .audit_logs .create_event (organization_id , event )
102+ "targets" : [
103+ {
104+ "type" : target_type ,
105+ "name" : target_name ,
106+ "id" : "team_01GBNJD4MKHVKJGEWK42JNMBGS" ,
107+ },
108+ ],
109+ "context" : {
110+ "location" : "123.123.123.123" ,
111+ "user_agent" : "Chrome/104.0.0.0" ,
112+ },
113+ }
114+ )
115+ organization_set = workos_client .audit_logs .create_event (
116+ organization_id = organization_id , event = event
117+ )
112118 return redirect ("/" )
113119
114120
@@ -147,33 +153,40 @@ def get_events():
147153
148154 try :
149155
150- create_export_response = workos . client .audit_logs .create_export (
151- organization = organization_id ,
156+ create_export_response = workos_client .audit_logs .create_export (
157+ organization_id = organization_id ,
152158 range_start = request .form ["range-start" ],
153159 range_end = request .form ["range-end" ],
154160 actions = actions ,
155- actors = actors ,
161+ actor_names = actors ,
156162 targets = targets ,
157163 )
158- session ["export_id" ] = create_export_response .to_dict ()[ "id" ]
164+ session ["export_id" ] = create_export_response .id
159165
160166 return redirect ("export_events" )
161167 except Exception as e :
162168 print (str (e ))
163169 return redirect ("/" )
164170 if event_type == "access_csv" :
165171 export_id = session ["export_id" ]
166- fetch_export_response = workos .client .audit_logs .get_export (export_id )
167- return redirect (fetch_export_response .to_dict ()["url" ])
172+ fetch_export_response = workos_client .audit_logs .get_export (export_id )
173+ if fetch_export_response .url is None :
174+ return redirect ("/" )
175+
176+ return redirect (fetch_export_response .url )
168177
169178
170179@app .route ("/events" , methods = ["GET" ])
171180def events ():
172- link = workos .client .portal .generate_link (
173- organization = session ["organization_id" ], intent = request .args .get ("intent" )
181+ intent = request .args .get ("intent" )
182+ if not intent == "audit_logs" :
183+ return redirect ("/" )
184+
185+ link = workos_client .portal .generate_link (
186+ organization_id = session ["organization_id" ], intent = intent
174187 )
175188
176- return redirect (link [ " link" ] )
189+ return redirect (link . link )
177190
178191
179192@app .route ("/logout" )
0 commit comments