2 from __future__ import with_statement
8 from types import StringTypes, ListType
9 from optparse import OptionParser
11 from geni.trust.certificate import Keypair, Certificate
12 from geni.trust.credential import Credential
13 from geni.util.geniclient import GeniClient, ServerException
14 from geni.trust.gid import create_uuid
15 from geni.util.record import GeniRecord
16 from geni.util.rspec import Rspec
18 def determine_geni_filekind(fn):
19 from geni.trust.certificate import Certificate
21 cert = Certificate(filename = fn)
23 data = cert.get_data()
25 dict = xmlrpclib.loads(data)[0][0]
29 if "gidCaller" in dict:
39 lastpart = hrn.split(".")[-1]
40 filename = lastpart + ".gid"
42 if os.path.exists(filename):
43 print filename, ": already exists... skipping"
46 print filename, ": extracting gid of", hrn
48 gid.save_to_file(filename, save_parents = True)
50 def extract_gids(cred, extract_parents):
51 gidCaller = cred.get_gid_caller()
55 gidObject = cred.get_gid_object()
56 if gidObject and ((gidCaller == None) or (gidCaller.get_hrn() != gidObject.get_hrn())):
60 parent = cred.get_parent()
62 extract_gids(parent, extract_parents)
65 # Generate command line parser
66 parser = OptionParser(usage="genidump [options] filename")
68 parser.add_option("-e", "--extractgids", action="store_true", dest="extract_gids", default=False, help="Extract GIDs from credentials")
69 parser.add_option("-p", "--dumpparents", action="store_true", dest="dump_parents", default=False, help="Show parents")
74 parser = create_parser()
75 (options, args) = parser.parse_args()
78 print "No filename given. Use -h for help."
82 kind = determine_geni_filekind(filename)
84 if kind=="credential":
85 cred = Credential(filename = filename)
86 cred.dump(dump_parents = options.dump_parents)
87 if options.extract_gids:
88 extract_gids(cred, extract_parents = options.dump_parents)
90 gid = Gid(filename = filename)
91 gid.dump(dump_parents = options.dump_parents)
93 print "unknown filekind", kind
95 if __name__=="__main__":