]> git.proxmox.com Git - pmg-api.git/blobdiff - PMG/API2/Config.pm
split source and packaging, and clean latter a bit up
[pmg-api.git] / PMG / API2 / Config.pm
diff --git a/PMG/API2/Config.pm b/PMG/API2/Config.pm
deleted file mode 100644 (file)
index 3b688fa..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-package PMG::API2::Config;
-
-use strict;
-use warnings;
-use Data::Dumper;
-
-use PVE::SafeSyslog;
-use PVE::Tools qw(extract_param);
-use HTTP::Status qw(:constants);
-use Storable qw(dclone);
-use PVE::JSONSchema qw(get_standard_option);
-use PVE::RESTHandler;
-use Time::HiRes qw();
-
-use PMG::Config;
-use PMG::API2::RuleDB;
-use PMG::API2::LDAP;
-use PMG::API2::Domains;
-use PMG::API2::Transport;
-use PMG::API2::Cluster;
-use PMG::API2::MyNetworks;
-use PMG::API2::SMTPWhitelist;
-use PMG::API2::MimeTypes;
-use PMG::API2::Fetchmail;
-use PMG::API2::DestinationTLSPolicy;
-
-use base qw(PVE::RESTHandler);
-
-my $section_type_enum = PMG::Config::Base->lookup_types();
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::RuleDB",
-    path => 'ruledb',
-});
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::SMTPWhitelist",
-    path => 'whitelist',
-});
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::LDAP",
-    path => 'ldap',
-});
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::Domains",
-    path => 'domains',
-                             });
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::Fetchmail",
-    path => 'fetchmail',
-});
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::Transport",
-    path => 'transport',
-});
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::MyNetworks",
-    # set fragment delimiter (no subdirs) - we need that, because CIDRs
-    # contain a slash '/'
-    fragmentDelimiter => '',
-    path => 'mynetworks',
-});
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::Cluster",
-    path => 'cluster',
-});
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::MimeTypes",
-    path => 'mimetypes',
-});
-
-__PACKAGE__->register_method ({
-    subclass => "PMG::API2::DestinationTLSPolicy",
-    path => 'tlspolicy',
-});
-
-__PACKAGE__->register_method ({
-    name => 'index', 
-    path => '',
-    method => 'GET',
-    description => "Directory index.",
-    parameters => {
-       additionalProperties => 0,
-       properties => {},
-    },
-    returns => {
-       type => 'array',
-       items => {
-           type => "object",
-           properties => { section => { type => 'string'} },
-       },
-       links => [ { rel => 'child', href => "{section}" } ],
-    },
-    code => sub {
-       my ($param) = @_;
-
-       my $res = [];
-       foreach my $section (@$section_type_enum) {
-           push @$res, { section => $section };
-       }
-
-       push @$res, { section => 'ldap' };
-       push @$res, { section => 'mynetworks' };
-       push @$res, { section => 'mimetypes' };
-       push @$res, { section => 'users' };
-       push @$res, { section => 'domains' };
-       push @$res, { section => 'fetchmail' };
-       push @$res, { section => 'cluster' };
-       push @$res, { section => 'ruledb' };
-       push @$res, { section => 'transport' };
-       push @$res, { section => 'whitelist' };
-       push @$res, { section => 'regextest' };
-       push @$res, { section => 'tlspolicy' };
-
-       return $res;
-    }});
-
-my $api_read_config_section = sub {
-    my ($section) = @_;
-
-    my $cfg = PMG::Config->new();
-
-    my $data = dclone($cfg->{ids}->{$section} // {});
-    $data->{digest} = $cfg->{digest};
-    delete $data->{type};
-
-    return $data;
-};
-
-my $api_update_config_section = sub {
-   my ($section, $param) = @_;
-
-   my $code = sub {
-       my $cfg = PMG::Config->new();
-       my $ids = $cfg->{ids};
-
-       my $digest = extract_param($param, 'digest');
-       PVE::SectionConfig::assert_if_modified($cfg, $digest);
-
-       my $delete_str = extract_param($param, 'delete');
-       die "no options specified\n"
-          if !$delete_str && !scalar(keys %$param);
-
-       foreach my $opt (PVE::Tools::split_list($delete_str)) {
-          delete $ids->{$section}->{$opt};
-       }
-
-       my $plugin = PMG::Config::Base->lookup($section);
-       my $config = $plugin->check_config($section, $param, 0, 1);
-
-       foreach my $p (keys %$config) {
-          $ids->{$section}->{$p} = $config->{$p};
-       }
-
-       $cfg->write();
-
-       $cfg->rewrite_config(undef, 1);
-   };
-
-   PMG::Config::lock_config($code, "update config section '$section' failed");
-};
-
-foreach my $section (@$section_type_enum) {
-
-    my $plugin = PMG::Config::Base->lookup($section);
-
-    __PACKAGE__->register_method ({
-       name => "read_${section}_section",
-       path => $section,
-       method => 'GET',
-       proxyto => 'master',
-       permissions => { check => [ 'admin', 'audit' ] },
-       description => "Read $section configuration properties.",
-       parameters => {
-           additionalProperties => 0,
-           properties => {},
-       },
-       returns => { type => 'object' },
-       code => sub {
-           my ($param) = @_;
-
-           return $api_read_config_section->($section);
-       }});
-
-    __PACKAGE__->register_method ({
-       name => "update_${section}_section",
-       path => $section,
-       method => 'PUT',
-       proxyto => 'master',
-       protected => 1,
-       permissions => { check => [ 'admin' ] },
-       description => "Update $section configuration properties.",
-       parameters => $plugin->updateSchema(1),
-       returns => { type => 'null' },
-       code => sub {
-           my ($param) = @_;
-
-           $api_update_config_section->($section, $param);
-
-           return undef;
-       }});
-}
-
-__PACKAGE__->register_method({
-    name => 'regextest',
-    path => 'regextest',
-    method => 'POST',
-    protected => 0,
-    permissions => { check => [ 'admin', 'qmanager', 'audit' ] },
-    description => "Test Regex",
-    parameters => {
-       additionalProperties => 0,
-       properties => {
-           regex => {
-               type => 'string',
-               description => 'The Regex to test',
-               maxLength => 1024,
-           },
-           text => {
-               type => 'string',
-               description => 'The String to test',
-               maxLength => 1024,
-           }
-       },
-    },
-    returns => {
-       type => 'number',
-    },
-    code => sub {
-       my ($param) = @_;
-
-       my $text = $param->{text};
-       my $regex = $param->{regex};
-
-       my $regex_check = sub {
-           my $start_time = [Time::HiRes::gettimeofday];
-           my $match = 0;
-           if ($text =~ /$regex/) {
-               $match = 1;
-           }
-           my $elapsed = Time::HiRes::tv_interval($start_time) * 1000;
-           die "The Regular Expression '$regex' did not match the text '$text' (elapsed time: $elapsed ms)\n"
-               if !$match;
-           return $elapsed;
-       };
-
-       my $elapsed = PVE::Tools::run_fork_with_timeout(2, $regex_check);
-       if ($elapsed eq '') {
-           die "The Regular Expression timed out\n";
-       }
-
-       return $elapsed;
-    }});
-
-1;