summaryrefslogtreecommitdiffstats
path: root/ipaclient/plugins/user.py
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2016-04-28 10:15:01 +0200
committerJan Cholasta <jcholast@redhat.com>2016-06-03 09:00:34 +0200
commit4c7be74526bd89ed1b481f3a1ac4bb467ee0ea2c (patch)
tree3db268df3cfa41bd8a3c4655967e6931428b1ba9 /ipaclient/plugins/user.py
parent6cfb9d73d9701767d8b76d7ff5bbc080a6be9386 (diff)
downloadfreeipa-4c7be74526bd89ed1b481f3a1ac4bb467ee0ea2c.tar.gz
freeipa-4c7be74526bd89ed1b481f3a1ac4bb467ee0ea2c.tar.xz
freeipa-4c7be74526bd89ed1b481f3a1ac4bb467ee0ea2c.zip
ipalib: split off client-side plugin code into ipaclient
Provide client-side overrides for command plugins which implement any of the client-side `interactive_prompt_callback`, `forward` or `output_for_cli` methods and move the methods from the original plugins to the overrides. https://fedorahosted.org/freeipa/ticket/4739 Reviewed-By: David Kupka <dkupka@redhat.com>
Diffstat (limited to 'ipaclient/plugins/user.py')
-rw-r--r--ipaclient/plugins/user.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/ipaclient/plugins/user.py b/ipaclient/plugins/user.py
new file mode 100644
index 000000000..ccff9bbbc
--- /dev/null
+++ b/ipaclient/plugins/user.py
@@ -0,0 +1,82 @@
+# Authors:
+# Jason Gerard DeRose <jderose@redhat.com>
+# Pavel Zuna <pzuna@redhat.com>
+#
+# Copyright (C) 2008 Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from ipaclient.frontend import MethodOverride
+from ipalib import errors
+from ipalib import Flag
+from ipalib import util
+from ipalib.plugable import Registry
+from ipalib import _
+from ipalib import x509
+
+register = Registry()
+
+
+@register(override=True)
+class user_del(MethodOverride):
+ def get_options(self):
+ for option in super(user_del, self).get_options():
+ yield option
+ yield Flag(
+ 'preserve?',
+ include='cli',
+ doc=_('Delete a user, keeping the entry available for future use'),
+ )
+ yield Flag(
+ 'no_preserve?',
+ include='cli',
+ doc=_('Delete a user'),
+ )
+
+ def forward(self, *keys, **options):
+ if self.api.env.context == 'cli':
+ no_preserve = options.pop('no_preserve', False)
+ preserve = options.pop('preserve', False)
+ if no_preserve and preserve:
+ raise errors.MutuallyExclusiveError(
+ reason=_("preserve and no-preserve cannot be both set"))
+ elif no_preserve:
+ options['preserve'] = False
+ elif preserve:
+ options['preserve'] = True
+
+ return super(user_del, self).forward(*keys, **options)
+
+
+@register(override=True)
+class user_show(MethodOverride):
+ def forward(self, *keys, **options):
+ if 'out' in options:
+ util.check_writable_file(options['out'])
+ result = super(user_show, self).forward(*keys, **options)
+ if 'usercertificate' in result['result']:
+ x509.write_certificate_list(
+ result['result']['usercertificate'],
+ options['out']
+ )
+ result['summary'] = (
+ _('Certificate(s) stored in file \'%(file)s\'')
+ % dict(file=options['out'])
+ )
+ return result
+ else:
+ raise errors.NoCertificateError(entry=keys[-1])
+ else:
+ return super(user_show, self).forward(*keys, **options)