From: Dietmar Maurer Date: Thu, 1 Oct 2015 14:44:43 +0000 (+0200) Subject: convert pveum into a PVE::CLI class X-Git-Url: https://git.proxmox.com/?p=pve-access-control.git;a=commitdiff_plain;h=09281ad74465a7dbc92edfa02463b0d2332a6e98 convert pveum into a PVE::CLI class --- diff --git a/Makefile b/Makefile index 4d7e64b..88a2311 100644 --- a/Makefile +++ b/Makefile @@ -30,8 +30,8 @@ dinstall: deb cat $<|pod2man -n $* -s 1 -r ${VERSION} -c "Proxmox Documentation"|gzip -c9 >$@.tmp mv $@.tmp $@ -pveum.1.pod: pveum - perl -I. ./pveum printmanpod >$@.tmp +pveum.1.pod: PVE/CLI/pveum.pm + perl -I. -T -e "use PVE::CLI::pveum; PVE::CLI::pveum->generate_pod_manpage();" >$@.tmp mv $@.tmp $@ .PHONY: install @@ -41,7 +41,8 @@ install: pveum.1.pod pveum.1.gz oathkeygen install -m 0755 pveum ${DESTDIR}${SBINDIR} install -m 0755 oathkeygen ${DESTDIR}${BINDIR} make -C PVE install - perl -I. ./pveum verifyapi + perl -I. ./pveum verifyapi + perl -I. -T -e "use PVE::CLI::pveum; PVE::CLI::pveum->verify_api();" install -d ${DESTDIR}/usr/share/man/man1 install -d ${DESTDIR}${PODDIR} install -m 0644 pveum.1.gz ${DESTDIR}/usr/share/man/man1/ diff --git a/PVE/CLI/Makefile b/PVE/CLI/Makefile new file mode 100644 index 0000000..3054212 --- /dev/null +++ b/PVE/CLI/Makefile @@ -0,0 +1,9 @@ +SOURCES=pveum.pm + +.PHONY: install +install: ${SOURCES} + install -d -m 0755 ${DESTDIR}${PERLDIR}/PVE/CLI + for i in ${SOURCES}; do install -D -m 0644 $$i ${DESTDIR}${PERLDIR}/PVE/CLI/$$i; done + + +clean: diff --git a/PVE/CLI/pveum.pm b/PVE/CLI/pveum.pm new file mode 100755 index 0000000..772ba29 --- /dev/null +++ b/PVE/CLI/pveum.pm @@ -0,0 +1,65 @@ +package PVE::CLI::pveum; + +use strict; +use warnings; +use Getopt::Long; +use PVE::Tools qw(run_command); +use PVE::Cluster; +use PVE::SafeSyslog; +use PVE::AccessControl; +use File::Path qw(make_path remove_tree); +use Term::ReadLine; +use PVE::INotify; +use PVE::RPCEnvironment; +use PVE::API2::User; +use PVE::API2::Group; +use PVE::API2::Role; +use PVE::API2::ACL; +use PVE::API2::AccessControl; +use PVE::JSONSchema qw(get_standard_option); +use PVE::CLIHandler; + +use base qw(PVE::CLIHandler); + +our $cmddef = { + ticket => [ 'PVE::API2::AccessControl', 'create_ticket', ['username'], undef, + sub { + my ($res) = @_; + print "$res->{ticket}\n"; + }], + + passwd => [ 'PVE::API2::AccessControl', 'change_passsword', ['userid'] ], + + useradd => [ 'PVE::API2::User', 'create_user', ['userid'] ], + usermod => [ 'PVE::API2::User', 'update_user', ['userid'] ], + userdel => [ 'PVE::API2::User', 'delete_user', ['userid'] ], + + groupadd => [ 'PVE::API2::Group', 'create_group', ['groupid'] ], + groupmod => [ 'PVE::API2::Group', 'update_group', ['groupid'] ], + groupdel => [ 'PVE::API2::Group', 'delete_group', ['groupid'] ], + + roleadd => [ 'PVE::API2::Role', 'create_role', ['roleid'] ], + rolemod => [ 'PVE::API2::Role', 'update_role', ['roleid'] ], + roledel => [ 'PVE::API2::Role', 'delete_role', ['roleid'] ], + + aclmod => [ 'PVE::API2::ACL', 'update_acl', ['path'], { delete => 0 }], + acldel => [ 'PVE::API2::ACL', 'update_acl', ['path'], { delete => 1 }], +}; + +1; + +__END__ + +=head1 NAME + +pveum - PVE User Manager + +=head1 SYNOPSIS + +=include synopsis + +=head1 DESCRIPTION + +No description available. + +=include pve_copyright diff --git a/PVE/Makefile b/PVE/Makefile index 79cafae..410d9d8 100644 --- a/PVE/Makefile +++ b/PVE/Makefile @@ -5,4 +5,5 @@ install: make -C Auth install install -D -m 0644 AccessControl.pm ${DESTDIR}${PERLDIR}/PVE/AccessControl.pm install -D -m 0644 RPCEnvironment.pm ${DESTDIR}${PERLDIR}/PVE/RPCEnvironment.pm - make -C API2 install \ No newline at end of file + make -C API2 install + make -C CLI install diff --git a/pveum b/pveum index c9d602e..4ab2e0c 100755 --- a/pveum +++ b/pveum @@ -2,32 +2,8 @@ use strict; use warnings; -use Getopt::Long; -use PVE::Tools qw(run_command); -use PVE::Cluster; -use PVE::SafeSyslog; -use PVE::AccessControl; -use File::Path qw(make_path remove_tree); -use Term::ReadLine; -use PVE::INotify; -use PVE::RPCEnvironment; -use PVE::API2::User; -use PVE::API2::Group; -use PVE::API2::Role; -use PVE::API2::ACL; -use PVE::API2::AccessControl; -use PVE::JSONSchema qw(get_standard_option); -use PVE::CLIHandler; -use base qw(PVE::CLIHandler); - -use Data::Dumper; # fixme: remove - -$ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin'; - -initlog('pveum'); - -#fixme: logging? +use PVE::CLI::pveum; my $read_password = sub { @@ -42,64 +18,9 @@ my $read_password = sub { return $input; }; -my $cmddef = { - ticket => [ 'PVE::API2::AccessControl', 'create_ticket', ['username'], undef, - sub { - my ($res) = @_; - print "$res->{ticket}\n"; - }], - - passwd => [ 'PVE::API2::AccessControl', 'change_passsword', ['userid'] ], - - useradd => [ 'PVE::API2::User', 'create_user', ['userid'] ], - usermod => [ 'PVE::API2::User', 'update_user', ['userid'] ], - userdel => [ 'PVE::API2::User', 'delete_user', ['userid'] ], - - groupadd => [ 'PVE::API2::Group', 'create_group', ['groupid'] ], - groupmod => [ 'PVE::API2::Group', 'update_group', ['groupid'] ], - groupdel => [ 'PVE::API2::Group', 'delete_group', ['groupid'] ], - - roleadd => [ 'PVE::API2::Role', 'create_role', ['roleid'] ], - rolemod => [ 'PVE::API2::Role', 'update_role', ['roleid'] ], - roledel => [ 'PVE::API2::Role', 'delete_role', ['roleid'] ], - - aclmod => [ 'PVE::API2::ACL', 'update_acl', ['path'], { delete => 0 }], - acldel => [ 'PVE::API2::ACL', 'update_acl', ['path'], { delete => 1 }], -}; - -my $cmd = shift; - -if (defined($cmd) && $cmd ne 'verifyapi' && $cmd ne 'printmanpod') { - die "please run as root\n" if $> != 0; - - PVE::INotify::inotify_init(); - - my $rpcenv = PVE::RPCEnvironment->init('cli'); - - $rpcenv->init_request(); - $rpcenv->set_language($ENV{LANG}); - $rpcenv->set_user('root@pam'); - -# autmatically generate the private key if it does not already exists +my $prepare = sub { + # autmatically generate the private key if it does not already exists PVE::Cluster::gen_auth_key(); -} - -PVE::CLIHandler::handle_cmd($cmddef, "pveum", $cmd, \@ARGV, $read_password, $0); - -exit 0; - -__END__ - -=head1 NAME - -pveum - PVE User Manager - -=head1 SYNOPSIS - -=include synopsis - -=head1 DESCRIPTION - -No description available. +}; -=include pve_copyright +PVE::CLI::pveum->run_cli($read_password, undef, $prepare);