def dispatch(self, request, organization_slug): from sentry.auth.helper import AuthHelper helper = AuthHelper.get_for_request(request) # SP initiated authentication, request helper is provided if helper: from sentry.web.frontend.auth_provider_login import AuthProviderLoginView sso_login = AuthProviderLoginView() return sso_login.handle(request) # IdP initiated authentication. The organizatio_slug must be valid and # an auth provider must exist for this organization to proceed with # IdP initiated SAML auth. try: organization = Organization.objects.get(slug=organization_slug) except Organization.DoesNotExist: messages.add_message(request, messages.ERROR, ERR_NO_SAML_SSO) return self.redirect(reverse('sentry-login')) try: auth_provider = AuthProvider.objects.get(organization=organization) except AuthProvider.DoesNotExist: messages.add_message(request, messages.ERROR, ERR_NO_SAML_SSO) return self.redirect(reverse('sentry-login')) helper = AuthHelper( request=request, organization=organization, auth_provider=auth_provider, flow=AuthHelper.FLOW_LOGIN, ) helper.init_pipeline() return helper.current_step()
def handle(self, request): helper = AuthHelper.get_for_request(request) if helper is None: return self.redirect(reverse('sentry-login')) if not helper.pipeline_is_valid(): return helper.error('Something unexpected happened during authentication.') return helper.next_step()
def handle(self, request): helper = AuthHelper.get_for_request(request) if helper is None: return self.redirect(reverse("sentry-login")) if not helper.is_valid(): return helper.error("Something unexpected happened during authentication.") return helper.current_step()
def _test_pipeline(self, flow): initial_state = { "org_id": self.organization.id, "flow": flow, "provider_model_id": self.auth_provider.id, "provider_key": None, } local_client = clusters.get("default").get_local_client_for_key(self.auth_key) local_client.set(self.auth_key, json.dumps(initial_state)) helper = AuthHelper.get_for_request(self.request) helper.initialize() assert helper.is_valid() first_step = helper.current_step() assert first_step.status_code == 200 next_step = helper.next_step() assert next_step.status_code == 302 return next_step