Esempio n. 1
0
    def has_permission(self, request, view):
        """Check permission based on the defined access."""
        if ENVIRONMENT.get_value('ALLOW_ANY', default=False, cast=bool):
            return True
        if request.user.admin:
            return True
        if request.method in permissions.SAFE_METHODS:
            if is_scope_principal(request):
                return True
            username = request.query_params.get('username')
            if username:
                decoded = request.user.identity_header.get('decoded', {})
                identity_username = decoded.get('identity',
                                                {}).get('user',
                                                        {}).get('username')
                return username == identity_username
            else:
                group_read = request.user.access.get('group',
                                                     {}).get('read', [])
                if group_read:
                    return True
        else:
            group_write = request.user.access.get('group', {}).get('write', [])
            if group_write:
                return True

        return False
Esempio n. 2
0
def get_group_queryset(request):
    """Obtain the queryset for groups."""
    scope = request.query_params.get(SCOPE_KEY, ACCOUNT_SCOPE)
    if scope != ACCOUNT_SCOPE:
        return get_object_principal_queryset(request, scope, Group)

    if ENVIRONMENT.get_value('ALLOW_ANY', default=False, cast=bool):
        return Group.objects.annotate(principalCount=Count('principals', distinct=True),
                                      policyCount=Count('policies', distinct=True))
    if request.user.admin:
        return Group.objects.annotate(principalCount=Count('principals', distinct=True),
                                      policyCount=Count('policies', distinct=True))

    username = request.query_params.get('username')
    if username:
        decoded = request.user.identity_header.get('decoded', {})
        identity_username = decoded.get('identity', {}).get('user', {}).get('username')
        if username != identity_username:
            return Group.objects.none()
        else:
            return Group.objects.filter(principals__username=username)
    access = request.user.access
    access_op = 'read'
    if request.method in ('POST', 'PUT'):
        access_op = 'write'
    res_list = access.get('group', {}).get(access_op, [])
    if not res_list:
        return Group.objects.none()
    if '*' in res_list:
        return Group.objects.annotate(principalCount=Count('principals', distinct=True),
                                      policyCount=Count('policies', distinct=True))
    return Group.objects.filter(uuid__in=res_list).annotate(principalCount=Count('principals', distinct=True),
                                                            policyCount=Count('policies', distinct=True))
Esempio n. 3
0
def has_group_all_access(request):
    """Quick check to determine if a request should have access to all groups on a tenant."""
    return (
        ENVIRONMENT.get_value("ALLOW_ANY", default=False, cast=bool)
        or request.user.admin
        or (request.path == reverse("group-list") and request.method == "GET")
    )
Esempio n. 4
0
 def _get_proxy_service(self):  # pylint: disable=no-self-use
     """Get proxy service host and port info from environment."""
     proxy_conn_info = {
         PROTOCOL:
         ENVIRONMENT.get_value("PRINCIPAL_PROXY_SERVICE_PROTOCOL",
                               default="https"),
         HOST:
         ENVIRONMENT.get_value("PRINCIPAL_PROXY_SERVICE_HOST",
                               default="localhost"),
         PORT:
         ENVIRONMENT.get_value("PRINCIPAL_PROXY_SERVICE_PORT",
                               default="443"),
         PATH:
         ENVIRONMENT.get_value("PRINCIPAL_PROXY_SERVICE_PATH",
                               default="/r/insights-services"),
         SOURCE_CERT:
         ENVIRONMENT.bool("PRINCIPAL_PROXY_SERVICE_SOURCE_CERT",
                          default=False),
         SSL_VERIFY:
         ENVIRONMENT.bool("PRINCIPAL_PROXY_SERVICE_SSL_VERIFY",
                          default=True),
         USER_ENV:
         ENVIRONMENT.get_value("PRINCIPAL_PROXY_USER_ENV", default="env"),
         CLIENT_ID:
         ENVIRONMENT.get_value("PRINCIPAL_PROXY_CLIENT_ID",
                               default="client_id"),
         API_TOKEN:
         ENVIRONMENT.get_value("PRINCIPAL_PROXY_API_TOKEN",
                               default="token"),
     }
     return proxy_conn_info
Esempio n. 5
0
 def _get_proxy_service(self):  # pylint: disable=no-self-use
     """Get proxy service host and port info from environment."""
     proxy_conn_info = {
         PROTOCOL:
         ENVIRONMENT.get_value('PRINCIPAL_PROXY_SERVICE_PROTOCOL',
                               default='https'),
         HOST:
         ENVIRONMENT.get_value('PRINCIPAL_PROXY_SERVICE_HOST',
                               default='localhost'),
         PORT:
         ENVIRONMENT.get_value('PRINCIPAL_PROXY_SERVICE_PORT',
                               default='443'),
         PATH:
         ENVIRONMENT.get_value('PRINCIPAL_PROXY_SERVICE_PATH',
                               default='/r/insights-services'),
         SOURCE_CERT:
         ENVIRONMENT.bool('PRINCIPAL_PROXY_SERVICE_SOURCE_CERT',
                          default=False),
         SSL_VERIFY:
         ENVIRONMENT.bool('PRINCIPAL_PROXY_SERVICE_SSL_VERIFY',
                          default=True),
         USER_ENV:
         ENVIRONMENT.get_value('PRINCIPAL_PROXY_USER_ENV', default='env'),
         CLIENT_ID:
         ENVIRONMENT.get_value('PRINCIPAL_PROXY_CLIENT_ID',
                               default='client_id'),
         API_TOKEN:
         ENVIRONMENT.get_value('PRINCIPAL_PROXY_API_TOKEN', default='token')
     }
     return proxy_conn_info
