def dispatch(self, request, organization, provider): sp_metadata_url = absolute_uri( reverse("sentry-auth-organization-saml-metadata", args=[organization.slug])) if request.method != "POST": saml_form = SAMLForm(provider.config["idp"]) attr_mapping_form = AttributeMappingForm( provider.config["attribute_mapping"]) else: saml_form = SAMLForm(request.POST) attr_mapping_form = AttributeMappingForm(request.POST) if saml_form.is_valid() and attr_mapping_form.is_valid(): provider.config["idp"] = saml_form.cleaned_data provider.config[ "attr_mapping_form"] = attr_mapping_form.cleaned_data provider.save() return self.render( "sentry_auth_saml2/configure.html", { "sp_metadata_url": sp_metadata_url, "forms": { "saml": saml_form, "attrs": attr_mapping_form }, }, )
def handle(self, request: Request, helper) -> Response: op = "url" forms = {"url": URLMetadataForm(), "xml": XMLMetadataForm(), "idp": SAMLForm()} if "action_save" in request.POST: op = request.POST["action_save"] form_cls = forms[op].__class__ forms[op] = process_metadata(form_cls, request, helper) # process_metadata will return None when the action was successful and # data was bound to the helper. if not forms[op]: return helper.next_step() return self.respond("sentry_auth_saml2/select-idp.html", {"op": op, "forms": forms})