2020-07-09 21:37:13 +00:00
|
|
|
"""OAuth Stages"""
|
|
|
|
from django.http import HttpRequest, HttpResponse
|
|
|
|
|
|
|
|
from passbook.audit.models import Event, EventAction
|
|
|
|
from passbook.core.models import User
|
|
|
|
from passbook.flows.planner import PLAN_CONTEXT_PENDING_USER
|
|
|
|
from passbook.flows.stage import StageView
|
|
|
|
from passbook.sources.oauth.models import UserOAuthSourceConnection
|
|
|
|
|
|
|
|
PLAN_CONTEXT_SOURCES_OAUTH_ACCESS = "sources_oauth_access"
|
|
|
|
|
|
|
|
|
|
|
|
class PostUserEnrollmentStage(StageView):
|
|
|
|
"""Dynamically injected stage which saves the OAuth Connection after
|
|
|
|
the user has been enrolled."""
|
|
|
|
|
|
|
|
def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
|
|
|
|
access: UserOAuthSourceConnection = self.executor.plan.context[
|
|
|
|
PLAN_CONTEXT_SOURCES_OAUTH_ACCESS
|
|
|
|
]
|
|
|
|
user: User = self.executor.plan.context[PLAN_CONTEXT_PENDING_USER]
|
|
|
|
access.user = user
|
|
|
|
access.save()
|
|
|
|
UserOAuthSourceConnection.objects.filter(pk=access.pk).update(user=user)
|
|
|
|
Event.new(
|
2020-09-21 18:30:30 +00:00
|
|
|
EventAction.SOURCE_LINKED,
|
|
|
|
message="Linked OAuth Source",
|
|
|
|
source=access.source,
|
2020-07-09 21:37:13 +00:00
|
|
|
).from_http(self.request)
|
|
|
|
return self.executor.stage_ok()
|