def test_associate_with_user_id_collision_raises(self):
        firebase_auth_services.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))

        with self.assertRaisesRegexp(Exception, 'already associated'):
            firebase_auth_services.associate_auth_id_with_user_id(
                auth_domain.AuthIdUserIdPair('aid', 'uid'))
    def test_associate_existing_auth_id_to_user_id_raises(self):
        auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair('sub', 'uid'))

        with self.assertRaisesRegexp(Exception, 'already mapped to user_id'):
            auth_services.associate_auth_id_to_user_id(
                auth_domain.AuthIdUserIdPair('sub', 'uid'))
示例#3
0
    def test_associate_auth_id_with_user_id_with_collision_raises(self):
        self.stub.associate_auth_id_with_user_id(auth_domain.AuthIdUserIdPair(
            'aid', 'uid'))

        with self.assertRaisesRegex(Exception, 'already associated'):
            self.stub.associate_auth_id_with_user_id(
                auth_domain.AuthIdUserIdPair('aid', 'uid'))
    def test_get_multi_associations_that_exist(self):
        self.put_association(auth_domain.AuthIdUserIdPair('sub1', 'uid1'))
        self.put_association(auth_domain.AuthIdUserIdPair('sub2', 'uid2'))
        self.put_association(auth_domain.AuthIdUserIdPair('sub3', 'uid3'))

        self.assertEqual(
            auth_services.get_multi_user_ids_from_auth_ids(
                ['sub1', 'sub2', 'sub3']), ['uid1', 'uid2', 'uid3'])
    def test_get_multi_associations_when_one_does_not_exist(self):
        self.put_association(auth_domain.AuthIdUserIdPair('sub1', 'uid1'))
        # Mapping from sub2 -> uid2 missing.
        self.put_association(auth_domain.AuthIdUserIdPair('sub3', 'uid3'))

        self.assertEqual(
            auth_services.get_multi_user_ids_from_auth_ids(
                ['sub1', 'sub2', 'sub3']), ['uid1', None, 'uid3'])
    def test_associate_with_auth_id_collision_raises(self):
        firebase_auth_services.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))
        # Erase the user_id collision, but leave the auth_id collision.
        auth_models.UserIdByFirebaseAuthIdModel.delete_by_id('aid')

        with self.assertRaisesRegexp(Exception, 'already associated'):
            firebase_auth_services.associate_auth_id_with_user_id(
                auth_domain.AuthIdUserIdPair('aid', 'uid'))
示例#7
0
    def test_associate_multi_auth_ids_with_user_ids_with_collision_raises(self):
        self.stub.associate_auth_id_with_user_id(auth_domain.AuthIdUserIdPair(
            'aid1', 'uid1'))

        with self.assertRaisesRegexp(Exception, 'already associated'):
            self.stub.associate_multi_auth_ids_with_user_ids(
                [auth_domain.AuthIdUserIdPair('aid1', 'uid1'),
                 auth_domain.AuthIdUserIdPair('aid2', 'uid2'),
                 auth_domain.AuthIdUserIdPair('aid3', 'uid3')])
示例#8
0
    def test_associate_auth_id_with_user_id_with_collision_raises(
            self) -> None:
        auth_services.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))

        with self.assertRaisesRegex(
                Exception,
                'already associated'):  # type: ignore[no-untyped-call]
            auth_services.associate_auth_id_with_user_id(
                auth_domain.AuthIdUserIdPair('aid', 'uid'))
    def test_get_multi_associations_with_one_missing(self):
        firebase_auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair('aid1', 'uid1'))
        # The aid2 <-> uid2 association is missing.
        firebase_auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair('aid3', 'uid3'))

        self.assertEqual(
            firebase_auth_services.get_multi_user_ids_from_auth_ids(
                ['aid1', 'aid2', 'aid3']),
            ['uid1', None, 'uid3'])
    def test_associate_multi_an_existing_auth_id_to_user_id_mapping_raises(
            self):
        auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair('sub1', 'uid1'))

        with self.assertRaisesRegexp(Exception, 'associations already exist'):
            auth_services.associate_multi_auth_ids_to_user_ids([
                auth_domain.AuthIdUserIdPair('sub1', 'uid1'),
                auth_domain.AuthIdUserIdPair('sub2', 'uid2'),
                auth_domain.AuthIdUserIdPair('sub3', 'uid3'),
            ])
