7f50f846 |
## Amazon S3 - Access Control List representation
## Author: Michal Ludvig <michal@logix.cz>
## http://www.logix.cz/michal
## License: GPL Version 2
from Utils import *
try:
import xml.etree.ElementTree as ET
except ImportError:
import elementtree.ElementTree as ET
class ACL(object):
EMPTY_ACL = """
<AccessControlPolicy>
<AccessControlList>
</AccessControlList>
</AccessControlPolicy>
"""
GRANT_PUBLIC_READ = """
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
"""
def __init__(self, xml = None):
if not xml:
xml = ACL.EMPTY_ACL
self.tree = getTreeFromXml(xml)
def getGrants(self):
acl = {}
for grant in self.tree.findall(".//Grant"):
grantee = grant.find(".//Grantee")
grantee = dict([(tag.tag, tag.text) for tag in grant.find(".//Grantee")])
if grantee.has_key('DisplayName'):
user = grantee['DisplayName']
elif grantee.has_key('URI'):
user = grantee['URI']
if user == 'http://acs.amazonaws.com/groups/global/AllUsers':
user = "*anon*"
else:
user = grantee[grantee.keys()[0]]
acl[user] = grant.find('Permission').text
return acl
if __name__ == "__main__":
xml = """<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>12345678901234567890</ID>
<DisplayName>owner-nickname</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
<ID>12345678901234567890</ID>
<DisplayName>owner-nickname</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
"""
acl = ACL(xml)
print acl.getGrants() |