diff options
| author | Jan Cholasta <jcholast@redhat.com> | 2016-04-28 10:15:01 +0200 |
|---|---|---|
| committer | Jan Cholasta <jcholast@redhat.com> | 2016-06-03 09:00:34 +0200 |
| commit | 4c7be74526bd89ed1b481f3a1ac4bb467ee0ea2c (patch) | |
| tree | 3db268df3cfa41bd8a3c4655967e6931428b1ba9 /ipaclient/plugins/user.py | |
| parent | 6cfb9d73d9701767d8b76d7ff5bbc080a6be9386 (diff) | |
| download | freeipa-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.py | 82 |
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) |
