From: Tony Mack Date: Thu, 19 Nov 2009 19:39:30 +0000 (+0000) Subject: filter rspec against sfa tables incomming ruleset X-Git-Tag: sfa-0.9-7~320 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=2058120c452806266d419e8d4b4685fd53133aa6;p=sfa.git filter rspec against sfa tables incomming ruleset --- diff --git a/sfa/methods/get_ticket.py b/sfa/methods/get_ticket.py index f20a6fd6..326fcaf1 100644 --- a/sfa/methods/get_ticket.py +++ b/sfa/methods/get_ticket.py @@ -8,6 +8,7 @@ from sfa.trust.auth import Auth from sfa.util.genitable import GeniTable from sfa.util.sfaticket import SfaTicket from sfa.util.slices import +from sfatables.runtime import SFATablesRules class get_ticket(Method): """ @@ -26,7 +27,7 @@ class get_ticket(Method): @return the string representation of a ticket object """ - interfaces = ['registry'] + interfaces = ['registry', 'aggregate', 'slicemgr'] accepts = [ Parameter(str, "Credential string"), @@ -44,6 +45,7 @@ class get_ticket(Method): self.api.auth.verify_object_belongs_to_me(hrn) self.api.auth.verify_object_permission(hrn) + # find record info table = GeniTable() records = table.findObjects({'hrn': hrn, 'type': 'slice'}) if not records: @@ -56,6 +58,19 @@ class get_ticket(Method): new_ticket.set_issuer(key=auth_info.get_pkey_object(), subject=auth_hrn) new_ticket.set_pubkey(object_gid.get_pubkey()) + # determine aggregate tyep + sfa_aggregate_type = Config().get_aggregate_rspec_type() + rspec_manager = __import__("sfa.rspecs.aggregates.rspec_manager_"+sfa_aggregate_type, fromlist = ["sfa.rspecs.aggregates"]) + + # Fukter the incoming rspec using sfatables + incoming_rules = SFATablesRules('INCOMING') + #incoming_rules.set_slice(hrn) # This is a temporary kludge. Eventually, we'd like to fetch the context requested by the match/target + contexts = incoming_rules.contexts + caller_hrn = Credential(string=caller_cred).get_gid_caller().get_hrn()) + request_context = rspec_manager.fetch_context(hrn, caller_hrn, contexts) + incoming_rules.set_context(request_context) + rspec = incoming_rules.apply(requested_rspec) + # get sliver info slivers = Slices(self.api).get_slivers(hrn) if not slivers: