Revision 5576e6dd snf-pithos-backend/pithos/backends/modular.py
b/snf-pithos-backend/pithos/backends/modular.py | ||
---|---|---|
614 | 614 |
raise NotAllowedError |
615 | 615 |
if shared and public: |
616 | 616 |
# get shared first |
617 |
shared = self._list_object_permissions( |
|
617 |
shared_paths = self._list_object_permissions(
|
|
618 | 618 |
user, account, container, prefix, shared=True, public=False) |
619 | 619 |
objects = set() |
620 |
if shared: |
|
620 |
if shared_paths:
|
|
621 | 621 |
path, node = self._lookup_container(account, container) |
622 |
shared = self._get_formatted_paths(shared)
|
|
623 |
objects |= set(self._list_object_properties(node, path, prefix, delimiter, marker, limit, virtual, domain, keys, until, size_range, shared, all_props)) |
|
622 |
shared_paths = self._get_formatted_paths(shared_paths)
|
|
623 |
objects |= set(self._list_object_properties(node, path, prefix, delimiter, marker, limit, virtual, domain, keys, until, size_range, shared_paths, all_props))
|
|
624 | 624 |
|
625 | 625 |
# get public |
626 | 626 |
objects |= set(self._list_public_object_properties( |
... | ... | |
1516 | 1516 |
for path in self.permissions.access_list_paths(user, account): |
1517 | 1517 |
allow.add(path.split('/', 2)[1]) |
1518 | 1518 |
return sorted(allow) |
1519 |
|
|
1520 |
# Domain functions |
|
1521 |
|
|
1522 |
def _get_domain_objects(self, domain, user=None): |
|
1523 |
obj_list = self.node.domain_object_list(domain, CLUSTER_NORMAL) |
|
1524 |
if user != None: |
|
1525 |
obj_list = [t for t in obj_list \ |
|
1526 |
if self._has_read_access(user, t[0])] |
|
1527 |
return [(path, |
|
1528 |
self._build_metadata(props, user_defined_meta), |
|
1529 |
self.permissions.access_get(path)) \ |
|
1530 |
for path, props, user_defined_meta in obj_list] |
|
1531 |
|
|
1532 |
# util functions |
|
1533 |
|
|
1534 |
def _build_metadata(self, props, user_defined=None, |
|
1535 |
include_user_defined=True): |
|
1536 |
meta = {'bytes': props[self.SIZE], |
|
1537 |
'type': props[self.TYPE], |
|
1538 |
'hash': props[self.HASH], |
|
1539 |
'version': props[self.SERIAL], |
|
1540 |
'version_timestamp': props[self.MTIME], |
|
1541 |
'modified_by': props[self.MUSER], |
|
1542 |
'uuid': props[self.UUID], |
|
1543 |
'checksum': props[self.CHECKSUM]} |
|
1544 |
if include_user_defined and user_defined != None: |
|
1545 |
meta.update(user_defined) |
|
1546 |
return meta |
|
1547 |
|
|
1548 |
def _has_read_access(self, user, path): |
|
1549 |
try: |
|
1550 |
account, container, object = path.split('/', 2) |
|
1551 |
except ValueError: |
|
1552 |
raise ValueError('Invalid object path') |
|
1553 |
|
|
1554 |
assert isinstance(user, basestring), "Invalid user" |
|
1555 |
|
|
1556 |
try: |
|
1557 |
self._can_read(user, account, container, object) |
|
1558 |
except NotAllowedError: |
|
1559 |
return False |
|
1560 |
else: |
|
1561 |
return True |
Also available in: Unified diff