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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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
        )
Beispiel #6
0
    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}
Beispiel #7
0
 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)