Skip to content

Commit 156ba1d

Browse files
renzonrenzon
authored andcommitted
Implemente user login on memberkit
close #3817
1 parent 385da32 commit 156ba1d

File tree

5 files changed

+37
-3
lines changed

5 files changed

+37
-3
lines changed

pythonpro/domain/subscription_domain.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ def sync_user_on_discourse(subscription: Subscription):
4444
params = {
4545
'email': subscriber.email,
4646
'external_id': subscriber.id,
47-
'require_actisubscription.discourse_groups': 'false',
48-
'groups': ','.join(subscription.discourse_groups)
47+
'require_activation': 'false',
48+
'add_groups': ','.join(subscription.discourse_groups)
4949
}
5050
sso_payload, signature = discourse_facade.generate_sso_payload_and_signature(params)
5151
# query_string = parse.urlencode()
@@ -78,7 +78,7 @@ def remove_from_discourse(subscription: Subscription):
7878
params = {
7979
'email': subscriber.email,
8080
'external_id': subscriber.id,
81-
'require_actisubscription.discourse_groups': 'false',
81+
'require_activation': 'false',
8282
'remove_groups': ','.join(subscription.discourse_groups)
8383
}
8484
sso_payload, signature = discourse_facade.generate_sso_payload_and_signature(params)

pythonpro/memberkit/api.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,11 @@ def inactivate_user(memberkit_user_id: int, subscription_type_id: int, *,
8787
}
8888
response = requests.post(f'{_base_url}/api/v1/users?api_key={api_key}', json=data)
8989
return response.json()
90+
91+
92+
@_configure_api_key
93+
def generate_token(memberkit_user_id: int, *, api_key=_ApiKeyNone):
94+
user_json = user_detail(memberkit_user_id, api_key=api_key)
95+
data = {'email': user_json['email']}
96+
response = requests.post(f'{_base_url}/api/v1/tokens?api_key={api_key}', json=data)
97+
return response.json()['token']

pythonpro/memberkit/facade.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from builtins import Exception
12
from typing import List
23

34
from django.utils import timezone
@@ -65,3 +66,17 @@ def inactivate(subscription, responsible=None, observation=''):
6566
'status', 'activated_at', 'responsible', 'observation'
6667
])
6768
return subscription
69+
70+
71+
class InactiveUserException(Exception):
72+
pass
73+
74+
75+
def create_login_url(user):
76+
subscription = Subscription.objects.filter(
77+
subscriber=user, status=Subscription.Status.ACTIVE
78+
).exclude(activated_at__isnull=True).only('memberkit_user_id').first()
79+
if not subscription:
80+
raise InactiveUserException(str(user))
81+
token = api.generate_token(subscription.memberkit_user_id)
82+
return f'https://plataforma.dev.pro.br?token={token}'

pythonpro/memberkit/views.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from django.contrib.auth.decorators import login_required
2+
from django.shortcuts import redirect
3+
4+
from pythonpro.memberkit import facade
5+
6+
7+
@login_required
8+
def login_on_memberkit(request):
9+
return redirect(facade.create_login_url(request.user))

pythonpro/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from two_factor.urls import urlpatterns as tf_urls
2727

2828
from pythonpro.core import views as core_views
29+
from pythonpro.memberkit.views import login_on_memberkit
2930

3031
urlpatterns = [
3132
path('admin/', admin.site.urls),
@@ -49,6 +50,7 @@
4950
path('r/', include('pythonpro.redirector.urls')),
5051
path('p/', include('pythonpro.pages.urls')),
5152
path('checkout/', include('django_pagarme.urls')),
53+
path('memberkit/', login_on_memberkit),
5254

5355
# unused pages
5456
path(

0 commit comments

Comments
 (0)