示例#11
0
    def test_associate_multi_auth_ids_with_user_ids_without_collisions(self):
        self.stub.associate_multi_auth_ids_with_user_ids(
            [auth_domain.AuthIdUserIdPair('aid1', 'uid1'),
             auth_domain.AuthIdUserIdPair('aid2', 'uid2'),
             auth_domain.AuthIdUserIdPair('aid3', 'uid3')])

        self.assertEqual(
            [self.stub.get_user_id_from_auth_id('aid1'),
             self.stub.get_user_id_from_auth_id('aid2'),
             self.stub.get_user_id_from_auth_id('aid3')],
            ['uid1', 'uid2', 'uid3'])
示例#12
0
    def test_associate_multi_with_auth_id_collision_raises(self):
        gae_auth_services.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid1', 'uid1'))
        # Erase the user_id collision, but leave the auth_id collision.
        auth_models.UserIdentifiersModel.delete_by_id('aid1')

        with self.assertRaisesRegexp(Exception, 'already associated'):
            gae_auth_services.associate_multi_auth_ids_with_user_ids(
                [auth_domain.AuthIdUserIdPair('aid1', 'uid1'),
                 auth_domain.AuthIdUserIdPair('aid2', 'uid2'),
                 auth_domain.AuthIdUserIdPair('aid3', 'uid3')])
示例#13
0
    def test_associate_multi_without_collisions(self):
        firebase_auth_services.associate_multi_auth_ids_with_user_ids(
            [auth_domain.AuthIdUserIdPair('aid1', 'uid1'),
             auth_domain.AuthIdUserIdPair('aid2', 'uid2'),
             auth_domain.AuthIdUserIdPair('aid3', 'uid3')])

        self.assertEqual(
            [firebase_auth_services.get_user_id_from_auth_id('aid1'),
             firebase_auth_services.get_user_id_from_auth_id('aid2'),
             firebase_auth_services.get_user_id_from_auth_id('aid3')],
            ['uid1', 'uid2', 'uid3'])
    def test_associate_multi_new_auth_ids_to_user_ids(self):
        auth_services.associate_multi_auth_ids_to_user_ids([
            auth_domain.AuthIdUserIdPair('sub1', 'uid1'),
            auth_domain.AuthIdUserIdPair('sub2', 'uid2'),
            auth_domain.AuthIdUserIdPair('sub3', 'uid3'),
        ])

        self.assertEqual([
            self.get_associated_user_id('sub1'),
            self.get_associated_user_id('sub2'),
            self.get_associated_user_id('sub3')
        ], ['uid1', 'uid2', 'uid3'])
    def test_get_multi_associations_with_all_present(self):
        firebase_auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair('aid1', 'uid1'))
        firebase_auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair('aid2', 'uid2'))
        firebase_auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair('aid3', 'uid3'))

        self.assertEqual(
            firebase_auth_services.get_multi_user_ids_from_auth_ids(
                ['aid1', 'aid2', 'aid3']),
            ['uid1', 'uid2', 'uid3'])
示例#16
0
    def test_get_multi_associations_with_one_missing(self):
        self.stub.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid1', 'uid1'))
        # The aid2 <-> uid2 association is missing.
        self.stub.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid3', 'uid3'))

        self.assertEqual(
            self.stub.get_multi_user_ids_from_auth_ids(
                ['aid1', 'aid2', 'aid3']), ['uid1', None, 'uid3'])
        self.assertEqual(
            self.stub.get_multi_auth_ids_from_user_ids(
                ['uid1', 'uid2', 'uid3']), ['aid1', None, 'aid3'])
