70a47607d678c6c1c3d6ff27198346d4564edf85
[clearscm.git] / maps / bin / add2nulllist.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 use FindBin;
6
7 use lib "$FindBin::Bin/../lib", '/opt/clearscm/lib';
8
9 use MAPS;
10 use MAPSLog;
11 use MAPSWeb;
12 use Display;
13
14 # Highly specialized!
15 my $userid = $ENV{USER};
16 my $Userid;
17 my $type = 'null';
18
19 die "TODO: Test this script";
20
21 sub GetItems($) {
22   my ($filename) = @_;
23
24   my @items;
25
26   open my $file, '<', $filename
27     or error "Unable to open $filename - $!", 1;
28
29   while (<$file>) {
30     my @fields = split;
31     my %item;
32
33     my @address = split /\@/, $fields[0];
34
35     $item{pattern}   = $address[0];
36     $item{domain}    = $address[1];
37     $item{comment}   = $fields[1] ? $fields[1] : '';
38     $item{hit_count} = $fields[2] ? $fields[2] : 0;
39     $item{retention} = $fields[3];
40
41     push @items, \%item;
42   } # while
43
44   close $file;
45
46   return @items;
47 } # GetItems
48
49 sub Add2List(@) {
50   my (@items) = @_;
51
52   my $item;
53
54   my $item->{sequence} = GetNextSequenceNo(
55     userid => $userid,
56     type   => $type,
57   );
58
59   $item->{userid} = $userid;
60   $item->{type}   = $type;
61
62   for $item (@items) {
63     display_nolf "Adding $item->{pattern}\@$item->{domain} ($item->{comment}) to null list ($item->{sequence})...";
64
65     last unless $item->{pattern} or $item->{domain};
66
67     $item->{sender} = CheckEmail $item->{pattern}, $item->{domain};
68
69     my ($status, $rule) = OnNulllist($item->{sender}, $userid);
70
71     if ($status == 0) {
72       display ' Already on list';
73     } else {
74       my ($message, $msg) = Add2Nulllist(%$item);
75
76       display ' done';
77
78       # Now remove this entry from the other lists (if present)
79       for my $otherlist ('white', 'black') {
80         FindList(
81           userid => $item->{userid},
82           type   => $otherlist,
83           sender => $item->{sender}
84         );
85
86         my $seq = GetList;
87
88         if ($seq->{sequence}) {
89           my $count = DeleteList(
90             userid   => $item->{userid}
91             type     => $otherlist,
92             sequence => $seq->{sequence}
93           );
94
95           display "Removed $item->{sender} from ${Userid}'s " . ucfirst $otherlist . ' list'
96             if $count > 0;
97
98           ResequenceList(
99             userid => $rec{userid},
100             type   => $otherlist,
101           );
102         } # if
103       } # for
104     } # if
105
106     $item->{sequence}++;
107   } # while
108
109   return;
110 } # Add2List
111
112 # Main
113 my $filename;
114
115 if ($ARGV[0]) {
116   $filename = $ARGV[0];
117 } else {
118   error "Must specify a filename of addresses to null list", 1;
119 } # if
120
121 SetContext($userid);
122
123 $Userid = ucfirst $userid;
124
125 Add2List(GetItems ($filename));
126
127 exit;