async def _async_render_POST(self, request: Request): try: session_id = get_username_mapping_session_cookie_from_request( request) except SynapseError as e: logger.warning("Error fetching session cookie: %s", e) self._sso_handler.render_error(request, "bad_session", e.msg, code=e.code) return try: accepted_version = parse_string(request, "accepted_version", required=True) except SynapseError as e: self._sso_handler.render_error(request, "bad_param", e.msg, code=e.code) return await self._sso_handler.handle_terms_accepted(request, session_id, accepted_version)
async def _async_render_GET(self, request: Request) -> None: try: session_id = get_username_mapping_session_cookie_from_request( request) session = self._sso_handler.get_mapping_session(session_id) except SynapseError as e: logger.warning("Error fetching session: %s", e) self._sso_handler.render_error(request, "bad_session", e.msg, code=e.code) return # The configuration might mandate going through this step to validate an # automatically generated localpart, so session.chosen_localpart might already # be set. localpart = "" if session.chosen_localpart is not None: localpart = session.chosen_localpart idp_id = session.auth_provider_id template_params = { "idp": self._sso_handler.get_identity_providers()[idp_id], "user_attributes": { "display_name": session.display_name, "emails": session.emails, "localpart": localpart, }, } template = self._jinja_env.get_template( "sso_auth_account_details.html") html = template.render(template_params) respond_with_html(request, 200, html)
async def _async_render_GET(self, request: Request) -> None: try: session_id = get_username_mapping_session_cookie_from_request( request) session = self._sso_handler.get_mapping_session(session_id) except SynapseError as e: logger.warning("Error fetching session: %s", e) self._sso_handler.render_error(request, "bad_session", e.msg, code=e.code) return idp_id = session.auth_provider_id template_params = { "idp": self._sso_handler.get_identity_providers()[idp_id], "user_attributes": { "display_name": session.display_name, "emails": session.emails, }, } template = self._jinja_env.get_template( "sso_auth_account_details.html") html = template.render(template_params) respond_with_html(request, 200, html)
async def _async_render_GET(self, request: Request) -> None: try: session_id = get_username_mapping_session_cookie_from_request( request) session = self._sso_handler.get_mapping_session(session_id) except SynapseError as e: logger.warning("Error fetching session: %s", e) self._sso_handler.render_error(request, "bad_session", e.msg, code=e.code) return user_id = UserID(session.chosen_localpart, self._server_name) user_profile = { "display_name": session.display_name, } template_params = { "user_id": user_id.to_string(), "user_profile": user_profile, "consent_version": self._consent_version, "terms_url": "/_matrix/consent?v=%s" % (self._consent_version, ), } template = self._jinja_env.get_template("sso_new_user_consent.html") html = template.render(template_params) respond_with_html(request, 200, html)
async def _async_render_POST(self, request: SynapseRequest): try: session_id = get_username_mapping_session_cookie_from_request(request) except SynapseError as e: logger.warning("Error fetching session cookie: %s", e) self._sso_handler.render_error(request, "bad_session", e.msg, code=e.code) return try: localpart = parse_string(request, "username", required=True) use_display_name = parse_boolean(request, "use_display_name", default=False) try: emails_to_use = [ val.decode("utf-8") for val in request.args.get(b"use_email", []) ] # type: List[str] except ValueError: raise SynapseError(400, "Query parameter use_email must be utf-8") except SynapseError as e: logger.warning("[session %s] bad param: %s", session_id, e) self._sso_handler.render_error(request, "bad_param", e.msg, code=e.code) return await self._sso_handler.handle_submit_username_request( request, session_id, localpart, use_display_name, emails_to_use )
async def _async_render_GET(self, request: Request): localpart = parse_string(request, "username", required=True) session_id = get_username_mapping_session_cookie_from_request(request) is_available = await self._sso_handler.check_username_availability( localpart, session_id) return 200, {"available": is_available}
async def _async_render_GET(self, request: Request) -> None: try: session_id = get_username_mapping_session_cookie_from_request(request) except SynapseError as e: logger.warning("Error fetching session cookie: %s", e) self._sso_handler.render_error(request, "bad_session", e.msg, code=e.code) return await self._sso_handler.register_sso_user(request, session_id)
async def _async_render_GET(self, request: Request) -> None: try: session_id = get_username_mapping_session_cookie_from_request( request) session = self._sso_handler.get_mapping_session(session_id) except SynapseError as e: logger.warning("Error fetching session: %s", e) self._sso_handler.render_error(request, "bad_session", e.msg, code=e.code) return # It should be impossible to get here without having first been through # the pick-a-username step, which ensures chosen_localpart gets set. if not session.chosen_localpart: logger.warning("Session has no user name selected") self._sso_handler.render_error(request, "no_user", "No user name has been selected.", code=400) return user_id = UserID(session.chosen_localpart, self._server_name) user_profile = { "display_name": session.display_name, } template_params = { "user_id": user_id.to_string(), "user_profile": user_profile, "consent_version": self._consent_version, "terms_url": "/_matrix/consent?v=%s" % (self._consent_version, ), } template = self._jinja_env.get_template("sso_new_user_consent.html") html = template.render(template_params) respond_with_html(request, 200, html)