pam: use a pam object method instead of pam module function
[cascardo/ipsilon.git] / ipsilon / tools / certs.py
1 # Copyright (C) 2014 Ipsilon project Contributors, for license see COPYING
2
3 from subprocess import Popen
4 import os
5 import string
6
7
8 class Certificate(object):
9
10     def __init__(self, path=None):
11         self.subject = None
12         self.key = None
13         self.cert = None
14         if path:
15             self.path = path
16         else:
17             self.path = os.getcwd()
18
19     def generate(self, prefix, subject):
20         self.key = os.path.join(self.path, '%s.key' % prefix)
21         self.cert = os.path.join(self.path, '%s.pem' % prefix)
22         self.subject = '/CN=%s' % subject
23         command = ['openssl',
24                    'req', '-x509', '-batch', '-days', '1825',
25                    '-newkey', 'rsa:2048', '-nodes', '-subj', self.subject,
26                    '-keyout', self.key, '-out', self.cert]
27         proc = Popen(command)
28         proc.wait()
29
30     def import_cert(self, certfile, keyfile):
31         self.cert = certfile
32         self.key = keyfile
33
34     def get_cert(self):
35         if not self.cert:
36             raise ValueError('Certificate unavailable')
37         with open(self.cert, 'r') as f:
38             cert = f.readlines()
39
40         # poor man stripping of BEGIN/END lines
41         if cert[0] == '-----BEGIN CERTIFICATE-----\n':
42             cert = cert[1:]
43         if cert[-1] == '-----END CERTIFICATE-----\n':
44             cert = cert[:-1]
45
46         return string.join(cert)