bump version to 3.0-5
[pve-access-control.git] / pveum
1 #!/usr/bin/perl -w 
2
3 use strict;
4 use Getopt::Long;
5 use PVE::Tools qw(run_command);
6 use PVE::Cluster;
7 use PVE::SafeSyslog;
8 use PVE::AccessControl;
9 use File::Path qw(make_path remove_tree);
10 use Term::ReadLine;
11 use PVE::INotify;
12 use PVE::RPCEnvironment;
13 use PVE::API2::User;
14 use PVE::API2::Group;
15 use PVE::API2::Role;
16 use PVE::API2::ACL;
17 use PVE::API2::AccessControl;
18 use PVE::JSONSchema qw(get_standard_option);
19 use PVE::CLIHandler;
20
21 use base qw(PVE::CLIHandler);
22
23 use Data::Dumper; # fixme: remove
24
25 $ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
26
27 initlog('pveum');
28
29 #fixme: logging?
30
31 die "please run as root\n" if $> != 0;
32
33 PVE::INotify::inotify_init();
34
35 my $rpcenv = PVE::RPCEnvironment->init('cli');
36
37 $rpcenv->init_request();
38 $rpcenv->set_language($ENV{LANG});
39 $rpcenv->set_user('root@pam'); 
40
41 # autmatically generate the private key if it does not already exists
42 PVE::Cluster::gen_auth_key();
43
44 my $read_password = sub {
45
46     # return $ENV{PVE_PW_TICKET} if defined($ENV{PVE_PW_TICKET});
47
48     my $term = new Term::ReadLine ('pveum');
49     my $attribs = $term->Attribs;
50     $attribs->{redisplay_function} = $attribs->{shadow_redisplay};
51     my $input = $term->readline('Enter new password: ');
52     my $conf = $term->readline('Retype new password: ');
53     die "Passwords do not match.\n" if ($input ne $conf);
54     return $input;
55 };
56
57 my $cmddef = {
58     ticket => [ 'PVE::API2::AccessControl', 'create_ticket', ['username'], undef,
59                 sub {
60                     my ($res) = @_;
61                     print "$res->{ticket}\n";
62                 }],
63
64     passwd => [ 'PVE::API2::AccessControl', 'change_passsword', ['userid'] ],
65
66     useradd => [ 'PVE::API2::User', 'create_user', ['userid'] ],
67     usermod => [ 'PVE::API2::User', 'update_user', ['userid'] ],
68     userdel => [ 'PVE::API2::User', 'delete_user', ['userid'] ],
69
70     groupadd => [ 'PVE::API2::Group', 'create_group', ['groupid'] ],
71     groupmod => [ 'PVE::API2::Group', 'update_group', ['groupid'] ],
72     groupdel => [ 'PVE::API2::Group', 'delete_group', ['groupid'] ],
73
74     roleadd => [ 'PVE::API2::Role', 'create_role', ['roleid'] ],
75     rolemod => [ 'PVE::API2::Role', 'update_role', ['roleid'] ],
76     roledel => [ 'PVE::API2::Role', 'delete_role', ['roleid'] ],
77
78     aclmod => [ 'PVE::API2::ACL', 'update_acl', ['path'], { delete => 0 }],
79     acldel => [ 'PVE::API2::ACL', 'update_acl', ['path'], { delete => 1 }],
80 };
81
82 my $cmd = shift;
83
84 PVE::CLIHandler::handle_cmd($cmddef, "pveum", $cmd, \@ARGV, $read_password, $0);
85
86 exit 0;
87
88 __END__
89
90 =head1 NAME
91
92 pveum - PVE User Manager
93
94 =head1 SYNOPSIS
95
96 =include synopsis
97
98 =head1 DESCRIPTION
99
100 No description available.
101
102 =include pve_copyright