This repository has been archived on 2021-03-01. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
kaneton/test/packages/ktp/capability.py
Mercier Pierre-Olivier fee4dd4e6d Initial snapshot
2013-02-11 22:04:30 +01:00

111 lines
2.7 KiB
Python

#
# ---------- header -----------------------------------------------------------
#
# project kaneton
#
# license kaneton
#
# file /home/mycure/kaneton/test/packages/ktp/capability.py
#
# created julien quintard [mon oct 25 19:58:10 2010]
# updated julien quintard [wed feb 9 06:42:08 2011]
#
#
# ---------- packages ---------------------------------------------------------
#
from OpenSSL import crypto
import os
import hmac
import pickle
import re
#
# ---------- definitions ------------------------------------------------------
#
Extension = ".cap"
TypeContributor = "contributor"
TypeGroup = "group"
TypeStudent = "student"
#
# ---------- functions --------------------------------------------------------
#
#
# this function returns a list of capability identifiers.
#
def List(directory):
capabilities = []
entries = None
entry = None
path = None
entries = os.listdir(directory)
for entry in entries:
path = directory + "/" + entry
if os.path.isfile(path) and re.search("^.*" + Extension + "$", path):
capabilities += [ entry[:-len(Extension)] ]
return capabilities
#
# this function creates a capability.
#
def Create(code,
identifier,
type,
attributes,
members):
h = hmac.new(code, pickle.dumps( (identifier,
type,
str(attributes),
str(members)) ))
token = h.hexdigest()
capability = { "identifier": identifier,
"type": type,
"attributes": attributes,
"members": members,
"token": token }
return capability
#
# this function validates the capability according to the given
# key that has been used for issuing this capability.
#
def Validate(code,
capability):
h = hmac.new(code,
pickle.dumps( (capability["identifier"],
capability["type"],
str(capability["attributes"]),
str(capability["members"]) )))
token = h.hexdigest()
if token != capability["token"]:
return False
return True
#
# this function stores a capability on the file system.
#
def Store(path,
capability):
open(path, 'w').write(pickle.dumps(capability))
#
# this function loads a capability from the file system.
#
def Load(path):
capability = pickle.loads(open(path, 'r').read())
return capability