Esempio n. 1
0
def restricted_resource_view_list(context, data_dict):
    model = context['model']
    id = _get_or_bust(data_dict, 'id')
    resource = model.Resource.get(id)
    if not resource:
        raise NotFound
    authorized = auth.restricted_resource_show(
        context, {'id': resource.get('id'), 'resource': resource}).get('success', False)
    if not authorized:
        return []
    else:
        return resource_view_list(context, data_dict)
Esempio n. 2
0
def _restricted_resource_list_url(context, resource_list):
    restricted_resources_list = []
    for resource in resource_list:
        authorized = auth.restricted_resource_show(context, {
            'id': resource.get('id'),
            'resource': resource
        }).get('success', False)
        restricted_resource = dict(resource)
        if not authorized:
            restricted_resource['url'] = _('Not Authorized')
        restricted_resources_list += [restricted_resource]
    return restricted_resources_list
Esempio n. 3
0
def _restricted_resource_list_hide_fields(context, resource_list):
    restricted_resources_list = []
    for resource in resource_list:
        # copy original resource
        restricted_resource = dict(resource)

        # get the restricted fields
        restricted_dict = logic.restricted_get_restricted_dict(
            restricted_resource)

        # hide field URL to unauthorized users
        authorized = auth.restricted_resource_show(context, {
            'id': resource.get('id'),
            'resource': resource
        }).get('success', False)
        if not authorized:
            restricted_resource['url'] = 'Not Authorized'

        # hide other fields in restricted to everyone but dataset owner(s)
        if not authz.is_authorized('package_update', context, {
                'id': resource.get('package_id')
        }).get('success'):
            user_name = logic.restricted_get_username_from_context(context)

            # hide partially other allowed user_names (keep own)
            allowed_users = []
            for user in restricted_dict.get("allowed_users"):
                if len(user.strip()) > 0:
                    if user_name == user:
                        allowed_users += [user_name]
                    else:
                        allowed_users += [user[0:3] + '*****' + user[-2:]]

            new_restricted = json.dumps({
                "level":
                restricted_dict.get("level"),
                "allowed_users":
                ','.join(allowed_users)
            })
            extras_restricted = resource.get('extras',
                                             {}).get('restricted', {})
            if (extras_restricted):
                restricted_resource['extras']['restricted'] = new_restricted

            field_restricted_field = resource.get('restricted', {})
            if (field_restricted_field):
                restricted_resource['restricted'] = new_restricted

        restricted_resources_list += [restricted_resource]
    return restricted_resources_list
Esempio n. 4
0
def _restricted_resource_list_hide_fields(context, resource_list):
    restricted_resources_list = []
    for resource in resource_list:
        # copy original resource
        restricted_resource = dict(resource)

        # get the restricted fields
        restricted_dict = logic.restricted_get_restricted_dict(
            restricted_resource)

        # hide fields to unauthorized users
        authorized = auth.restricted_resource_show(
            context, {'id': resource.get('id'), 'resource': resource}
        ).get('success', False)

        # hide other fields in restricted to everyone but dataset owner(s)
        if not authz.is_authorized(
                'package_update', context, {'id': resource.get('package_id')}
        ).get('success'):

            user_name = logic.restricted_get_username_from_context(context)

            # hide partially other allowed user_names (keep own)
            allowed_users = []
            # convert to list if only 1 string
            list_allowed_users = restricted_dict.get('allowed_users')
            for user in list_allowed_users:
                if len(user.strip()) > 0:
                    if user_name == user:
                        allowed_users.append(user_name)
                    else:
                        allowed_users.append(user[0:3] + '*****' + user[-2:])
            # hide usernames from custom allowed users field
            restricted_resource['allowed_users'] = allowed_users

            new_restricted = json.dumps({
                'level': restricted_dict.get("level"),
                'allowed_users': ','.join(allowed_users)})
            extras_restricted = resource.get(
                'extras', {}).get('restricted', {})
            if (extras_restricted):
                restricted_resource['extras']['restricted'] = new_restricted

            field_restricted_field = resource.get('restricted', {})
            if (field_restricted_field):
                restricted_resource['restricted'] = new_restricted

        restricted_resources_list += [restricted_resource]
    return restricted_resources_list
