diff options
-rw-r--r-- | API.txt | 11 | ||||
-rw-r--r-- | VERSION | 4 | ||||
-rw-r--r-- | ipalib/plugins/otptoken_yubikey.py | 68 |
3 files changed, 46 insertions, 37 deletions
@@ -2973,17 +2973,24 @@ output: Output('completed', type=[<type 'int'>]) output: Output('failed', type=[<type 'dict'>]) output: Entry('result') command: otptoken_add_yubikey -args: 1,8,1 +args: 1,13,3 arg: Str('ipatokenuniqueid?', cli_name='id') +option: Str('addattr*', cli_name='addattr') +option: Flag('all', autofill=True, cli_name='all', default=False) option: Str('description?', cli_name='desc') option: Bool('ipatokendisabled?', cli_name='disabled') option: DateTime('ipatokennotafter?', cli_name='not_after') option: DateTime('ipatokennotbefore?', cli_name='not_before') option: IntEnum('ipatokenotpdigits?', autofill=True, cli_name='digits', default=6, values=[6, 8]) option: Str('ipatokenowner?', cli_name='owner') +option: Flag('no_members', autofill=True, default=False) +option: Flag('raw', autofill=True, cli_name='raw', default=False) +option: Str('setattr*', cli_name='setattr') option: IntEnum('slot?', cli_name='slot', values=[1, 2]) option: Str('version?') -output: Output('result') +output: Entry('result') +output: Output('summary', type=[<type 'unicode'>, <type 'NoneType'>]) +output: PrimaryKey('value') command: otptoken_del args: 1,2,3 arg: Str('ipatokenuniqueid+', cli_name='id') @@ -90,5 +90,5 @@ IPA_DATA_VERSION=20100614120000 # # ######################################################## IPA_API_VERSION_MAJOR=2 -IPA_API_VERSION_MINOR=167 -# Last change: dns: do not rely on server data structures in code called on client +IPA_API_VERSION_MINOR=168 +# Last change: otptoken_yubikey: fix otptoken_add_yubikey arguments diff --git a/ipalib/plugins/otptoken_yubikey.py b/ipalib/plugins/otptoken_yubikey.py index 0cbda1b2e..207d0a6e9 100644 --- a/ipalib/plugins/otptoken_yubikey.py +++ b/ipalib/plugins/otptoken_yubikey.py @@ -17,17 +17,16 @@ # 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 ipalib import _, Str, IntEnum -from ipalib.errors import NotFound -from ipalib.plugable import Registry -from ipalib.frontend import Command -from ipalib.plugins.otptoken import otptoken - import os +import six import usb.core import yubico -import six + +from ipalib import _, IntEnum +from ipalib.errors import NotFound +from ipalib.frontend import Command +from ipalib.plugable import Registry if six.PY3: unicode = str @@ -55,35 +54,40 @@ topic = ('otp', _('One time password commands')) class otptoken_add_yubikey(Command): __doc__ = _('Add a new YubiKey OTP token.') - takes_args = ( - Str('ipatokenuniqueid?', - cli_name='id', - label=_('Unique ID'), - primary_key=True, - ), - ) - - takes_options = Command.takes_options + ( + takes_options = ( IntEnum('slot?', cli_name='slot', label=_('YubiKey slot'), values=(1, 2), ), - ) + tuple(x for x in otptoken.takes_params if x.name in ( - 'description', - 'ipatokenowner', - 'ipatokendisabled', - 'ipatokennotbefore', - 'ipatokennotafter', - 'ipatokenotpdigits' - )) - - has_output_params = Command.has_output_params + \ - tuple(x for x in otptoken.takes_params if x.name in ( - 'ipatokenvendor', - 'ipatokenmodel', - 'ipatokenserial', - )) + ) + + def get_args(self): + for arg in self.api.Command.otptoken_add.args(): + yield arg + for arg in super(otptoken_add_yubikey, self).get_args(): + yield arg + + def get_options(self): + for option in self.api.Command.otptoken_add.options(): + if option.name not in ('type', + 'ipatokenvendor', + 'ipatokenmodel', + 'ipatokenserial', + 'ipatokenotpalgorithm', + 'ipatokenhotpcounter', + 'ipatokenotpkey', + 'ipatokentotpclockoffset', + 'ipatokentotptimestep', + 'no_qrcode', + 'qrcode', + 'version'): + yield option + for option in super(otptoken_add_yubikey, self).get_options(): + yield option + + def _iter_output(self): + return self.api.Command.otptoken_add.output() def forward(self, *args, **kwargs): # Open the YubiKey @@ -145,6 +149,4 @@ class otptoken_add_yubikey(Command): # Return which slot was used for writing. answer.get('result', {})['slot'] = kwargs['slot'] - del answer['value'] # Why does this cause an error if omitted? - del answer['summary'] # Why does this cause an error if omitted? return answer |