示例#17
0
    def test_get_multi_associations_with_all_present(self):
        self.stub.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid1', 'uid1'))
        self.stub.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid2', 'uid2'))
        self.stub.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid3', 'uid3'))

        self.assertEqual(
            self.stub.get_multi_user_ids_from_auth_ids(
                ['aid1', 'aid2', 'aid3']), ['uid1', 'uid2', 'uid3'])
        self.assertEqual(
            self.stub.get_multi_auth_ids_from_user_ids(
                ['uid1', 'uid2', 'uid3']), ['aid1', 'aid2', 'aid3'])
    def test_present_association_is_not_considered_to_be_deleted(self):
        firebase_admin.auth.create_user(uid='aid')
        firebase_auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))

        self.assertFalse(firebase_auth_services.are_auth_associations_deleted(
            'uid'))
    def setUp(self):
        super(FirebaseSpecificAssociationTests, self).setUp()
        self._uninstall_stub = FirebaseAdminSdkStub.install(self)

        firebase_admin.auth.create_user(uid=self.AUTH_ID)
        firebase_auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair(self.AUTH_ID, self.USER_ID))
 def setUp(self):
     super(DeleteAuthAssociationsTests, self).setUp()
     self.firebase_sdk_stub.create_user(self.AUTH_ID)
     self.signup(self.EMAIL, self.USERNAME)
     self.user_id = self.get_user_id_from_email(self.EMAIL)
     firebase_auth_services.associate_auth_id_with_user_id(
         auth_domain.AuthIdUserIdPair(self.AUTH_ID, self.user_id))
 def setUp(self):
     super(DeleteAuthAssociationsTests, self).setUp()
     self.firebase_sdk_stub.create_user(self.AUTH_ID)
     user_settings = user_services.create_new_user(self.AUTH_ID, self.EMAIL)
     self.user_id = user_settings.user_id
     firebase_auth_services.associate_auth_id_with_user_id(
         auth_domain.AuthIdUserIdPair(self.AUTH_ID, self.user_id))
    def test_present_association_is_not_considered_to_be_deleted(self):
        self.firebase_sdk_stub.create_user('aid')
        firebase_auth_services.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))

        self.assertFalse(
            firebase_auth_services.
            verify_external_auth_associations_are_deleted('uid'))
    def test_get_association_that_is_present(self):
        firebase_auth_services.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))

        self.assertEqual(
            firebase_auth_services.get_user_id_from_auth_id('aid'), 'uid')
        self.assertEqual(
            firebase_auth_services.get_auth_id_from_user_id('uid'), 'aid')
    def test_associate_without_collision(self):
        firebase_auth_services.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))

        self.assertEqual(
            firebase_auth_services.get_user_id_from_auth_id('aid'), 'uid')
        self.assertEqual(
            firebase_auth_services.get_auth_id_from_user_id('uid'), 'aid')
