#!/usr/bin/perl -w use strict; use CGI; use IMAP::Admin; use IMAP::Sieve; print qq!Content-type: text/html\n\n!; my $cgi = new CGI; my $action = $cgi->param('action'); my $SELF = 'sieve.pl'; my $G_ERROR = 0; my $G_USER = ''; my $G_PASS = ''; my $G_SERVER = 'neuron.neuron1.com'; my $G_PROXY = ''; my $G_PORT_IMAP = 143; my $G_PORT_SIEVE = 2000; &action_login() if $action eq ''; my $imap = &try_login(); &action_list() if $action eq 'list'; &action_view() if $action eq 'view'; &action_save() if $action eq 'save'; &action_mark() if $action eq 'mark'; &action_dele() if $action eq 'dele'; &close_imap($imap); ############################################################################## sub action_login { &start_page(); print qq!

Sieve Script Admin Tool

\n!; print qq!
\n!; print qq!\n!; print qq!Username:
\n!; print qq!Password:
\n!; print qq!\n!; print qq!
\n!; &end_page(); } ############################################################################## sub action_list { my $sieve = sieve_open(); my @list = $sieve->listscripts(); sieve_close($sieve); &start_page(); print "

Your Sieve Scripts

"; &insert_button("Create a new script", "view", "new"); print qq!
\n!; print qq!!; for(@list){ my $active = 0; if (m/ ACTIVE$/){ $active = 1; s/ ACTIVE$//; } print qq!\n!; print qq!\n!; print qq!\n!; print qq!\n!; if ($active){ print qq!\n!; }else{ print qq!\n!; } print qq!\n!; } print qq!
$_!; &insert_button("Edit", "view", $_); print qq!!; &insert_button("Delete", "dele", $_, "Are you sure you want tot delete this script?"); print qq!Currently Active!; &insert_button("Set As Active", "mark", $_); print qq!
\n!; &end_page(); } ############################################################################## sub action_view { my $sieve = sieve_open(); my $script = $cgi->param('script'); my $source = $sieve->getscript($script); sieve_close($sieve); &start_page(); print "

Edit Sieve Script: $script

"; print qq!
\n!; print qq!\n!; print qq!\n!; print qq!\n!; print qq!\n!; print qq!Script name: !; print qq!\n!; print qq!
\n!; &end_page(); } ############################################################################## sub action_save { my $sieve = &sieve_open(); my $script = $cgi->param('script'); my $source = $cgi->param('source'); $sieve->putscript($script, $source); &sieve_geterror($sieve); &sieve_close($sieve); &start_page(); print qq!

Save Script

\n!; if ($G_ERROR){ print qq!There was an error saving your script:
\n!; print qq!
\n!; print qq!
\n!; print qq!
$G_ERROR
\n!; print qq!
\n!; print qq!
\n!; print qq!Click here to go back and try again.
\n!; print qq!
\n!; print qq!Note: Script syntax MUST be correct - this is probably why the save has failed.
\n!; }else{ print qq!Your script has been saved.

\n!; &insert_button("Return To Menu", "list", ""); } &end_page(); } ############################################################################## sub action_mark { my $sieve = &sieve_open(); my $script = $cgi->param('script'); $sieve->setactive($script); &sieve_close($sieve); &start_page(); print qq!

Activate Script: $script

!; print qq!The script $script has been marked as active.

\n!; &insert_button("Return To Menu", "list", ""); &end_page(); } ############################################################################## sub action_dele { my $sieve = sieve_open(); my $script = $cgi->param('script'); my $source = $sieve->deletescript($script); sieve_close($sieve); &start_page(); print "

Delete Sieve Script: $script

"; print qq!The script $script has been deleted.

\n!; &insert_button("Return To Menu", "list", ""); &end_page(); } ############################################################################## sub sieve_open { my $sieve = IMAP::Sieve->new( 'Proxy' => $G_PROXY, 'Port' => $G_PORT_SIEVE, 'Server' => $G_SERVER, 'Login' => $G_USER, 'Password' => $G_PASS ); return 0 if &sieve_geterror($sieve); return $sieve; } sub sieve_close { my ($sieve) = @_; $sieve->close(); } sub sieve_geterror { my ($sieve) = @_; my $err = $sieve->{'Error'}; if ($err) { return 0 if $err =~/No Errors/i; $G_ERROR = $err; return 1; } return 0; } ############################################################################## sub start_page { print qq!\n!; print qq!\n!; print qq!Sieve Admin Tool\n!; print qq!\n!; print qq!\n!; print qq!\n!; if ($G_USER){ print qq!Logged in as $G_USER. Logout
\n
\n!; } } sub end_page { print qq!\n!; print qq!\n!; } ############################################################################## sub insert_button { my ($caption, $action, $script, $confirm) = @_; if ($confirm){ print qq!
\n!; }else{ print qq!\n!; } print qq!\n!; print qq!\n!; print qq!\n!; print qq!\n!; print qq!\n!; print qq!
\n!; } ############################################################################## sub try_login { $G_USER = $cgi->param('user'); $G_PASS = $cgi->param('pass'); my $imap = IMAP::Admin->new( 'Server' => $G_SERVER, 'Login' => $G_USER, 'Password' => $G_PASS, 'Port' => $G_PORT_IMAP, 'Separator' => '.' ); &failed_login() if (&sieve_geterror($imap)); return $imap; } ############################################################################## sub close_imap { my ($imap) = @_; $imap->close(); } ############################################################################## sub failed_login { $G_USER = ''; $G_PASS = ''; &start_page; print qq!

Login Failed

\n!; print qq!Your login failed with the following message:
\n!; print qq!
\n!; print qq!
\n!; print qq!
$G_ERROR
\n!; print qq!
\n!; print qq!
\n!; print qq!Click here to go back and try again.
\n!; &end_page; exit; } ############################################################################## 1;