]> git.proxmox.com Git - pmg-api.git/blobdiff - PMG/Ticket.pm
add support for avast virus scanner
[pmg-api.git] / PMG / Ticket.pm
index 71c40b859af8f710d7ca17ca65b71592ff8f055d..c9cf096f93d859b56bf8139b560ab4c9b0c08dd1 100644 (file)
@@ -13,6 +13,7 @@ use PVE::INotify;
 use Crypt::OpenSSL::RSA;
 
 use PMG::Utils;
+use PMG::Config;
 
 my $min_ticket_lifetime = -60*5; # allow 5 minutes time drift
 my $max_ticket_lifetime = 60*60*2; # 2 hours
@@ -131,7 +132,7 @@ PVE::INotify::register_file('auth_pub_key', $authpubkeyfn,
                            $read_rsa_pub_key, undef, undef,
                            noclone => 1);
 
-my $read_csrfr_secret = sub {
+my $read_csrf_secret = sub {
    my ($filename, $fh) = @_;
 
    local $/ = undef; # slurp mode
@@ -141,14 +142,14 @@ my $read_csrfr_secret = sub {
    return Digest::SHA::sha1_base64($input);
 };
 
-PVE::INotify::register_file('csrfr_secret', $pmg_csrf_key_fn,
-                           $read_rsa_pub_key, undef, undef,
+PVE::INotify::register_file('csrf_secret', $pmg_csrf_key_fn,
+                           $read_csrf_secret, undef, undef,
                            noclone => 1);
 
 sub verify_csrf_prevention_token {
     my ($username, $token, $noerr) = @_;
 
-    my $secret = PVE::INotify::read_file('csrfr_secret');
+    my $secret = PVE::INotify::read_file('csrf_secret');
 
     return PVE::Ticket::verify_csrf_prevention_token(
        $secret, $username, $token, $min_ticket_lifetime,
@@ -158,7 +159,7 @@ sub verify_csrf_prevention_token {
 sub assemble_csrf_prevention_token {
     my ($username) = @_;
 
-    my $secret = PVE::INotify::read_file('csrfr_secret');
+    my $secret = PVE::INotify::read_file('csrf_secret');
 
     return PVE::Ticket::assemble_csrf_prevention_token ($secret, $username);
 }
@@ -206,4 +207,42 @@ sub verify_vnc_ticket {
        $rsa_pub, 'PMGVNC', $ticket, $secret_data, -20, 40, $noerr);
 }
 
+# Note: we only encode $pmail into the ticket,
+# and add '@quarantine' in verify_quarantine_ticket()
+sub assemble_quarantine_ticket {
+    my ($pmail) = @_;
+
+    my $rsa_priv = PVE::INotify::read_file('auth_priv_key');
+
+    return PVE::Ticket::assemble_rsa_ticket($rsa_priv, 'PMGQUAR', $pmail);
+}
+
+my $quarantine_lifetime;
+
+my $get_quarantine_lifetime = sub {
+
+    return $quarantine_lifetime if defined($quarantine_lifetime);
+
+    my $cfg = PMG::Config->new();
+
+    $quarantine_lifetime = $cfg->get('spamquar', 'lifetime');
+
+    return $quarantine_lifetime;
+};
+
+sub verify_quarantine_ticket {
+    my ($ticket, $noerr) = @_;
+
+    my $rsa_pub = PVE::INotify::read_file('auth_pub_key');
+
+    my $lifetime = $get_quarantine_lifetime->();
+
+    my ($username, $age) = PVE::Ticket::verify_rsa_ticket(
+       $rsa_pub, 'PMGQUAR', $ticket, undef, -20, $lifetime*86400, $noerr);
+
+    $username = "$username\@quarantine" if defined($username);
+
+    return wantarray ? ($username, $age) : $username;
+}
+
 1;