Skip to content

Commit 677c138

Browse files
committed
Check proper permissions before exporting an event
1 parent f48b2bc commit 677c138

File tree

2 files changed

+33
-88
lines changed

2 files changed

+33
-88
lines changed

app/api/exports.py

Lines changed: 26 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
from flask_jwt_extended import jwt_required, current_user
66

77
from app.api.helpers.export_helpers import export_event_json, create_export_job
8+
from app.api.helpers.permissions import is_coorganizer
89
from app.api.helpers.utilities import TASK_RESULTS
9-
from app.models import db
10-
from app.models.event import Event
1110

1211
export_routes = Blueprint('exports', __name__, url_prefix='/v1')
1312

@@ -20,8 +19,8 @@
2019

2120

2221
@export_routes.route('/events/<string:event_identifier>/export/json', methods=['POST'])
23-
@jwt_required
24-
def export_event(event_identifier):
22+
@is_coorganizer
23+
def export_event(event_id):
2524
from .helpers.tasks import export_event_task
2625

2726
settings = EXPORT_SETTING
@@ -30,11 +29,6 @@ def export_event(event_identifier):
3029
settings['document'] = request.json.get('document', False)
3130
settings['audio'] = request.json.get('audio', False)
3231

33-
if not event_identifier.isdigit():
34-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
35-
event_id = event.id
36-
else:
37-
event_id = event_identifier
3832
# queue task
3933
task = export_event_task.delay(
4034
current_user.email, event_id, settings)
@@ -54,7 +48,7 @@ def export_event(event_identifier):
5448

5549

5650
@export_routes.route('/events/<string:event_id>/exports/<path:path>')
57-
@jwt_required
51+
@is_coorganizer
5852
def export_download(event_id, path):
5953
if not path.startswith('/'):
6054
path = '/' + path
@@ -66,14 +60,8 @@ def export_download(event_id, path):
6660

6761

6862
@export_routes.route('/events/<string:event_identifier>/export/xcal', methods=['GET'])
69-
@jwt_required
70-
def export_event_xcal(event_identifier):
71-
72-
if not event_identifier.isdigit():
73-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
74-
event_id = str(event.id)
75-
else:
76-
event_id = event_identifier
63+
@is_coorganizer
64+
def export_event_xcal(event_id):
7765

7866
from .helpers.tasks import export_xcal_task
7967

@@ -95,13 +83,8 @@ def event_export_task_base(event_id, settings):
9583

9684

9785
@export_routes.route('/events/<string:event_identifier>/export/ical', methods=['GET'])
98-
@jwt_required
99-
def export_event_ical(event_identifier):
100-
if not event_identifier.isdigit():
101-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
102-
event_id = str(event.id)
103-
else:
104-
event_id = event_identifier
86+
@is_coorganizer
87+
def export_event_ical(event_id):
10588

10689
from .helpers.tasks import export_ical_task
10790

@@ -115,13 +98,8 @@ def export_event_ical(event_identifier):
11598

11699

117100
@export_routes.route('/events/<string:event_identifier>/export/pentabarf', methods=['GET'])
118-
@jwt_required
119-
def export_event_pentabarf(event_identifier):
120-
if not event_identifier.isdigit():
121-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
122-
event_id = str(event.id)
123-
else:
124-
event_id = event_identifier
101+
@is_coorganizer
102+
def export_event_pentabarf(event_id):
125103

126104
from .helpers.tasks import export_pentabarf_task
127105

@@ -135,13 +113,8 @@ def export_event_pentabarf(event_identifier):
135113

136114

137115
@export_routes.route('/events/<string:event_identifier>/export/orders/csv', methods=['GET'])
138-
@jwt_required
139-
def export_orders_csv(event_identifier):
140-
if not event_identifier.isdigit():
141-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
142-
event_id = str(event.id)
143-
else:
144-
event_id = event_identifier
116+
@is_coorganizer
117+
def export_orders_csv(event_id):
145118

146119
from .helpers.tasks import export_order_csv_task
147120

@@ -155,13 +128,8 @@ def export_orders_csv(event_identifier):
155128

156129

157130
@export_routes.route('/events/<string:event_identifier>/export/orders/pdf', methods=['GET'])
158-
@jwt_required
159-
def export_orders_pdf(event_identifier):
160-
if not event_identifier.isdigit():
161-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
162-
event_id = str(event.id)
163-
else:
164-
event_id = event_identifier
131+
@is_coorganizer
132+
def export_orders_pdf(event_id):
165133

