diff options
Diffstat (limited to 'kazoo/security.py')
-rw-r--r-- | kazoo/security.py | 72 |
1 files changed, 50 insertions, 22 deletions
diff --git a/kazoo/security.py b/kazoo/security.py index e473360..6839944 100644 --- a/kazoo/security.py +++ b/kazoo/security.py @@ -5,10 +5,10 @@ import hashlib # Represents a Zookeeper ID and ACL object -Id = namedtuple('Id', 'scheme id') +Id = namedtuple("Id", "scheme id") -class ACL(namedtuple('ACL', 'perms id')): +class ACL(namedtuple("ACL", "perms id")): """An ACL for a Zookeeper Node An ACL object is created by using an :class:`Id` object along with @@ -16,27 +16,31 @@ class ACL(namedtuple('ACL', 'perms id')): :meth:`make_digest_acl` should be used to create an ACL object with the desired scheme, id, and permissions. """ + @property def acl_list(self): perms = [] if self.perms & Permissions.ALL == Permissions.ALL: - perms.append('ALL') + perms.append("ALL") return perms if self.perms & Permissions.READ == Permissions.READ: - perms.append('READ') + perms.append("READ") if self.perms & Permissions.WRITE == Permissions.WRITE: - perms.append('WRITE') + perms.append("WRITE") if self.perms & Permissions.CREATE == Permissions.CREATE: - perms.append('CREATE') + perms.append("CREATE") if self.perms & Permissions.DELETE == Permissions.DELETE: - perms.append('DELETE') + perms.append("DELETE") if self.perms & Permissions.ADMIN == Permissions.ADMIN: - perms.append('ADMIN') + perms.append("ADMIN") return perms def __repr__(self): - return 'ACL(perms=%r, acl_list=%s, id=%r)' % ( - self.perms, self.acl_list, self.id) + return "ACL(perms=%r, acl_list=%s, id=%r)" % ( + self.perms, + self.acl_list, + self.id, + ) class Permissions(object): @@ -49,8 +53,8 @@ class Permissions(object): # Shortcuts for common Ids -ANYONE_ID_UNSAFE = Id('world', 'anyone') -AUTH_IDS = Id('auth', '') +ANYONE_ID_UNSAFE = Id("world", "anyone") +AUTH_IDS = Id("auth", "") # Shortcuts for common ACLs OPEN_ACL_UNSAFE = [ACL(Permissions.ALL, ANYONE_ID_UNSAFE)] @@ -70,13 +74,21 @@ def make_digest_acl_credential(username, password): See: https://github.com/python-zk/kazoo/pull/584 """ - credential = username.encode('utf-8') + b":" + password.encode('utf-8') + credential = username.encode("utf-8") + b":" + password.encode("utf-8") cred_hash = b64encode(hashlib.sha1(credential).digest()).strip() - return username + ":" + cred_hash.decode('utf-8') - - -def make_acl(scheme, credential, read=False, write=False, - create=False, delete=False, admin=False, all=False): + return username + ":" + cred_hash.decode("utf-8") + + +def make_acl( + scheme, + credential, + read=False, + write=False, + create=False, + delete=False, + admin=False, + all=False, +): """Given a scheme and credential, return an :class:`ACL` object appropriate for use with Kazoo. @@ -118,8 +130,16 @@ def make_acl(scheme, credential, read=False, write=False, return ACL(permissions, Id(scheme, credential)) -def make_digest_acl(username, password, read=False, write=False, - create=False, delete=False, admin=False, all=False): +def make_digest_acl( + username, + password, + read=False, + write=False, + create=False, + delete=False, + admin=False, + all=False, +): """Create a digest ACL for Zookeeper with the given permissions This method combines :meth:`make_digest_acl_credential` and @@ -143,5 +163,13 @@ def make_digest_acl(username, password, read=False, write=False, """ cred = make_digest_acl_credential(username, password) - return make_acl("digest", cred, read=read, write=write, create=create, - delete=delete, admin=admin, all=all) + return make_acl( + "digest", + cred, + read=read, + write=write, + create=create, + delete=delete, + admin=admin, + all=all, + ) |