Skip to content

Commit 1328d22

Browse files
committed
Update audit logs app for 5.0
1 parent 7994681 commit 1328d22

File tree

3 files changed

+70
-57
lines changed

3 files changed

+70
-57
lines changed

python-flask-audit-logs-example/app.py

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import json
22
import 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
54
import workos
65
from datetime import datetime, timedelta
76
from audit_log_events import (
87
user_organization_set,
98
)
9+
from workos.audit_logs import AuditLogEvent
1010
from flask_lucide import Lucide
1111

1212

@@ -20,7 +20,7 @@
2020

2121
# WorkOS Setup
2222
workos.api_key = os.getenv("WORKOS_API_KEY")
23-
workos.project_id = os.getenv("WORKOS_CLIENT_ID")
23+
workos.client_id = os.getenv("WORKOS_CLIENT_ID")
2424
workos.base_api_url = "http://localhost:7000/" if DEBUG else workos.base_api_url
2525

2626

@@ -35,13 +35,13 @@ def to_pretty_json(value):
3535
def index():
3636
try:
3737
link = workos.client.portal.generate_link(
38-
organization=session["organization_id"], intent="audit_logs"
38+
organization_id=session["organization_id"], intent="audit_logs"
3939
)
4040
today = datetime.today()
4141
last_month = today - timedelta(days=30)
4242
return render_template(
4343
"send_events.html",
44-
link=link["link"],
44+
link=link.link,
4545
organization_id=session["organization_id"],
4646
org_name=session["organization_name"],
4747
last_month_iso=last_month.isoformat(),
@@ -51,28 +51,28 @@ def index():
5151
before = request.args.get("before")
5252
after = request.args.get("after")
5353
organizations = workos.client.organizations.list_organizations(
54-
before=before, after=after, limit=5, order=None
54+
before=before, after=after, limit=5, order="desc"
5555
)
56-
before = organizations["listMetadata"]["before"]
57-
after = organizations["listMetadata"]["after"]
56+
before = organizations.list_metadata.before
57+
after = organizations.list_metadata.after
5858
return render_template(
5959
"login.html",
60-
organizations=organizations["data"],
60+
organizations=organizations.data,
6161
before=before,
6262
after=after,
6363
)
6464

6565

6666
@app.route("/set_org", methods=["POST", "GET"])
6767
def set_org():
68-
organization_id = request.args.get("id")
68+
organization_id = request.args.get("id") or request.form["organization_id"]
69+
6970
session["organization_id"] = organization_id
7071
organization_set = workos.client.audit_logs.create_event(
7172
organization_id, user_organization_set
7273
)
7374
org = workos.client.organizations.get_organization(organization_id)
74-
org_name = org["name"]
75-
session["organization_name"] = org_name
75+
session["organization_name"] = org.name
7676
return redirect("/")
7777

7878

@@ -87,27 +87,29 @@ def send_event():
8787
)
8888
organization_id = session["organization_id"]
8989

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",
90+
event = AuditLogEvent(
91+
{
92+
"action": "user.organization_deleted",
93+
"version": int(event_version),
94+
"occurred_at": datetime.now().isoformat(),
95+
"actor": {
96+
"type": actor_type,
97+
"name": actor_name,
98+
"id": "user_01GBNJC3MX9ZZJW1FSTF4C5938",
99+
},
100+
"targets": [
101+
{
102+
"type": target_type,
103+
"name": target_name,
104+
"id": "team_01GBNJD4MKHVKJGEWK42JNMBGS",
105+
},
106+
],
107+
"context": {
108+
"location": "123.123.123.123",
109+
"user_agent": "Chrome/104.0.0.0",
104110
},
105-
],
106-
"context": {
107-
"location": "123.123.123.123",
108-
"user_agent": "Chrome/104.0.0.0",
109-
},
110-
}
111+
}
112+
)
111113
organization_set = workos.client.audit_logs.create_event(organization_id, event)
112114
return redirect("/")
113115

@@ -148,14 +150,14 @@ def get_events():
148150
try:
149151

150152
create_export_response = workos.client.audit_logs.create_export(
151-
organization=organization_id,
153+
organization_id=organization_id,
152154
range_start=request.form["range-start"],
153155
range_end=request.form["range-end"],
154156
actions=actions,
155-
actors=actors,
157+
actor_names=actors,
156158
targets=targets,
157159
)
158-
session["export_id"] = create_export_response.to_dict()["id"]
160+
session["export_id"] = create_export_response.id
159161

160162
return redirect("export_events")
161163
except Exception as e:
@@ -164,16 +166,23 @@ def get_events():
164166
if event_type == "access_csv":
165167
export_id = session["export_id"]
166168
fetch_export_response = workos.client.audit_logs.get_export(export_id)
167-
return redirect(fetch_export_response.to_dict()["url"])
169+
if fetch_export_response.url is None:
170+
return redirect("/")
171+
172+
return redirect(fetch_export_response.url)
168173

169174

170175
@app.route("/events", methods=["GET"])
171176
def events():
177+
intent = request.args.get("intent")
178+
if not intent == "audit_logs":
179+
return redirect("/")
180+
172181
link = workos.client.portal.generate_link(
173-
organization=session["organization_id"], intent=request.args.get("intent")
182+
organization_id=session["organization_id"], intent=intent
174183
)
175184

176-
return redirect(link["link"])
185+
return redirect(link.link)
177186

178187

179188
@app.route("/logout")
Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
from datetime import datetime
2+
from workos.audit_logs import AuditLogEvent
23

3-
user_organization_set = {
4-
"action": "user.organization_set",
5-
"occurred_at": datetime.now().isoformat(),
6-
"actor": {
7-
"type": "user",
8-
"id": "user_01GBNJC3MX9ZZJW1FSTF4C5938",
9-
},
10-
"targets": [
11-
{
12-
"type": "team",
13-
"id": "team_01GBNJD4MKHVKJGEWK42JNMBGS",
4+
user_organization_set = AuditLogEvent(
5+
{
6+
"action": "user.organization_set",
7+
"occurred_at": datetime.now().isoformat(),
8+
"actor": {
9+
"type": "user",
10+
"id": "user_01GBNJC3MX9ZZJW1FSTF4C5938",
1411
},
15-
],
16-
"context": {
17-
"location": "123.123.123.123",
18-
"user_agent": "Chrome/104.0.0.0",
19-
},
20-
}
12+
"targets": [
13+
{
14+
"type": "organization",
15+
"id": "team_01GBNJD4MKHVKJGEWK42JNMBGS",
16+
},
17+
],
18+
"context": {
19+
"location": "123.123.123.123",
20+
"user_agent": "Chrome/104.0.0.0",
21+
},
22+
}
23+
)
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
Flask==2.0.3
22
Jinja2==3.1.1
3-
workos>=1.23.3
3+
workos==5.0.0
44
python-dotenv
5-
flask-lucide==0.2.0
5+
flask-lucide==0.2.0
6+
Werkzeug==2.0.1

0 commit comments

Comments
 (0)