Easy CA management
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

88 lines
2.6 KiB

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cmd
from ca_manager import list_cas, sign_request
class CAManagerShell(cmd.Cmd, object):
intro= """# LILiK CA Manager\n
Welcome to the certification authority shell.
Type help or ? to list commands.
"""
prompt= "(CA Manager)> "
def __init__(self, ca_manager):
super(CAManagerShell, self).__init__()
self.ca_manager= ca_manager
def do_ls(self, l):
'List the available certification authorities: LS'
list_cas(self.ca_manager)
def do_requests(self, l):
'List the available certification requests: REQUESTS'
print_available_requests(self.ca_manager)
def do_show_ca(self, l):
'Show certification authority information: SHOW_CA'
raise NotImplementedError()
def do_gen_ssh_ca(self, l):
'Generate a SSH certification authority: GEN_SSH_CA id name'
try:
[ca_id, ca_name] = l.split(" ", 2)[:2]
self.ca_manager.create_ssh_ca(ca_id, ca_name)
except ValueError:
print("Malformed input: %s" % l)
def do_gen_ssl_ca(self, l):
'Generate a SSL certification authority: GEN_SSL_CA id name'
try:
[ca_id, ca_name] = l.split(" ", 2)[:2]
self.ca_manager.create_ssl_ca(ca_id, ca_name)
except ValueError:
print("Malformed input: %s" % l)
def do_sign_request(self, l):
'Sign a certificate from a request'
# argument number is too low
if len(l) < 2:
# print available requests
print("Available request")
print_available_requests(self.ca_manager)
print("==================")
# print available ca
print("Available authority")
print_available_authorities(self.ca_manager)
print("==================")
# print usage
print("usage: sign_request {{ n }} {{ m }}")
else:
[request_number, authority_number] = l.split(" ", 2)[:2]
sign_request(self.ca_manager, request_number, authority_number)
def do_quit(self, l):
'Quit this shell'
return True
def print_available_authorities(ca_manager):
for i, ca_item in enumerate(ca_manager.get_cas_list()):
(ca_id, ca_name, ca_type) = ca_item
print("- %d : [%3s] %-15s (%s)" % (i ,ca_type, ca_id, ca_name))
def print_available_requests(ca_manager):
requests = ca_manager.get_requests()
for i, request in enumerate(requests):
print("- %d : %s" % (i, request))
else:
print("No requests")