def test_augmented_user_privs_method_setting(self):
        # user should not be granted any privileges by default, but the augmented privs should grant specific privileges
        # Need to test an entity level and entity_type level priv

        expected_actions = [LIST, WRITE]

        augmented_privileges = {
            koalacore.Privilege(
                action=LIST,
                role=koalacore.PrivilegeConstants.PRIVILEGE_ROLE_USER,
                who='sdkjgnsdgjnasgl',
                privilege_type=koalacore.PrivilegeConstants.
                PRIVILEGE_TYPE_RESOURCE_TYPE,
                related_id=0),
            koalacore.Privilege(
                action=WRITE,
                role=koalacore.PrivilegeConstants.PRIVILEGE_ROLE_USER,
                who='sdkjgnsdgjnasgl',
                privilege_type=koalacore.PrivilegeConstants.
                PRIVILEGE_TYPE_OBJECT,
                related_id='apdmbdfobninrounbsodibn')
        }

        sys_user_dict = {
            'uid': 'sdkjgnsdgjnasgl',
            'resource_type': 'User',
            'system_groups': koalacore.PrivilegeConstants.SYSTEM_GROUP_USER
        }
        entity_sec_dict = {
            'uid': 'apdmbdfobninrounbsodibn',
            'resource_type': 'User'
        }

        sys_user = koalacore.AugmentedSecurityObject(**sys_user_dict)
        sys_user.grant_augmented_privileges(namespace='User',
                                            privileges=augmented_privileges)

        entity_sec_ob = koalacore.AugmentedSecurityObject(**entity_sec_dict)

        actions = PrivilegeEvaluator.get_resource_privileges(
            credentials=sys_user, resource=entity_sec_ob)
        self.assertEqual(
            set(actions), set(expected_actions),
            'Action list mistmatch - expected: {0} | got: {1}'.format(
                expected_actions, actions))

        sys_user.revoke_augmented_privileges(namespace='User',
                                             privileges=augmented_privileges)
        self.assertEqual(sys_user.augmented_privileges, {'User': set()},
                         'Augmented privilege mismatch')
    def test_augmented_user_privs_invalid(self):
        # WRITE priv is defined but incorrectly; only LIST should be granted

        expected_actions = [LIST]

        augmented_privileges = {
            koalacore.Privilege(
                action=LIST,
                role=koalacore.PrivilegeConstants.PRIVILEGE_ROLE_USER,
                who='sdkjgnsdgjnasgl',
                privilege_type=koalacore.PrivilegeConstants.
                PRIVILEGE_TYPE_RESOURCE_TYPE,
                related_id=0),
            koalacore.Privilege(
                action=WRITE,
                role=koalacore.PrivilegeConstants.PRIVILEGE_ROLE_USER,
                who='sdkjgnsdgjnasgl',
                privilege_type=koalacore.PrivilegeConstants.
                PRIVILEGE_TYPE_OBJECT,
                related_id=0)
        }

        sys_user_dict = {
            'uid': 'sdkjgnsdgjnasgl',
            'resource_type': 'User',
            'system_groups': koalacore.PrivilegeConstants.SYSTEM_GROUP_USER,
            'augmented_privileges': {
                'User': augmented_privileges
            }
        }
        entity_sec_dict = {
            'uid': 'apdmbdfobninrounbsodibn',
            'resource_type': 'User'
        }

        sys_user = koalacore.AugmentedSecurityObject(**sys_user_dict)
        entity_sec_ob = koalacore.AugmentedSecurityObject(**entity_sec_dict)

        actions = PrivilegeEvaluator.get_resource_privileges(
            credentials=sys_user, resource=entity_sec_ob)
        self.assertEqual(
            set(actions), set(expected_actions),
            'Action list mistmatch - expected: {0} | got: {1}'.format(
                expected_actions, actions))
    def test_system_user_privs(self):
        expected_actions = [READ, WRITE, DELETE, PASSWD, LIST, QUERY]

        sys_user_dict = {
            'uid': 0,
            'resource_type': 'User',
            'system_groups': koalacore.PrivilegeConstants.SYSTEM_GROUP_SYSTEM
        }
        entity_sec_dict = {
            'uid': 'apdmbdfobninrounbsodibn',
            'resource_type': 'User'
        }

        sys_user = koalacore.AugmentedSecurityObject(**sys_user_dict)
        entity_sec_ob = koalacore.AugmentedSecurityObject(**entity_sec_dict)

        actions = PrivilegeEvaluator.get_resource_privileges(
            credentials=sys_user, resource=entity_sec_ob)
        self.assertEqual(set(actions), set(expected_actions),
                         'Action list mistmatch.')
    def test_user_self_privs(self):
        # user should not be granted any privileges by default

        expected_actions = [PASSWD]

        sys_user_dict = {
            'uid': 'mhcfhxdgfssjgfk',
            'resource_type': 'User',
            'system_groups': koalacore.PrivilegeConstants.SYSTEM_GROUP_USER
        }
        entity_sec_dict = {'uid': 'mhcfhxdgfssjgfk', 'resource_type': 'User'}

        sys_user = koalacore.AugmentedSecurityObject(**sys_user_dict)
        entity_sec_ob = koalacore.AugmentedSecurityObject(**entity_sec_dict)

        actions = PrivilegeEvaluator.get_resource_privileges(
            credentials=sys_user, resource=entity_sec_ob)
        self.assertEqual(
            set(actions), set(expected_actions),
            'Action list mistmatch - expected: {0} | got: {1}'.format(
                expected_actions, actions))
    def test_authorise_decorator_as_user(self):
        expected_actions = []

        sys_user_dict = {
            'uid': 'sdkjgnsdgjnasgl',
            'resource_type': 'User',
            'system_groups': koalacore.PrivilegeConstants.SYSTEM_GROUP_USER
        }
        entity_sec_dict = {
            'uid': 'apdmbdfobninrounbsodibn',
            'resource_type': 'User'
        }

        sys_user = koalacore.AugmentedSecurityObject(**sys_user_dict)
        entity_sec_ob = koalacore.AugmentedSecurityObject(**entity_sec_dict)

        @koalacore.authorise(action=koalacore.PrivilegeConstants.READ)
        def test_func(credentials, resource, **kargs):
            return True

        with self.assertRaises(koalacore.UnauthorisedCredentials):
            test_func(credentials=sys_user, resource=entity_sec_ob)
    def test_authorise_decorator_as_admin(self):
        expected_actions = [READ, PASSWD, LIST]

        sys_user_dict = {
            'uid': 'sdkjgnsdgjnasgl',
            'resource_type': 'User',
            'system_groups': koalacore.PrivilegeConstants.SYSTEM_GROUP_ADMIN
        }
        entity_sec_dict = {
            'uid': 'apdmbdfobninrounbsodibn',
            'resource_type': 'User'
        }

        sys_user = koalacore.AugmentedSecurityObject(**sys_user_dict)
        entity_sec_ob = koalacore.AugmentedSecurityObject(**entity_sec_dict)

        @koalacore.authorise(action=koalacore.PrivilegeConstants.READ)
        def test_func(credentials, resource, **kargs):
            return True

        returned = test_func(credentials=sys_user, resource=entity_sec_ob)
        self.assertTrue(returned, 'Decorated function should return True')
    def test_admin_user_privs(self):
        expected_actions = [READ, PASSWD, LIST]

        sys_user_dict = {
            'uid': 'sdkjgnsdgjnasgl',
            'resource_type': 'User',
            'system_groups': koalacore.PrivilegeConstants.SYSTEM_GROUP_ADMIN
        }
        entity_sec_dict = {
            'uid': 'apdmbdfobninrounbsodibn',
            'resource_type': 'User'
        }

        sys_user = koalacore.AugmentedSecurityObject(**sys_user_dict)
        entity_sec_ob = koalacore.AugmentedSecurityObject(**entity_sec_dict)

        actions = PrivilegeEvaluator.get_resource_privileges(
            credentials=sys_user, resource=entity_sec_ob)
        self.assertEqual(
            set(actions), set(expected_actions),
            'Action list mistmatch - expected: {0} | got: {1}'.format(
                expected_actions, actions))