From 3e5bfdf60f255a432956ba0f77d6f840708d9619 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Thu, 1 Oct 2015 17:22:09 +0200 Subject: [PATCH] pveum: implement bash completion hooks --- PVE/API2/AccessControl.pm | 9 +++++++-- PVE/API2/Group.pm | 10 ++++++++-- PVE/API2/User.pm | 20 ++++++++++++++++---- PVE/AccessControl.pm | 23 +++++++++++++++++++++++ 4 files changed, 54 insertions(+), 8 deletions(-) diff --git a/PVE/API2/AccessControl.pm b/PVE/API2/AccessControl.pm index f01180d..fee774a 100644 --- a/PVE/API2/AccessControl.pm +++ b/PVE/API2/AccessControl.pm @@ -235,10 +235,13 @@ __PACKAGE__->register_method ({ description => "User name", type => 'string', maxLength => 64, + completion => \&PVE::AccessControl::complete_username, }, realm => get_standard_option('realm', { description => "You can optionally pass the realm using this parameter. Normally the realm is simply added to the username \@.", - optional => 1}), + optional => 1, + completion => \&PVE::AccessControl::complete_realm, + }), password => { description => "The secret password. This can also be a valid ticket.", type => 'string', @@ -325,7 +328,9 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - userid => get_standard_option('userid'), + userid => get_standard_option('userid', { + completion => \&PVE::AccessControl::complete_username, + }), password => { description => "The new password.", type => 'string', diff --git a/PVE/API2/Group.pm b/PVE/API2/Group.pm index 27051a4..fca8a2a 100644 --- a/PVE/API2/Group.pm +++ b/PVE/API2/Group.pm @@ -107,7 +107,10 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - groupid => { type => 'string', format => 'pve-groupid' }, + groupid => { + type => 'string', format => 'pve-groupid', + completion => \&PVE::AccessControl::complete_group, + }, comment => { type => 'string', optional => 1 }, }, }, @@ -195,7 +198,10 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - groupid => { type => 'string' , format => 'pve-groupid' }, + groupid => { + type => 'string' , format => 'pve-groupid', + completion => \&PVE::AccessControl::complete_group, + }, } }, returns => { type => 'null' }, diff --git a/PVE/API2/User.pm b/PVE/API2/User.pm index 6208ad5..6f8dcd7 100644 --- a/PVE/API2/User.pm +++ b/PVE/API2/User.pm @@ -119,7 +119,11 @@ __PACKAGE__->register_method ({ minLength => 5, maxLength => 64 }, - groups => { type => 'string', optional => 1, format => 'pve-groupid-list'}, + groups => { + type => 'string', format => 'pve-groupid-list', + optional => 1, + completion => \&PVE::AccessControl::complete_group, + }, firstname => { type => 'string', optional => 1 }, lastname => { type => 'string', optional => 1 }, email => { type => 'string', optional => 1, format => 'email-opt' }, @@ -238,8 +242,14 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - userid => get_standard_option('userid'), - groups => { type => 'string', optional => 1, format => 'pve-groupid-list' }, + userid => get_standard_option('userid', { + completion => \&PVE::AccessControl::complete_username, + }), + groups => { + type => 'string', format => 'pve-groupid-list', + optional => 1, + completion => \&PVE::AccessControl::complete_group, + }, append => { type => 'boolean', optional => 1, @@ -325,7 +335,9 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - userid => get_standard_option('userid'), + userid => get_standard_option('userid', { + completion => \&PVE::AccessControl::complete_username, + }), } }, returns => { type => 'null' }, diff --git a/PVE/AccessControl.pm b/PVE/AccessControl.pm index 9b70902..db31121 100644 --- a/PVE/AccessControl.pm +++ b/PVE/AccessControl.pm @@ -1294,4 +1294,27 @@ sub oath_verify_otp { die "oath auth failed\n" if !$found; } +# bash completion helpers + +sub complete_username { + + my $user_cfg = cfs_read_file('user.cfg'); + + return [ keys %{$user_cfg->{users}} ]; +} + +sub complete_group { + + my $user_cfg = cfs_read_file('user.cfg'); + + return [ keys %{$user_cfg->{groups}} ]; +} + +sub complete_realm { + + my $domain_cfg = cfs_read_file('domains.cfg'); + + return [ keys %{$domain_cfg->{ids}} ]; +} + 1; -- 2.39.2