Beispiel #1
0
    def login_user(osm_user_details, redirect_to, 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:
            UserService.get_user_by_id(osm_id)
        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)
            MessageService.send_welcome_message(new_user)

        session_token = AuthenticationService.generate_session_token_for_user(
            osm_id)
        authorized_url = AuthenticationService.generate_authorized_url(
            username, session_token, redirect_to)

        return authorized_url
    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)