5b32508d6d6f968edc94258e482fb5c7a5bac256
[stack/cam.git] / lib / list.py
1
2 import os, re
3 import commands
4 from time import time, strftime, localtime
5 from utils import *
6 from templates import *
7 from paths import *
8 from cfg import *
9
10
11
12 def list(args):
13     verbose = 0
14     if len(args) > 0 and args[0] == '-v':
15         verbose = 1
16     
17     print '''
18
19 List of known certificates for '%s' CA:
20
21 ''' % ca['name']
22
23     i = 0
24     sections = cfg.sections()
25     sections.sort()
26     for sec in sections:
27         if sec == 'ca' or sec == 'global':
28             continue
29         i += 1
30         crt_file = getpath('rsa_crt', sec)
31         dsa_crt_file = getpath('dsa_crt', sec)
32         if os.path.exists(crt_file):
33             crt_date = getcertdate(crt_file)
34             days = int((time() - crt_date) / 86400)
35             if days > 0:
36                 days_s = '%d days ago' % days
37             else:
38                 days_s = '%d days left' % (-days)
39             if expired(crt_date):
40                 m = 'EXPIRED %s' % days_s.upper()
41                 star = '*'
42             else:
43                 if verbose:
44                     m = '\n%21s Expiration: %s (%s)' % \
45                         (' ', 
46                          strftime('%d %b %Y', localtime(crt_date)),
47                          days_s)
48                 else:
49                     m = 'exp. %s' % strftime('%d/%m/%Y', 
50                                              localtime(crt_date))
51                 star = ' '
52         else:
53             m = 'NOT FOUND'
54             star = '*'
55         print '%3d. %s%-15s %s [%s] - %s' % (i, star, sec, cfg.get(sec, 'cn'), cfg.get(sec, 'alt_names').replace('\n', ' '), m)
56         if star != '*' and verbose:
57             # do fingerprints
58             for hname, hash in [ ('MD5', 'md5'), ('SHA1', 'sha1') ]:
59                 for cypher, file in [ ( 'RSA', crt_file), ( 'DSA', dsa_crt_file ) ]:
60                     fp = fingerprint(hash, file)
61                     print '%21s %s %s fingerprint: %s' % ('', cypher, hname, fp)
62                     
63         if verbose:
64             print
65
66     print '''
67 (* = certificate does not exist, create with 'cam gen <name>')
68 '''
69