Beispiel #1
0
 def find_expired_slices():
     try:
         from openflow.optin_manager.sfa.drivers.OFSfaDriver import OFSfaDriver #Avoiding circular Deps
     except:
         pass
     slices = ExpiringComponents.objects.all()
     expired_components = list()
     for slice in slices:
         expiration_date = int(datetime_to_epoch(utcparse(slice.expires)))
         if expiration_date <= int(datetime_to_epoch(utcparse(datetime.utcnow()))):
             try:
                 OFSfaDriver().crud_slice(slice.slice,slice.authority, 'delete_slice')
             except:
                 pass
Beispiel #2
0
 def find_expired_slices():
     try:
         from openflow.optin_manager.sfa.drivers.OFSfaDriver import OFSfaDriver  #Avoiding circular Deps
     except:
         pass
     slices = ExpiringComponents.objects.all()
     expired_components = list()
     for slice in slices:
         expiration_date = int(datetime_to_epoch(utcparse(slice.expires)))
         if expiration_date <= int(
                 datetime_to_epoch(utcparse(datetime.utcnow()))):
             try:
                 OFSfaDriver().crud_slice(slice.slice, slice.authority,
                                          'delete_slice')
             except:
                 pass
Beispiel #3
0
 def set_expiration(self, expiration):
     if isinstance(expiration, (int, float)):
         self.expiration = datetime.datetime.fromtimestamp(expiration)
     elif isinstance (expiration, datetime.datetime):
         self.expiration = expiration
     elif isinstance (expiration, StringTypes):
         self.expiration = utcparse (expiration)
     else:
         print "unexpected input type in Credential.set_expiration"
Beispiel #4
0
    def decode(self):
        if not self.xml:
            return
        doc = parseString(self.xml)
        sigs = []
        signed_cred = doc.getElementsByTagName("signed-credential")

        # Is this a signed-cred or just a cred?
        if len(signed_cred) > 0:
            creds = signed_cred[0].getElementsByTagName("credential")
            signatures = signed_cred[0].getElementsByTagName("signatures")
            if len(signatures) > 0:
                sigs = signatures[0].getElementsByTagName("Signature")
        else:
            creds = doc.getElementsByTagName("credential")
        
        if creds is None or len(creds) == 0:
            # malformed cred file
            raise CredentialNotVerifiable("Malformed XML: No credential tag found")

        # Just take the first cred if there are more than one
        cred = creds[0]

        self.set_refid(cred.getAttribute("xml:id"))
        self.set_expiration(utcparse(getTextNode(cred, "expires")))
        self.gidCaller = GID(string=getTextNode(cred, "owner_gid"))
        self.gidObject = GID(string=getTextNode(cred, "target_gid"))   


        # Process privileges
        privs = cred.getElementsByTagName("privileges")[0]
        rlist = Rights()
        for priv in privs.getElementsByTagName("privilege"):
            kind = getTextNode(priv, "name")
            deleg = str2bool(getTextNode(priv, "can_delegate"))
            if kind == '*':
                # Convert * into the default privileges for the credential's type
                # Each inherits the delegatability from the * above
                _ , type = urn_to_hrn(self.gidObject.get_urn())
                rl = determine_rights(type, self.gidObject.get_urn())
                for r in rl.rights:
                    r.delegate = deleg
                    rlist.add(r)
            else:
                rlist.add(Right(kind.strip(), deleg))
        self.set_privileges(rlist)


        # Is there a parent?
        parent = cred.getElementsByTagName("parent")
        if len(parent) > 0:
            parent_doc = parent[0].getElementsByTagName("credential")[0]
            parent_xml = parent_doc.toxml()
            self.parent = Credential(string=parent_xml)
            self.updateRefID()

        # Assign the signatures to the credentials
        for sig in sigs:
            Sig = Signature(string=sig.toxml())

            for cur_cred in self.get_credential_list():
                if cur_cred.get_refid() == Sig.get_refid():
                    cur_cred.set_signature(Sig)