Esempio n. 6
0
def get_role_queryset(request):
    """Obtain the queryset for roles."""
    scope = request.query_params.get(SCOPE_KEY, ACCOUNT_SCOPE)
    base_query = annotate_roles_with_counts(
        Role.objects.prefetch_related("access"))

    if scope != ACCOUNT_SCOPE:
        queryset = get_object_principal_queryset(
            request,
            scope,
            Role,
            **{
                "prefetch_lookups_for_ids": "access",
                "prefetch_lookups_for_groups": "policies__roles"
            },
        )
        return annotate_roles_with_counts(queryset)

    username = request.query_params.get("username")
    if username:
        if username != request.user.username and not request.user.admin:
            return Role.objects.none()
        else:
            queryset = get_object_principal_queryset(
                request,
                PRINCIPAL_SCOPE,
                Role,
                **{
                    "prefetch_lookups_for_ids": "access",
                    "prefetch_lookups_for_groups": "policies__roles"
                },
            )

            return annotate_roles_with_counts(queryset)

    if ENVIRONMENT.get_value("ALLOW_ANY", default=False, cast=bool):
        return base_query
    if request.user.admin:
        return base_query
    access = request.user.access
    access_op = "read"
    if request.method in ("POST", "PUT"):
        access_op = "write"
    res_list = access.get("role", {}).get(access_op, [])
    if not res_list:
        return Role.objects.none()
    if "*" in res_list:
        return base_query
    return base_query.filter(uuid__in=res_list)
Esempio n. 7
0
 def has_permission(self, request, view):
     """Check permission based on the defined access."""
     if ENVIRONMENT.get_value('ALLOW_ANY', default=False, cast=bool):
         return True
     if request.user.admin:
         return True
     if request.method in permissions.SAFE_METHODS:
         if is_scope_principal(request):
             return True
         role_read = request.user.access.get('role', {}).get('read', [])
         if role_read:
             return True
     else:
         role_write = request.user.access.get('role', {}).get('write', [])
         if role_write:
             return True
     return False
Esempio n. 8
0
def get_policy_queryset(request):
    """Obtain the queryset for policies."""
    scope = request.query_params.get(SCOPE_KEY, ACCOUNT_SCOPE)
    if scope != ACCOUNT_SCOPE:
        return get_object_principal_queryset(request, scope, Policy)

    if ENVIRONMENT.get_value("ALLOW_ANY", default=False, cast=bool):
        return Policy.objects.all()
    if request.user.admin:
        return Policy.objects.all()
    access = user_has_perm(request, "policy")

    if access == "All":
        return Policy.objects.all()
    if access == "None":
        return Policy.objects.none()
    return Policy.objects.filter(uuid__in=access)
Esempio n. 9
0
def get_role_queryset(request):
    """Obtain the queryset for roles."""
    scope = request.query_params.get(SCOPE_KEY, ACCOUNT_SCOPE)
    if scope != ACCOUNT_SCOPE:
        return get_object_principal_queryset(request, scope, Role)
    if ENVIRONMENT.get_value('ALLOW_ANY', default=False, cast=bool):
        return Role.objects.annotate(policyCount=Count('policies', distinct=True))
    if request.user.admin:
        return Role.objects.annotate(policyCount=Count('policies', distinct=True))
    access = request.user.access
    access_op = 'read'
    if request.method in ('POST', 'PUT'):
        access_op = 'write'
    res_list = access.get('role', {}).get(access_op, [])
    if not res_list:
        return Role.objects.none()
    if '*' in res_list:
        return Role.objects.annotate(policyCount=Count('policies', distinct=True))
    return Role.objects.filter(uuid__in=res_list).annotate(policyCount=Count('policies', distinct=True))
Esempio n. 10
0
    def has_permission(self, request, view):
        """Check permission based on the defined access."""
        if ENVIRONMENT.get_value("ALLOW_ANY", default=False, cast=bool):
            return True
        if request.user.admin:
            return True
        if request.method in permissions.SAFE_METHODS:
            if is_scope_principal(request):
                return True
            policy_read = request.user.access.get("policy", {}).get("read", [])
            if policy_read:
                return True
        else:
            policy_write = request.user.access.get("policy",
                                                   {}).get("write", [])
            if policy_write:
                return True

        return False
