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 <username>\@<relam>.",
- optional => 1}),
+ optional => 1,
+ completion => \&PVE::AccessControl::complete_realm,
+ }),
password => {
description => "The secret password. This can also be a valid ticket.",
type => 'string',
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',
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 },
},
},
parameters => {
additionalProperties => 0,
properties => {
- groupid => { type => 'string' , format => 'pve-groupid' },
+ groupid => {
+ type => 'string' , format => 'pve-groupid',
+ completion => \&PVE::AccessControl::complete_group,
+ },
}
},
returns => { type => 'null' },
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' },
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,
parameters => {
additionalProperties => 0,
properties => {
- userid => get_standard_option('userid'),
+ userid => get_standard_option('userid', {
+ completion => \&PVE::AccessControl::complete_username,
+ }),
}
},
returns => { type => 'null' },
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;