Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions pythonpro/domain/subscription_domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ def sync_user_on_discourse(subscription: Subscription):
params = {
'email': subscriber.email,
'external_id': subscriber.id,
'require_actisubscription.discourse_groups': 'false',
'groups': ','.join(subscription.discourse_groups)
'require_activation': 'false',
'add_groups': ','.join(subscription.discourse_groups)
}
sso_payload, signature = discourse_facade.generate_sso_payload_and_signature(params)
# query_string = parse.urlencode()
Expand Down Expand Up @@ -78,7 +78,7 @@ def remove_from_discourse(subscription: Subscription):
params = {
'email': subscriber.email,
'external_id': subscriber.id,
'require_actisubscription.discourse_groups': 'false',
'require_activation': 'false',
'remove_groups': ','.join(subscription.discourse_groups)
}
sso_payload, signature = discourse_facade.generate_sso_payload_and_signature(params)
Expand Down
8 changes: 8 additions & 0 deletions pythonpro/memberkit/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,11 @@ def inactivate_user(memberkit_user_id: int, subscription_type_id: int, *,
}
response = requests.post(f'{_base_url}/api/v1/users?api_key={api_key}', json=data)
return response.json()


@_configure_api_key
def generate_token(memberkit_user_id: int, *, api_key=_ApiKeyNone):
user_json = user_detail(memberkit_user_id, api_key=api_key)
data = {'email': user_json['email']}
response = requests.post(f'{_base_url}/api/v1/tokens?api_key={api_key}', json=data)
return response.json()['token']
15 changes: 15 additions & 0 deletions pythonpro/memberkit/facade.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from builtins import Exception
from typing import List

from django.utils import timezone
Expand Down Expand Up @@ -65,3 +66,17 @@ def inactivate(subscription, responsible=None, observation=''):
'status', 'activated_at', 'responsible', 'observation'
])
return subscription


class InactiveUserException(Exception):
pass


def create_login_url(user):
subscription = Subscription.objects.filter(
subscriber=user, status=Subscription.Status.ACTIVE
).exclude(activated_at__isnull=True).only('memberkit_user_id').first()
if not subscription:
raise InactiveUserException(str(user))
token = api.generate_token(subscription.memberkit_user_id)
return f'https://plataforma.dev.pro.br?token={token}'
9 changes: 9 additions & 0 deletions pythonpro/memberkit/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect

from pythonpro.memberkit import facade


@login_required
def login_on_memberkit(request):
return redirect(facade.create_login_url(request.user))
2 changes: 2 additions & 0 deletions pythonpro/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from two_factor.urls import urlpatterns as tf_urls

from pythonpro.core import views as core_views
from pythonpro.memberkit.views import login_on_memberkit

urlpatterns = [
path('admin/', admin.site.urls),
Expand All @@ -49,6 +50,7 @@
path('r/', include('pythonpro.redirector.urls')),
path('p/', include('pythonpro.pages.urls')),
path('checkout/', include('django_pagarme.urls')),
path('memberkit/', login_on_memberkit),

# unused pages
path(
Expand Down