]>
git.proxmox.com Git - pmg-api.git/blob - PMG/API2/Users.pm
1 package PMG
::API2
::Users
;
8 use PVE
::Tools
qw(extract_param);
9 use PVE
::JSONSchema
qw(get_standard_option);
12 use PVE
::Exception
qw(raise_perm_exc);
14 use PMG
::RESTEnvironment
;
17 use base
qw(PVE::RESTHandler);
19 my $extract_userdata = sub {
23 foreach my $k (keys %$entry) {
24 $res->{$k} = $entry->{$k} if $k ne 'crypt_pass';
30 __PACKAGE__-
>register_method ({
34 description
=> "List users.",
37 permissions
=> { check
=> [ 'admin', 'qmanager', 'audit' ] },
39 additionalProperties
=> 0,
47 userid
=> { type
=> 'string'},
48 enable
=> { type
=> 'boolean'},
49 role => { type
=> 'string'},
50 comment
=> { type
=> 'string', optional
=> 1},
53 links
=> [ { rel
=> 'child', href
=> "{userid}" } ],
58 my $cfg = PMG
::UserConfig-
>new();
60 my $rpcenv = PMG
::RESTEnvironment-
>get();
61 my $authuser = $rpcenv->get_user();
62 my $role = $rpcenv->get_role();
66 foreach my $userid (sort keys %$cfg) {
67 next if $role eq 'qmanager' && $authuser ne $userid;
68 push @$res, $extract_userdata->($cfg->{$userid});
74 __PACKAGE__-
>register_method ({
80 description
=> "Create new user",
81 parameters
=> $PMG::UserConfig
::create_schema
,
82 returns
=> { type
=> 'null' },
88 my $cfg = PMG
::UserConfig-
>new();
90 die "User '$param->{userid}' already exists\n"
91 if $cfg->{$param->{userid
}};
94 foreach my $k (keys %$param) {
96 if ($k eq 'password') {
97 $entry->{crypt_pass
} = PVE
::Tools
::encrypt_pw
($v);
103 $entry->{enable
} //= 0;
104 $entry->{expire
} //= 0;
105 $entry->{role} //= 'audit';
107 $cfg->{$param->{userid
}} = $entry;
112 PMG
::UserConfig
::lock_config
($code, "create user failed");
117 __PACKAGE__-
>register_method ({
121 description
=> "Read User data.",
122 permissions
=> { check
=> [ 'admin', 'qmanager', 'audit' ] },
126 additionalProperties
=> 0,
128 userid
=> get_standard_option
('userid'),
138 my $cfg = PMG
::UserConfig-
>new();
140 my $rpcenv = PMG
::RESTEnvironment-
>get();
141 my $authuser = $rpcenv->get_user();
142 my $role = $rpcenv->get_role();
145 if $role eq 'qmanager' && $authuser ne $param->{userid
};
147 my $data = $cfg->lookup_user_data($param->{userid
});
149 my $res = $extract_userdata->($data);
154 __PACKAGE__-
>register_method ({
158 description
=> "Update user data.",
161 parameters
=> $PMG::UserConfig
::update_schema
,
162 returns
=> { type
=> 'null' },
168 my $cfg = PMG
::UserConfig-
>new();
170 my $userid = extract_param
($param, 'userid');
172 my $entry = $cfg->lookup_user_data($userid);
174 my $delete_str = extract_param
($param, 'delete');
175 die "no options specified\n"
176 if !$delete_str && !scalar(keys %$param);
178 foreach my $k (PVE
::Tools
::split_list
($delete_str)) {
182 foreach my $k (keys %$param) {
183 my $v = $param->{$k};
184 if ($k eq 'password') {
185 $entry->{crypt_pass
} = PVE
::Tools
::encrypt_pw
($v);
194 PMG
::UserConfig
::lock_config
($code, "update user failed");
199 __PACKAGE__-
>register_method ({
203 description
=> "Delete a user.",
207 additionalProperties
=> 0,
209 userid
=> get_standard_option
('userid'),
212 returns
=> { type
=> 'null' },
218 my $cfg = PMG
::UserConfig-
>new();
220 $cfg->lookup_user_data($param->{userid
}); # user exists?
222 delete $cfg->{$param->{userid
}};
227 PMG
::UserConfig
::lock_config
($code, "delete user failed");