X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmethods%2FGetSelfCredential.py;h=b8eb18a3535612dae2f184458ba08609b82e1c35;hb=3cf5c9d8e3f11fa56450c22efdbd6e483c5adda9;hp=647e6369da6e60e755d9aede6f77f2c04b9f2184;hpb=99e9f96209b9ebfd1853e7b8902a1a0fe893eaa2;p=sfa.git diff --git a/sfa/methods/GetSelfCredential.py b/sfa/methods/GetSelfCredential.py index 647e6369..b8eb18a3 100644 --- a/sfa/methods/GetSelfCredential.py +++ b/sfa/methods/GetSelfCredential.py @@ -1,12 +1,11 @@ -from sfa.util.faults import * -from sfa.util.namespace import urn_to_hrn +from sfa.util.faults import RecordNotFound, ConnectionKeyGIDMismatch +from sfa.util.xrn import urn_to_hrn from sfa.util.method import Method -from sfa.util.parameter import Parameter, Mixed -from sfa.util.record import SfaRecord -from sfa.trust.credential import Credential + from sfa.trust.certificate import Certificate -from sfa.trust.rights import Right, Rights + +from sfa.storage.parameter import Parameter, Mixed class GetSelfCredential(Method): """ @@ -54,14 +53,26 @@ class GetSelfCredential(Method): origin_hrn = Certificate(string=cert).get_subject() self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) - manager = self.api.get_interface_manager() - # authenticate the gid - records = manager.resolve(self.api, xrn, type) + ### authenticate the gid + # import here so we can load this module at build-time for sfa2wsdl + #from sfa.storage.alchemy import dbsession + from sfa.storage.persistentobjs import RegRecord + + # xxx-local - the current code runs Resolve, which would forward to + # another registry if needed + # I wonder if this is truly the intention, or shouldn't we instead + # only look in the local db ? + records = self.api.manager.Resolve(self.api, xrn, type) if not records: raise RecordNotFound(hrn) - record = SfaRecord(dict=records[0]) - gid = record.get_gid_object() + + record_obj = RegRecord ('unknown') + record_obj.set_from_dict (records[0]) + # xxx-local the local-only version would read + #record_obj = dbsession.query(RegRecord).filter_by(hrn=hrn).first() + #if not record_obj: raise RecordNotFound(hrn) + gid = record_obj.get_gid_object() gid_str = gid.save_to_string(save_parents=True) self.api.auth.authenticateGid(gid_str, [cert, type, hrn]) # authenticate the certificate against the gid in the db @@ -74,4 +85,4 @@ class GetSelfCredential(Method): self.api.logger.debug("ConnectionKeyGIDMismatch, %s filename: %s"%(name,obj.filename)) raise ConnectionKeyGIDMismatch(gid.get_subject()) - return manager.get_credential(self.api, xrn, type, is_self=True) + return self.api.manager.GetCredential(self.api, xrn, type, is_self=True)