Esempio n. 11
0
def get_policy_queryset(request):
    """Obtain the queryset for policies."""
    scope = request.query_params.get(SCOPE_KEY, ACCOUNT_SCOPE)
    if scope != ACCOUNT_SCOPE:
        return get_object_principal_queryset(request, scope, Policy)

    if ENVIRONMENT.get_value("ALLOW_ANY", default=False, cast=bool):
        return Policy.objects.all()
    if request.user.admin:
        return Policy.objects.all()
    access = request.user.access
    access_op = "read"
    if request.method in ("POST", "PUT"):
        access_op = "write"
    res_list = access.get("policy", {}).get(access_op, [])
    if not res_list:
        return Policy.objects.none()
    if "*" in res_list:
        return Policy.objects.all()
    return Policy.objects.filter(uuid__in=res_list)
Esempio n. 12
0
def get_policy_queryset(request):
    """Obtain the queryset for policies."""
    scope = request.query_params.get(SCOPE_KEY, ACCOUNT_SCOPE)
    if scope != ACCOUNT_SCOPE:
        return get_object_principal_queryset(request, scope, Policy)

    if ENVIRONMENT.get_value('ALLOW_ANY', default=False, cast=bool):
        return Policy.objects.all()
    if request.user.admin:
        return Policy.objects.all()
    access = request.user.access
    access_op = 'read'
    if request.method in ('POST', 'PUT'):
        access_op = 'write'
    res_list = access.get('policy', {}).get(access_op, [])
    if not res_list:
        return Policy.objects.none()
    if '*' in res_list:
        return Policy.objects.all()
    return Policy.objects.filter(uuid__in=res_list)
Esempio n. 13
0
def get_role_queryset(request):
    """Obtain the queryset for roles."""
    scope = request.query_params.get(SCOPE_KEY, ACCOUNT_SCOPE)
    base_query = annotate_roles_with_counts(Role.objects.prefetch_related("access"))

    if scope != ACCOUNT_SCOPE:
        queryset = get_object_principal_queryset(
            request,
            scope,
            Role,
            **{"prefetch_lookups_for_ids": "access", "prefetch_lookups_for_groups": "policies__roles"},
        )
        return annotate_roles_with_counts(queryset)

    username = request.query_params.get("username")
    if username:
        if username != request.user.username and not request.user.admin:
            return Role.objects.none()
        else:
            queryset = get_object_principal_queryset(
                request,
                PRINCIPAL_SCOPE,
                Role,
                **{"prefetch_lookups_for_ids": "access", "prefetch_lookups_for_groups": "policies__roles"},
            )

            return annotate_roles_with_counts(queryset)

    if ENVIRONMENT.get_value("ALLOW_ANY", default=False, cast=bool):
        return base_query
    if request.user.admin:
        return base_query
    access = user_has_perm(request, "role")
    if access == "All":
        return base_query
    if access == "None":
        return Role.objects.none()
    return annotate_roles_with_counts(Role.objects.filter(uuid__in=access))
Esempio n. 14
0
def get_role_queryset(request):
    """Obtain the queryset for roles."""
    scope = request.query_params.get(SCOPE_KEY, ACCOUNT_SCOPE)
    base_query = annotate_roles_with_counts(Role.objects.prefetch_related('access'))

    if scope != ACCOUNT_SCOPE:
        queryset = get_object_principal_queryset(request, scope, Role,
                                                 **{'prefetch_lookups_for_ids': 'access',
                                                    'prefetch_lookups_for_groups': 'policies__roles'})
        return annotate_roles_with_counts(queryset)

    username = request.query_params.get('username')
    if username:
        if username != request.user.username and not request.user.admin:
            return Role.objects.none()
        else:
            queryset = get_object_principal_queryset(request, PRINCIPAL_SCOPE, Role,
                                                     **{'prefetch_lookups_for_ids': 'access',
                                                        'prefetch_lookups_for_groups': 'policies__roles'})

            return annotate_roles_with_counts(queryset)

    if ENVIRONMENT.get_value('ALLOW_ANY', default=False, cast=bool):
        return base_query
    if request.user.admin:
        return base_query
    access = request.user.access
    access_op = 'read'
    if request.method in ('POST', 'PUT'):
        access_op = 'write'
    res_list = access.get('role', {}).get(access_op, [])
    if not res_list:
        return Role.objects.none()
    if '*' in res_list:
        return base_query
    return base_query.filter(uuid__in=res_list)
Esempio n. 15
0
    def has_permission(self, request, view):
        """Check permission based on the defined access."""
        if ENVIRONMENT.get_value("ALLOW_ANY", default=False, cast=bool):
            return True
        if request.user.admin:
            return True
        if request.method in permissions.SAFE_METHODS:
            if is_scope_principal(request) or request._request.path == reverse(
                    "group-list"):
                return True
            username = request.query_params.get("username")
            if username:
                return username == request.user.username
            else:
                group_read = request.user.access.get("group",
                                                     {}).get("read", [])
                if group_read:
                    return True
        else:
            group_write = request.user.access.get("group", {}).get("write", [])
            if group_write:
                return True

        return False
Esempio n. 16
0
 def has_permission(self, request, view):
     """Check permission based on Account Admin property."""
     if ENVIRONMENT.get_value("ALLOW_ANY", default=False, cast=bool):
         return True
     return request.user.admin