166134
from .helpers.tasks import export_order_pdf_task
167135

@@ -175,13 +143,8 @@ def export_orders_pdf(event_identifier):
175143

176144

177145
@export_routes.route('/events/<string:event_identifier>/export/attendees/csv', methods=['GET'])
178-
@jwt_required
179-
def export_attendees_csv(event_identifier):
180-
if not event_identifier.isdigit():
181-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
182-
event_id = str(event.id)
183-
else:
184-
event_id = event_identifier
146+
@is_coorganizer
147+
def export_attendees_csv(event_id):
185148

186149
from .helpers.tasks import export_attendees_csv_task
187150

@@ -195,13 +158,8 @@ def export_attendees_csv(event_identifier):
195158

196159

197160
@export_routes.route('/events/<string:event_identifier>/export/attendees/pdf', methods=['GET'])
198-
@jwt_required
199-
def export_attendees_pdf(event_identifier):
200-
if not event_identifier.isdigit():
201-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
202-
event_id = str(event.id)
203-
else:
204-
event_id = event_identifier
161+
@is_coorganizer
162+
def export_attendees_pdf(event_id):
205163

206164
from .helpers.tasks import export_attendees_pdf_task
207165

@@ -215,13 +173,8 @@ def export_attendees_pdf(event_identifier):
215173

216174

217175
@export_routes.route('/events/<string:event_identifier>/export/sessions/csv', methods=['GET'])
218-
@jwt_required
219-
def export_sessions_csv(event_identifier):
220-
if not event_identifier.isdigit():
221-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
222-
event_id = str(event.id)
223-
else:
224-
event_id = event_identifier
176+
@is_coorganizer
177+
def export_sessions_csv(event_id):
225178

226179
from .helpers.tasks import export_sessions_csv_task
227180

@@ -235,13 +188,8 @@ def export_sessions_csv(event_identifier):
235188

236189

237190
@export_routes.route('/events/<string:event_identifier>/export/speakers/csv', methods=['GET'])
238-
@jwt_required
239-
def export_speakers_csv(event_identifier):
240-
if not event_identifier.isdigit():
241-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
242-
event_id = str(event.id)
243-
else:
244-
event_id = event_identifier
191+
@is_coorganizer
192+
def export_speakers_csv(event_id):
245193

246194
from .helpers.tasks import export_speakers_csv_task
247195

@@ -255,13 +203,8 @@ def export_speakers_csv(event_identifier):
255203

256204

257205
@export_routes.route('/events/<string:event_identifier>/export/sessions/pdf', methods=['GET'])
258-
@jwt_required
259-
def export_sessions_pdf(event_identifier):
260-
if not event_identifier.isdigit():
261-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
262-
event_id = str(event.id)
263-
else:
264-
event_id = event_identifier
206+
@is_coorganizer
207+
def export_sessions_pdf(event_id):
265208

266209
from .helpers.tasks import export_sessions_pdf_task
267210

@@ -275,13 +218,8 @@ def export_sessions_pdf(event_identifier):
275218

276219

277220
@export_routes.route('/events/<string:event_identifier>/export/speakers/pdf', methods=['GET'])
278-
@jwt_required
279-
def export_speakers_pdf(event_identifier):
280-
if not event_identifier.isdigit():
281-
event = db.session.query(Event).filter_by(identifier=event_identifier).first()
282-
event_id = str(event.id)
283-
else:
284-
event_id = event_identifier
221+
@is_coorganizer
222+
def export_speakers_pdf(event_id):
285223

286224
from .helpers.tasks import export_speakers_pdf_task
287225

app/api/helpers/permissions.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from flask_jwt_extended import verify_jwt_in_request, current_user
44

55
from app.api.helpers.db import save_to_db
6+
from app.models import db
7+
from app.models.event import Event
68
from app.api.helpers.errors import ForbiddenError
79
from flask import request
810
from datetime import datetime
@@ -157,6 +159,11 @@ def is_coorganizer(f):
157159
def decorated_function(*args, **kwargs):
158160
user = current_user
159161

162+
if 'event_identifier' in kwargs:
163+
event = db.session.query(Event).filter_by(identifier=kwargs['event_identifier']).first()
164+
kwargs['event_id'] = str(event.id)
165+
kwargs.pop('event_identifier', None)
166+
160167
if user.is_staff:
161168
return f(*args, **kwargs)
162169
if 'event_id' in kwargs and user.has_event_access(kwargs['event_id']):

0 commit comments

Comments
 (0)