示例#1
0
    def login_user(osm_user_details, email, user_element="user") -> str:
        """
        Generates authentication details for user, creating in DB if user is unknown to us
        :param osm_user_details: XML response from OSM
        :param redirect_to: Route to redirect user to, from callback url
        :param user_element: Exists for unit testing
        :raises AuthServiceError
        :returns Authorized URL with authentication details in query string
        """
        osm_user = osm_user_details.find(user_element)

        if osm_user is None:
            raise AuthServiceError("User element not found in OSM response")

        osm_id = int(osm_user.attrib["id"])
        username = osm_user.attrib["display_name"]
        try:
            # get gravatar profile picture file name
            user_picture = osm_user.find("img").attrib["href"]
        except (AttributeError, IndexError):
            user_picture = None

        try:
            UserService.get_user_by_id(osm_id)
            UserService.update_user(osm_id, username, user_picture)
        except NotFound:
            # User not found, so must be new user
            changesets = osm_user.find("changesets")
            changeset_count = int(changesets.attrib["count"])
            new_user = UserService.register_user(osm_id, username,
                                                 changeset_count, user_picture,
                                                 email)
            MessageService.send_welcome_message(new_user)

        session_token = AuthenticationService.generate_session_token_for_user(
            osm_id)
        return {
            "username": username,
            "session_token": session_token,
            "picture": user_picture,
        }
示例#2
0
    def test_welcome_message_sent(self):
        self.test_user = create_canned_user()
        # Act
        message_id = MessageService.send_welcome_message(self.test_user)
        self.assertIsNotNone(message_id)
        message = MessageService.get_message(message_id, self.test_user.id)

        # Assert
        self.assertTrue(message, "Message should be saved to DB")

        # Tidyup
        MessageService.delete_message(message_id, self.test_user.id)
示例#3
0
    def test_welcome_message_sent(self):
        if self.skip_tests:
            return

        # Act
        message_id = MessageService.send_welcome_message(self.test_user)
        message = MessageService.get_message(message_id, self.test_user.id)

        # Assert
        self.assertTrue(message, "Message should be saved to DB")

        # Tidyup
        MessageService.delete_message(message_id, self.test_user.id)