started to repair sfadump
[sfa.git] / sfa / client / sfadump.py
1 #! /usr/bin/env python
2 from __future__ import with_statement
3
4 import sys
5 import os, os.path
6 import tempfile
7 import xmlrpclib
8 from types import StringTypes, ListType
9 from optparse import OptionParser
10
11 from sfa.trust.certificate import Certificate
12 from sfa.trust.credential import Credential
13 from sfa.util.record import SfaRecord
14 from sfa.util.rspec import RSpec
15 from sfa.util.sfalogging import sfa_logger, sfa_logger_goes_to_console
16
17 def determine_sfa_filekind(fn):
18     try:
19         cert = Certificate(filename = fn)
20         return 'certificate'
21     except:
22         pass
23
24     try:
25         cred=Credential(filename=fn)
26         return 'credential'
27     except:
28         pass
29
30     # to be completed
31 #    if "gidCaller" in dict:
32 #        return "credential"
33 #
34 #    if "uuid" in dict:
35 #        return "gid"
36
37     return "unknown"
38
39 def save_gid(gid):
40    hrn = gid.get_hrn()
41    lastpart = hrn.split(".")[-1]
42    filename = lastpart + ".gid"
43
44    if os.path.exists(filename):
45        print filename, ": already exists... skipping"
46        return
47
48    print filename, ": extracting gid of", hrn
49
50    gid.save_to_file(filename, save_parents = True)
51
52 def extract_gids(cred, extract_parents):
53    gidCaller = cred.get_gid_caller()
54    if gidCaller:
55        save_gid(gidCaller)
56
57    gidObject = cred.get_gid_object()
58    if gidObject and ((gidCaller == None) or (gidCaller.get_hrn() != gidObject.get_hrn())):
59        save_gid(gidObject)
60
61    # no such method Credential.get_parent
62 #   if extract_parents:
63 #       parent = cred.get_parent()
64 #       if parent:
65 #           extract_gids(parent, extract_parents)
66
67 def handle_input (filename, options):
68     
69     kind = determine_sfa_filekind(filename)
70
71     if kind=="certificate":
72         cert=Certificate (filename=filename)
73 #        cert.dump(dump_parents=options.dump_parents)
74         cert.dump()
75     elif kind=="credential":
76         cred = Credential(filename = filename)
77         cred.dump(dump_parents = options.dump_parents)
78         if options.extract_gids:
79             extract_gids(cred, extract_parents = options.dump_parents)
80     elif kind=="gid":
81         gid = Gid(filename = filename)
82         gid.dump(dump_parents = options.dump_parents)
83     else:
84         print "%s: unknown filekind '%s'"% (filename,kind)
85
86 def main():
87     sfa_logger_goes_to_console()
88     usage = """%prog file1 [ .. filen]
89 display info on input files"""
90     parser = OptionParser(usage=usage)
91
92     parser.add_option("-e", "--extractgids", action="store_true", dest="extract_gids", default=False, help="Extract GIDs from credentials")
93     parser.add_option("-p", "--dumpparents", action="store_true", dest="dump_parents", default=False, help="Show parents")
94     parser.add_option("-v", "--verbose", action='count', dest='verbose', default=0)
95     (options, args) = parser.parse_args()
96
97     sfa_logger().setLevelFromOptVerbose(options.verbose)
98     if len(args) <= 0:
99         parser.print_help()
100         sys.exit(1)
101     for f in args: 
102         handle_input(f,options)
103
104 if __name__=="__main__":
105    main()