Skip to content

Commit 1ef10f5

Browse files
authored
fix: Stripe publishable key should be accessible to user (#6277)
1 parent ce62ff0 commit 1ef10f5

File tree

3 files changed

+65
-15
lines changed

3 files changed

+65
-15
lines changed

app/api/schema/events.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,13 @@ def validate_timezone(self, data, original_data):
278278
schema='UserSchemaPublic',
279279
type_='user',
280280
many=True)
281+
stripe_authorization = Relationship(attribute='stripe_authorization',
282+
self_view='v1.stripe_authorization_event',
283+
self_view_kwargs={'id': '<id>'},
284+
related_view='v1.stripe_authorization_detail',
285+
related_view_kwargs={'event_id': '<id>'},
286+
schema='StripeAuthorizationSchema',
287+
type_='stripe-authorization')
281288

282289

283290
class EventSchema(EventSchemaPublic):
@@ -355,10 +362,3 @@ class Meta:
355362
schema='AttendeeSchema',
356363
many=True,
357364
type_='attendee')
358-
stripe_authorization = Relationship(attribute='stripe_authorization',
359-
self_view='v1.stripe_authorization_event',
360-
self_view_kwargs={'id': '<id>'},
361-
related_view='v1.stripe_authorization_detail',
362-
related_view_kwargs={'event_id': '<id>'},
363-
schema='StripeAuthorizationSchema',
364-
type_='stripe-authorization')

app/api/schema/stripe_authorization.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from app.api.schema.base import SoftDeletionSchema
66

77

8-
class StripeAuthorizationSchema(SoftDeletionSchema):
8+
class StripeAuthorizationSchemaPublic(SoftDeletionSchema):
99
"""
1010
Stripe Authorization Schema
1111
"""
@@ -21,7 +21,6 @@ class Meta:
2121

2222
id = fields.Str(dump_only=True)
2323
stripe_publishable_key = fields.Str(dump_only=True)
24-
stripe_auth_code = fields.Str(load_only=True, required=True)
2524

2625
event = Relationship(attribute='event',
2726
self_view='v1.stripe_authorization_event',
@@ -30,3 +29,22 @@ class Meta:
3029
related_view_kwargs={'stripe_authorization_id': '<id>'},
3130
schema="EventSchema",
3231
type_='event')
32+
33+
34+
class StripeAuthorizationSchema(StripeAuthorizationSchemaPublic):
35+
"""
36+
Stripe Authorization Schema
37+
"""
38+
39+
class Meta:
40+
"""
41+
Meta class for StripeAuthorization Api Schema
42+
"""
43+
type_ = 'stripe-authorization'
44+
self_view = 'v1.stripe_authorization_detail'
45+
self_view_kwargs = {'id': '<id>'}
46+
inflect = dasherize
47+
48+
stripe_auth_code = fields.Str(load_only=True, required=True)
49+
50+

app/api/stripe_authorization.py

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
from sqlalchemy.orm.exc import NoResultFound
33

44
from app.api.bootstrap import api
5+
from flask import request
56
from app.api.helpers.db import safe_query, get_count, save_to_db
67
from app.api.helpers.exceptions import ForbiddenException, ConflictException, UnprocessableEntity
78
from app.api.helpers.payment import StripePaymentsManager
89
from app.api.helpers.permission_manager import has_access
910
from app.api.helpers.permissions import jwt_required
1011
from app.api.helpers.utilities import require_relationship
11-
from app.api.schema.stripe_authorization import StripeAuthorizationSchema
12+
from app.api.schema.stripe_authorization import StripeAuthorizationSchema, StripeAuthorizationSchemaPublic
1213
from app.models import db
1314
from app.models.event import Event
1415
from app.models.stripe_authorization import StripeAuthorization
@@ -69,7 +70,8 @@ def after_create_object(self, stripe_authorization, data, view_kwargs):
6970
save_to_db(event)
7071

7172
schema = StripeAuthorizationSchema
72-
decorators = (jwt_required, )
73+
decorators = (api.has_permission('is_coorganizer', fetch="event_id",
74+
fetch_as="event_id", model=StripeAuthorization),)
7375
methods = ['POST']
7476
data_layer = {'session': db.session,
7577
'model': StripeAuthorization,
@@ -83,6 +85,20 @@ class StripeAuthorizationDetail(ResourceDetail):
8385
"""
8486
Stripe Authorization Detail Resource by ID
8587
"""
88+
89+
def before_get(self, args, kwargs):
90+
"""
91+
method for assigning schema based on access
92+
:param args:
93+
:param kwargs:
94+
:return:
95+
"""
96+
kwargs = get_id(kwargs)
97+
if 'Authorization' in request.headers and has_access('is_coorganizer', event_id=kwargs['id']):
98+
self.schema = StripeAuthorizationSchema
99+
else:
100+
self.schema = StripeAuthorizationSchemaPublic
101+
86102
def before_get_object(self, view_kwargs):
87103
"""
88104
method to get id of stripe authorization related to an event
@@ -107,8 +123,7 @@ def after_delete_object(self, stripe_authorization, view_kwargs):
107123
event.is_stripe_linked = False
108124
save_to_db(event)
109125

110-
decorators = (api.has_permission('is_coorganizer', fetch="event_id",
111-
fetch_as="event_id", model=StripeAuthorization),)
126+
decorators = (jwt_required,)
112127
schema = StripeAuthorizationSchema
113128
data_layer = {'session': db.session,
114129
'model': StripeAuthorization,
@@ -123,8 +138,25 @@ class StripeAuthorizationRelationship(ResourceDetail):
123138
Stripe Authorization Relationship
124139
"""
125140

126-
decorators = (api.has_permission('is_coorganizer', fetch="event_id",
127-
fetch_as="event_id", model=StripeAuthorization),)
141+
decorators = (jwt_required,)
128142
schema = StripeAuthorizationSchema
129143
data_layer = {'session': db.session,
130144
'model': StripeAuthorization}
145+
146+
147+
def get_id(view_kwargs):
148+
"""
149+
method to get the resource id for fetching details
150+
:param view_kwargs:
151+
:return:
152+
"""
153+
154+
if view_kwargs.get('event_identifier') is not None:
155+
event = safe_query(db, Event, 'identifier', view_kwargs['event_identifier'], 'event_identifier')
156+
if event.id is not None:
157+
view_kwargs['event_id'] = event.id
158+
159+
if view_kwargs.get('event_id') is not None:
160+
stripe_authorization = safe_query(db, StripeAuthorization, 'event_id', view_kwargs['event_id'], 'event_id')
161+
view_kwargs['id'] = stripe_authorization.id
162+
return view_kwargs

0 commit comments

Comments
 (0)