Esempio n. 5
0
def restricted_resource_view_list(context, data_dict):
    package = data_dict.get('package')
    logger.warning('restricted_resource_view_list was called. Package: %s' %
                   package)
    model = context['model']
    id = _get_or_bust(data_dict, 'id')
    resource = model.Resource.get(id)
    if not resource:
        raise NotFound
    authorized = auth.restricted_resource_show(context, {
        'id': resource.get('id'),
        'resource': resource
    }).get('success', False)
    if not authorized:
        return []
    else:
        return resource_view_list(context, data_dict)
Esempio n. 6
0
def _restricted_resource_list_hide_fields(context,
                                          resource_list,
                                          package=None):
    restricted_resources_list = []
    # username = context.get('user')
    user_name = logic.restricted_get_username_from_context(context)

    # If first resource does not pass auth, treat all other resources the same.
    for i, resource in enumerate(resource_list):
        # copy original resource
        restricted_resource = dict(resource)

        # get the restricted fields
        restricted_dict = logic.restricted_get_restricted_dict(
            restricted_resource)

        logger.debug('restricted_resource: %s' % restricted_resource)
        logger.debug('restricted_dict: %s' % restricted_dict)

        restricted_field = restricted_resource.get('restricted')
        logger.debug('User: %s, Restricted: %s' %
                     (user_name, restricted_field))

        if i == 0:
            # We only need to check if the user is authorized for the first resource
            # This function calls model.Package.get() which is redundant,
            # we already have the package in the code that calls this.
            authorized = auth.restricted_resource_show(context, {
                'id': resource.get('id'),
                'resource': resource,
                'package': package
            }).get('success', False)
            if authorized:
                # If user is authorized, nothing to hide, immediately return original resource list
                return resource_list
            else:
                # If user is NOT authorized, continue from here and hide sensitive info in ALL resources
                logger.warning('User %s: Not authorized for ALL resources' %
                               user_name)

        # If we get to this point, user is not authorized for ALL resources in the dataset
        logger.debug('Not authorized for resource: %s' % resource.get('title'))

        # Hide contents of sensitive fields
        sensitive = [
            'locale', 'attribute', 'layer_description',
            'change_description_resource', 'map_preview_link', 'layer_name',
            'disclaimer_url', 'filepath', 'spatial', 'attr_data',
            'description', 'bbox', 'spatial_type', 'projection_wkt', 'url'
        ]
        for s in sensitive:
            if s in restricted_resource:
                restricted_resource[s] = ''

        # This is not needed, I don't think we care about hiding the list of users who have access
        # if not authz.is_authorized(
        #         'package_update', context, {'id': resource.get('package_id')}
        #         ).get('success'):
        #
        #     # hide partially other allowed user_names (keep own)
        #     allowed_users = []
        #     for user in restricted_dict.get('allowed_users'):
        #         if len(user.strip()) > 0:
        #             if user_name == user:
        #                 allowed_users.append(user_name)
        #             else:
        #                 allowed_users.append(user[0:3] + '*****' + user[-2:])
        #
        #     new_restricted = json.dumps({
        #         'level': restricted_dict.get("level"),
        #         'allowed_users': ','.join(allowed_users)})
        #
        #     # Resource extras may be stored in an 'extras' subdict, or at the root
        #     # level of the resource dict.  This block handles both cases.
        #     extras_restricted = resource.get('extras', {}).get('restricted', {})
        #     if (extras_restricted):
        #         restricted_resource['extras']['restricted'] = new_restricted
        #
        #     field_restricted_field = resource.get('restricted', {})
        #     if (field_restricted_field):
        #         restricted_resource['restricted'] = new_restricted

        restricted_resources_list += [restricted_resource]
    return restricted_resources_list