示例#25
0
    def reduce(key, values):
        # The reduce() function must be static, so we manually create a "cls"
        # variable instead of changing the function into a classmethod.
        cls = PopulateFirebaseAccountsOneOffJob

        if key == cls.POPULATED_KEY:
            yield (cls.AUDIT_KEY, len(values))
            return
        elif key in (cls.SUPER_ADMIN_ACK, cls.SYSTEM_COMMITTER_ACK):
            yield (key, values)
            return

        # NOTE: This is only sorted to make unit testing easier.
        user_fields = sorted(ast.literal_eval(v) for v in values)
        user_records = [
            firebase_auth.ImportUserRecord(
                uid=auth_id,
                email=email,
                email_verified=True,
                custom_claims=('{"role":"%s"}' %
                               feconf.FIREBASE_ROLE_SUPER_ADMIN
                               if user_is_super_admin else None))
            for auth_id, _, email, user_is_super_admin in user_fields
        ]

        # The Firebase Admin SDK places a hard-limit on the number of users that
        # can be "imported" in a single call. To compensate, we break up the
        # users into chunks.
        offsets = python_utils.RANGE(
            0, len(user_records), cls.MAX_USERS_FIREBASE_CAN_IMPORT_PER_CALL)
        results = (cls.populate_firebase(
            [r for r in record_group
             if r is not None]) for record_group in utils.grouper(
                 user_records, cls.MAX_USERS_FIREBASE_CAN_IMPORT_PER_CALL))

        assocs_to_create = []
        for offset, (result, exception) in python_utils.ZIP(offsets, results):
            if exception is not None:
                yield (cls.ERROR_KEY, repr(exception))
            else:
                successful_indices = set(
                    python_utils.RANGE(result.success_count +
                                       result.failure_count))
                for error in result.errors:
                    successful_indices.remove(error.index)
                    debug_info = 'Import user_id=%r failed: %s' % (
                        user_fields[offset + error.index][1], error.reason)
                    yield (cls.ERROR_KEY, debug_info)
                assocs_to_create.extend(
                    auth_domain.AuthIdUserIdPair(*user_fields[offset + i][:2])
                    for i in successful_indices)

        if assocs_to_create:
            firebase_auth_services.associate_multi_auth_ids_with_user_ids(
                assocs_to_create)
            yield (cls.SUCCESS_KEY, len(assocs_to_create))
    def setUp(self):
        super(FirebaseAccountWipeoutTests, self).setUp()
        self._uninstall_stub = FirebaseAdminSdkStub.install(self)

        firebase_admin.auth.create_user(uid=self.AUTH_ID)
        self.signup(self.EMAIL, self.USERNAME)
        self.user_id = self.get_user_id_from_email(self.EMAIL)
        firebase_auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair(self.AUTH_ID, self.user_id))
        wipeout_service.pre_delete_user(self.user_id)
示例#27
0
    def test_delete_association_when_it_is_present(self):
        # This operation creates the external auth association.
        self.stub.associate_auth_id_with_user_id(auth_domain.AuthIdUserIdPair(
            'aid', 'uid'))
        self.assertFalse(
            self.stub.verify_external_auth_associations_are_deleted('uid'))

        self.stub.delete_external_auth_associations('uid')

        self.assertTrue(
            self.stub.verify_external_auth_associations_are_deleted('uid'))
    def test_delete_association_when_it_is_present(self):
        firebase_admin.auth.create_user(uid='aid')
        firebase_auth_services.associate_auth_id_to_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))
        self.assertFalse(firebase_auth_services.are_auth_associations_deleted(
            'uid'))

        firebase_auth_services.delete_auth_associations('uid')

        self.assertTrue(firebase_auth_services.are_auth_associations_deleted(
            'uid'))
    def test_delete_association_when_it_is_present(self):
        self.firebase_sdk_stub.create_user('aid')
        firebase_auth_services.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))
        self.assertFalse(
            firebase_auth_services.
            verify_external_auth_associations_are_deleted('uid'))

        firebase_auth_services.delete_external_auth_associations('uid')

        self.assertTrue(
            firebase_auth_services.
            verify_external_auth_associations_are_deleted('uid'))
示例#30
0
    def test_get_association_that_is_present_and_marked_as_deleted(self):
        gae_auth_services.associate_auth_id_with_user_id(
            auth_domain.AuthIdUserIdPair('aid', 'uid'))

        assoc_by_auth_id_model = auth_models.UserIdentifiersModel.get('aid')
        assoc_by_auth_id_model.deleted = True
        assoc_by_auth_id_model.update_timestamps()
        assoc_by_auth_id_model.put()

        self.assertEqual(gae_auth_services.get_user_id_from_auth_id('aid'),
                         'uid')
        self.assertEqual(gae_auth_services.get_auth_id_from_user_id('uid'),
                         'aid')