Example #1
0
File: auth.py Project: keho98/argos
def _process_user(provider, provider_id, token, secret, userdata):
    """
    Processes a user to either login or
    add a new authentication to an existing user.
    """
    # If there is already an authenticated user,
    # add this provider to that user.
    if current_user.is_authenticated:
        try:
            current_user.add_provider(provider, provider_id, token, secret, update=True)

        # Conflict - this added authentication already exists but is
        # associated with another user.
        except AuthExistsForUserException as e:
            return jsonify(status=409, message=e.message)

    # Otherwise...
    else:
        # Try to find an existing auth and user.
        auth = Auth.for_provider(provider, provider_id)

        # If one is found, update the auth.
        if auth:
            user = auth.user
            auth.update_token(token, secret)

        # Otherwise create a new user and auth.
        else:
            user = User(**userdata)
            auth = Auth(provider, provider_id, token, secret)
            auth.user = user
            db.session.add(user)
            db.session.add(auth)
        db.session.commit()
        login_user(user)
Example #2
0
    def test_merge_prefer_merger(self):
        user_a = User(**self.userdata)
        user_b = User(name='Hubble Bubbs')
        auth_a = Auth(**self.authdata)
        auth_b = Auth(self.authdata['provider'], '8ahf81', '98kn32kafo2')

        auth_a.user = user_a
        auth_b.user = user_b

        for obj in [user_a, user_b, auth_a, auth_b]:
            db.session.add(obj)
        db.session.commit()

        user_a.merge(user_b)

        self.assertEqual(len(user_a.auths.all()), 1)
        self.assertEqual(user_a.auths.first().provider_id, self.authdata['provider_id'])
Example #3
0
    def test_add_provider_conflict(self):
        auth = Auth(**self.authdata)
        user_a = User(**self.userdata)
        user_b = User(name='Hubble Bubbs')
        auth.user = user_a

        db.session.add(auth)
        db.session.commit()

        self.assertRaises(AuthExistsForUserException, user_b.add_provider, **self.authdata)
Example #4
0
    def test_merge(self):
        user_a = User(**self.userdata)
        user_b = User(name='Hubble Bubbs')
        auth_a = Auth(**self.authdata)
        auth_b = Auth('twitter', '8ahf81', '98kn32kafo2')

        auth_a.user = user_a
        auth_b.user = user_b

        for obj in [user_a, user_b, auth_a, auth_b]:
            db.session.add(obj)
        db.session.commit()

        self.assertEqual(User.query.count(), 2)

        user_a.merge(user_b)

        self.assertEqual(len(user_a.auths.all()), 2)
        self.assertEqual(User.query.count(), 1)
Example #5
0
File: auth.py Project: keho98/argos
def _process_user(provider, provider_id, token, secret, userdata):
    """
    Processes a user to either login or
    add a new authentication to an existing user.
    """
    # If there is already an authenticated user,
    # add this provider to that user.
    if current_user.is_authenticated:
        try:
            current_user.add_provider(provider,
                                      provider_id,
                                      token,
                                      secret,
                                      update=True)

        # Conflict - this added authentication already exists but is
        # associated with another user.
        except AuthExistsForUserException as e:
            return jsonify(status=409, message=e.message)

    # Otherwise...
    else:
        # Try to find an existing auth and user.
        auth = Auth.for_provider(provider, provider_id)

        # If one is found, update the auth.
        if auth:
            user = auth.user
            auth.update_token(token, secret)

        # Otherwise create a new user and auth.
        else:
            user = User(**userdata)
            auth = Auth(provider, provider_id, token, secret)
            auth.user = user
            db.session.add(user)
            db.session.add(auth)
        db.session.commit()
        login_user(user)