summaryrefslogtreecommitdiffstats
path: root/ipaclient/plugins/ca.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipaclient/plugins/ca.py')
-rw-r--r--ipaclient/plugins/ca.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/ipaclient/plugins/ca.py b/ipaclient/plugins/ca.py
new file mode 100644
index 000000000..fcdf48463
--- /dev/null
+++ b/ipaclient/plugins/ca.py
@@ -0,0 +1,53 @@
+#
+# Copyright (C) 2016 FreeIPA Contributors see COPYING for license
+#
+
+import base64
+from ipaclient.frontend import MethodOverride
+from ipalib import util, x509, Str
+from ipalib.plugable import Registry
+from ipalib.text import _
+
+register = Registry()
+
+
+class WithCertOutArgs(MethodOverride):
+
+ takes_options = (
+ Str(
+ 'certificate_out?',
+ doc=_('Write certificate (chain if --chain used) to file'),
+ include='cli',
+ cli_metavar='FILE',
+ ),
+ )
+
+ def forward(self, *keys, **options):
+ filename = None
+ if 'certificate_out' in options:
+ filename = options.pop('certificate_out')
+ util.check_writable_file(filename)
+
+ result = super(WithCertOutArgs, self).forward(*keys, **options)
+ if filename:
+ def to_pem(x):
+ return x509.make_pem(x)
+ if options.get('chain', False):
+ ders = result['result']['certificate_chain']
+ data = '\n'.join(to_pem(base64.b64encode(der)) for der in ders)
+ else:
+ data = to_pem(result['result']['certificate'])
+ with open(filename, 'wb') as f:
+ f.write(data)
+
+ return result
+
+
+@register(override=True, no_fail=True)
+class ca_add(WithCertOutArgs):
+ pass
+
+
+@register(override=True, no_fail=True)
+class ca_show(WithCertOutArgs):
+ pass