File Coverage

blib/lib/HTML/EP/Examples/Admin.pm
Criterion Covered Total %
statement 9 91 9.8
branch 0 38 0.0
condition 0 25 0.0
subroutine 3 8 37.5
pod 0 1 0.0
total 12 163 7.3


line stmt bran cond sub pod time code
1             # -*- perl -*-
2             #
3             # HTML::EP - A Perl based HTML extension.
4             #
5             #
6             # Copyright (C) 1998 Jochen Wiedmann
7             # Am Eisteich 9
8             # 72555 Metzingen
9             # Germany
10             #
11             # Phone: +49 7123 14887
12             # Email: joe@ispsoft.de
13             #
14             # All rights reserved.
15             #
16             # You may distribute this module under the terms of either
17             # the GNU General Public License or the Artistic License, as
18             # specified in the Perl README file.
19             #
20             ############################################################################
21              
22             require 5.004;
23 1     1   1046 use strict;
  1         3  
  1         67  
24              
25 1     1   5 use HTML::EP ();
  1         2  
  1         23  
26 1     1   6 use HTML::EP::Locale ();
  1         2  
  1         1419  
27              
28             package HTML::EP::Examples::Admin;
29              
30             $HTML::EP::Examples::Admin::VERSION = '0.03';
31             @HTML::EP::Examples::Admin::ISA = qw(HTML::EP::Locale HTML::EP);
32              
33              
34             sub init {
35 0     0 0   my $self = shift;
36 0 0         if (!exists($self->{'admin_config'})) {
37 0           $self->SUPER::init();
38 0   0       $self->{'admin_config'} =
39             $self->{'_ep_config'}->{'examples'}->{'admin'} || {};
40 0   0       $self->{'admin_config'}->{'vardir'} ||= '/home/httpd/html/admin/var';
41             }
42             }
43              
44              
45             sub _prefs {
46 0     0     my $self = shift; my $prefs = shift;
  0            
47 0           my $vardir = $self->{'admin_config'}->{'vardir'};
48 0           my $prefs_file = "$vardir/prefs";
49 0 0         if (!$prefs) {
50             # Load Prefs
51 0   0       $self->{'prefs'} = (do $prefs_file) || {};
52             } else {
53             # Save Prefs
54 0           require Data::Dumper;
55 0           my $dump = Data::Dumper->new([$prefs], ['PREFS']);
56 0           $dump->Indent(1);
57 0           require Symbol;
58 0           my $fh = Symbol::gensym();
59 0           my $d = $dump->Dump();
60 0 0         if ($self->{'debug'}) {
61 0           print "Saving Preferences to $prefs_file.\n";
62 0           $self->print("Saving data:\n$d\n");
63             }
64 0 0 0       if (!open($fh, ">$prefs_file")
      0        
65             or !(print $fh "$d\n")
66             or !close($fh)) {
67 0           die "Couldn't save data: $!";
68             }
69 0           $self->{'prefs'} = $prefs;
70             }
71             }
72              
73              
74             sub _ep_html_ep_examples_admin_squid {
75 0     0     my $self = shift; my $attr = shift;
  0            
76 0           my $cgi = $self->{'cgi'};
77 0           my $prefs = $self->_prefs();
78 0           my $debug = $self->{'debug'};
79              
80             my $verify_squid_range = sub {
81 0     0     my($from, $to, $active, $name) = @_;
82              
83 0           require Socket;
84 0           my($f, $t);
85 0 0         if (!($f = Socket::inet_aton($from))) {
86 0           die "Invalid IP address: $from";
87             }
88 0 0         if (!($t = Socket::inet_aton($to))) {
89 0           die "Invalid IP address: $to";
90             }
91             {
92 0           'from' => Socket::inet_ntoa($f),
93             'to' => Socket::inet_ntoa($t),
94             'active' => $active,
95             'name' => $name
96             }
97 0           };
98              
99 0           my @range;
100             my $modified;
101 0           my $from = $cgi->param('insert_ip_from');
102 0           my $to = $cgi->param('insert_ip_to');
103 0 0 0       if ($from or $to) {
104 0           push(@range,
105             &$verify_squid_range($from, $to, $cgi->param("insert_active"),
106             $cgi->param("insert_name")));
107 0           $modified = 1;
108             }
109 0           for (my $i = 0; 1; $i++) {
110 0 0         if ($cgi->param("delete_ip_$i")) {
111 0           $modified = 1;
112 0           next;
113             }
114 0           $from = $cgi->param("edit_ip_from_$i");
115 0           $to = $cgi->param("edit_ip_to_$i");
116 0 0 0       if (!defined($from) && !defined($to)) {
117 0           last;
118             }
119 0           push(@range,
120             &$verify_squid_range($from, $to, $cgi->param("edit_active_$i"),
121             $cgi->param("edit_name_$i")));
122 0           $modified = 1;
123             }
124              
125 0 0         if ($modified) {
126 0 0         $self->print("Modifications detected.\n") if $debug;
127 0           $prefs->{'squid_ranges'} = \@range;
128 0           $self->_prefs($prefs);
129 0 0 0       my $path_users_modified =
130             ($attr->{'users-modified-path'} ||
131             $self->{'admin_config'}->{'users_modified_path'})
132             or die "Path of usersModified binary not set";
133 0 0         if ($path_users_modified ne 'none') {
134 0 0         die "No such binary: $path_users_modified"
135             unless -f $path_users_modified;
136 0           my @command = ($path_users_modified, '--squid');
137 0           foreach my $r (@range) {
138 0 0         next unless $r->{'active'};
139 0           push(@command,
140             "--range", "$r->{'from'},$r->{'to'},$r->{'name'}");
141             }
142 0 0         $self->print("Executing command: ", join(" ", @command), "\n")
143             if $debug;
144 0           system @command;
145             }
146             } else {
147 0 0         $self->print("No modifications detected.\n") if $debug;
148 0   0       $prefs->{'squid_ranges'} ||= [];
149             }
150 0           @range = sort { $a->{name} cmp $b->{name}} @{$prefs->{'squid_ranges'}};
  0            
  0            
151 0           $self->{'ranges'} = \@range;
152 0 0         if ($debug) {
153 0           $self->print("Squid IP ranges:\n");
154 0           foreach my $r (@{$prefs->{'squid_ranges'}}) {
  0            
155 0           $self->printf(" Name %s, From %s, To %s, Active %s\n",
156             $r->{'name'}, $r->{'from'}, $r->{'to'},
157             $r->{'active'});
158             }
159             }
160              
161 0   0       $self->{'admin_config'}->{'squid_conf_path'} ||= '/etc/squid.conf';
162 0           '';
163             }
164              
165             sub _format_RANGE_SELECTED {
166 0     0     my $self = shift; my $val = shift;
  0            
167 0 0         $val ? "" : "SELECTED";
168             }