]>
git.proxmox.com Git - pmg-api.git/blob - src/PMG/API2/SpamAssassin.pm
eab02d9707b081402644f532dba691385a24bcca
1 package PMG
::API2
::SpamAssassin
;
9 use PVE
::Exception
qw(raise_param_exc);
11 use PMG
::RESTEnvironment
;
12 use PVE
::JSONSchema
qw(get_standard_option);
17 use Mail
::SpamAssassin
;
19 use base
qw(PVE::RESTHandler);
21 my $SAUPDATE = '/usr/bin/sa-update';
23 __PACKAGE__-
>register_method ({
27 description
=> "Directory index.",
28 permissions
=> { check
=> [ 'admin', 'audit' ] },
30 additionalProperties
=> 0,
32 node
=> get_standard_option
('pve-node'),
41 links
=> [ { rel
=> 'child', href
=> "{subdir}" } ],
48 push @$res, { subdir
=> "rules" };
53 __PACKAGE__-
>register_method({
54 name
=> 'rules_status',
57 description
=> "SpamAssassin rules status.",
58 permissions
=> { check
=> [ 'admin', 'audit' ] },
61 additionalProperties
=> 0,
63 node
=> get_standard_option
('pve-node'),
71 channel
=> { type
=> 'string' },
72 update_avail
=> { type
=> 'boolean' },
73 version
=> { type
=> 'string', optional
=> 1 },
74 last_updated
=> { type
=> 'integer', optional
=> 1},
75 update_version
=> { type
=> 'string', optional
=> 1},
82 my $saversion = $Mail::SpamAssassin
::VERSION
;
83 my $channelfile = "/var/lib/spamassassin/$saversion/updates_spamassassin_org.cf";
89 if (-f
$channelfile) {
90 # stat metadata cf file
91 $mtime = (stat($channelfile))[9]; # 9 is mtime
93 # parse version from metadata cf file
94 my $metadata = PVE
::Tools
::file_read_firstline
($channelfile);
95 if ($metadata =~ m/\s([0-9]+)$/) {
98 warn "invalid metadata in '$channelfile'\n";
101 # call sa-update to see if updates are available
103 my $cmd = "$SAUPDATE -v --checkonly";
104 PVE
::Tools
::run_command
($cmd, noerr
=> 1, logfunc
=> sub {
107 if ($line =~ m/Update available for channel \S+: -?[0-9]+ -> ([0-9]+)/) {
113 channel
=> 'updates.spamassassin.org',
116 $result->{version
} = $version if $version > -1;
117 $result->{update_version
} = $newversion if $newversion > -1;
118 $result->{last_updated
} = $mtime if $mtime > -1;
120 if ($newversion > $version) {
121 $result->{update_avail
} = 1;
123 $result->{update_avail
} = 0;
129 __PACKAGE__-
>register_method({
130 name
=> 'update_rules',
133 description
=> "Update SpamAssassin rules.",
135 permissions
=> { check
=> [ 'admin' ] },
138 additionalProperties
=> 0,
140 node
=> get_standard_option
('pve-node'),
143 returns
=> { type
=> 'string' },
147 my $rpcenv = PMG
::RESTEnvironment-
>get();
148 my $authuser = $rpcenv->get_user();
153 # setup proxy env (assume sa-update use http)
154 my $pmg_cfg = PMG
::Config-
>new();
155 if (my $http_proxy = $pmg_cfg->get('admin', 'http_proxy')) {
156 $ENV{http_proxy
} = $http_proxy;
159 my $cmd = "$SAUPDATE -v";
161 PVE
::Tools
::run_command
($cmd, noerr
=> 1);
164 return $rpcenv->fork_worker('saupdate', undef, $authuser, $realcmd);