File Coverage

blib/lib/Wizard/Examples/Apache/Directory.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             # -*- perl -*-
2              
3 1     1   716 use strict;
  1         3  
  1         35  
4              
5 1     1   5 use Wizard::State ();
  1         2  
  1         15  
6 1     1   37 use Wizard::SaveAble ();
  0            
  0            
7             use Wizard::Examples::Apache ();
8             use Wizard::Examples::Apache::Host ();
9             use Wizard::Examples::Apache::Server ();
10             use Wizard::Examples::Apache::VirtualServer ();
11             use Wizard::Examples::Apache::Config ();
12              
13              
14             package Wizard::Examples::Apache::Directory;
15              
16             @Wizard::Examples::Apache::Directory::ISA = qw(Wizard::Examples::Apache::VirtualServer);
17             $Wizard::Examples::Apache::Directory::VERSION = '0.01';
18              
19              
20             sub createDefault {
21             my $self = shift || die "Missing state";
22             my $sbasedir = shift || die "Missing basedir of virtualserver";
23             my $name = '_';
24              
25             my $dirc = bless({'apache-directory-name' => $name,
26             'apache-directory-pathname' => '/',
27             'apache-directory-user' => 'www',
28             'apache-directory-group' => 'www',
29             'apache-directory-isdefault' => 1},
30             'Wizard::SaveAble');
31             my $file = File::Spec->catfile($sbasedir, "$name.cfg");
32             my $dir = File::Spec->catdir($sbasedir, $name);
33             File::Path::mkpath([$dir],0, 0777);
34             die "Couldn't create directory $dir: $!" unless -d $dir;
35             $dirc->CreateMe(1);
36             $dirc->File($file);
37             $dirc->Modified(1);
38             $self->{'directory'} = $dirc;
39             }
40              
41             sub GetKey { 'directory'; };
42              
43             sub init {
44             my $self = shift;
45             return $self->SUPER::init(1) unless shift;
46             my $item = $self->{'directory'} || die "Missing directory";
47             ($self->SUPER::init(1), $item);
48             }
49              
50             sub _superFileDir {
51             Wizard::Examples::Apache::Host::getFileDir(shift, shift,
52             'Wizard::Examples::Apache::VirtualServer');
53             }
54              
55             sub ShowMe {
56             my ($self, $wiz, $dir) = @_;
57             (['Wizard::Elem::Title',
58             'value' => $dir->CreateMe() ?
59             'Apache Wizard: Create directory configuration' :
60             'Apache Wizard: Edit an existing directory configuration'],
61             ['Wizard::Elem::Text', 'name' => 'apache-directory-pathname',
62             'value' => $dir->{'apache-directory-pathname'} || '/tmp',
63             'descr' => 'Directory pathname (root is the virtualserver root)'],
64             ['Wizard::Elem::Text', 'name' => 'apache-directory-redirecturl',
65             'value' => $dir->{'apache-directory-redirecturl'} || '',
66             'descr' => 'Directory redirect url (if any)' ],
67             ['Wizard::Elem::Text', 'name' => 'apache-directory-user',
68             'value' => $dir->{'apache-directory-user'} || 'www',
69             'descr' => 'User who owns that directory'],
70             ['Wizard::Elem::Text', 'name' => 'apache-directory-group',
71             'value' => $dir->{'apache-directory-group'} || 'www',
72             'descr' => 'Group that owns that directory'],
73             ['Wizard::Elem::BR'],
74             ['Wizard::Elem::Submit', 'name' => 'Action_DirectorySave',
75             'value' => 'Save these settings', 'id' => 1],
76             ['Wizard::Elem::Submit', 'value' => 'Return to Directory Menu',
77             'name' => 'Wizard::Examples::Apache::VirtualServer::Action_Reset',
78             'id' => 94],
79             ['Wizard::Elem::Submit', 'value' => 'Return to Virtual WWW Server Menu',
80             'name' => 'Wizard::Examples::Apache::VirtualServer::Action_Reset',
81             'id' => 95],
82             ['Wizard::Elem::Submit', 'value' => 'Return to Server Menu',
83             'name' => 'Wizard::Examples::Apache::Server::Action_Reset',
84             'id' => 96],
85             ['Wizard::Elem::Submit', 'value' => 'Return to Host Menu',
86             'name' => 'Wizard::Examples::Apache::Host::Action_Reset',
87             'id' => 97],
88             ['Wizard::Elem::Submit', 'value' => 'Return to Top Menu',
89             'name' => 'Wizard::Examples::Apache::Action_Reset',
90             'id' => 98],
91             ['Wizard::Elem::Submit', 'value' => 'Exit Apache Wizard',
92             'id' => 99]);
93              
94             }
95              
96             sub Action_Enter {
97             my($self, $wiz) = @_;
98             $self->SUPER::Load($wiz, 'Wizard::Examples::Apache::VirtualServer');
99             $self->Action_Reset($wiz);
100             }
101              
102             sub Action_Reset {
103             my($self, $wiz) = @_;
104             my($prefs, $basedir, $host, $server, $vserver) = $self->init();
105            
106             delete $self->{'directory'};
107             $self->Store($wiz);
108             (['Wizard::Elem::Title', 'value' => 'Apache Wizard Directory Configuration Menu'],
109             ['Wizard::Elem::Submit', 'value' => 'Create a new Directory Config.',
110             'name' => 'Action_CreateDirectory',
111             'id' => 1],
112             ['Wizard::Elem::Submit', 'value' => 'Modify an existing Directory Config.',
113             'name' => 'Action_ModifyDirectory',
114             'id' => 2],
115             # ['Wizard::Elem::Submit', 'value' => 'Manage password protection of directories.',
116             # 'name' => 'Action_DirectoryMenu',
117             # 'id' => 3],
118             ['Wizard::Elem::Submit', 'value' => 'Delete an existing directory Config.',
119             'name' => 'Action_DeleteDirectory',
120             'id' => 4],
121             ['Wizard::Elem::BR'],
122             ['Wizard::Elem::Submit', 'value' => 'Return to Virtual WWW Server Menu',
123             'name' => 'Wizard::Examples::Apache::VirtualServer::Action_Reset',
124             'id' => 95],
125             ['Wizard::Elem::Submit', 'value' => 'Return to Server Menu',
126             'name' => 'Wizard::Examples::Apache::Server::Action_Reset',
127             'id' => 96],
128             ['Wizard::Elem::Submit', 'value' => 'Return to Host Menu',
129             'name' => 'Wizard::Examples::Apache::Host::Action_Reset',
130             'id' => 97],
131             ['Wizard::Elem::Submit', 'value' => 'Return to Top Menu',
132             'name' => 'Wizard::Examples::Apache::Action_Reset',
133             'id' => 98],
134             ['Wizard::Elem::Submit', 'value' => 'Exit Apache Wizard',
135             'id' => 99]);
136             }
137              
138             *Action_CreateDirectory = \&Wizard::Examples::Apache::Host::Action_CreateItem;
139              
140             sub Action_DirectorySave {
141             my($self, $wiz) = @_;
142             my ($prefs, $basedir, $host, $server, $vserver, $dirc) = $self->init(1);
143            
144             my $old_name = $dirc->{'apache-directory-name'};
145             foreach my $opt ($wiz->param()) {
146             $dirc->{$opt} = $wiz->param($opt)
147             if (($opt =~ /^apache\-directory/) && (defined($wiz->param($opt))));
148             }
149              
150             # Verify the settings
151             my $errors = '';
152             my $pname = $dirc->{'apache-directory-pathname'} || die "Missing directory pathname";
153             my $redirect = $dirc->{'apache-directory-redirecturl'};
154             my $name = $pname;
155             $name =~ s/\//\_/g;
156             $dirc->{'apache-directory-name'} = $name;
157             my $user='';
158             if ($redirect) {
159             $user = $dirc->{'apache-directory-user'}
160             || die "Missing user.\n" ;
161             }
162             my ($file, $dir, $odir) = $self->getFileDir();
163             if($dirc->CreateMe() or $old_name ne $name) {
164             $errors .= "A directory $pname already exists: $file.\n" if -e $file;
165             $errors .= "A directory $pname already exists: $dir.\n" if -e $dir;
166             }
167             die $errors if $errors;
168              
169             if(!$dirc->CreateMe() and $name ne $old_name) {
170             my $old_file = File::Spec->catfile($odir, "$old_name.cfg");
171             my $old_dir = File::Spec->catdir($odir, $old_name);
172             rename($old_file, $file)
173             or die "Failed to rename $old_file to $file: $!";
174             rename($old_dir, $dir)
175             or die "Failed to rename $old_dir to $dir: $!";
176             }
177             $dirc->File($file);
178             if ($dirc->CreateMe()) {
179             File::Path::mkpath([$dir], 0, 0777);
180             die "Couldn't create directory $dir" unless -d $dir;
181             }
182             $dirc->Modified(1);
183             $self->Store($wiz, 1);
184             $self->Action_Reset($wiz);
185             }
186              
187             sub Action_EditDirectory {
188             my($self, $wiz) = @_;
189             my $name = $wiz->param('apache-directory') || die "Missing directory name";
190             $name =~ s/\//\_/g;
191             $wiz->param('apache-directory', $name);
192             $self->Action_EditItem($wiz);
193             }
194              
195             sub ItemList {
196             my $self = shift; my $basedir = shift;
197             my $fh = Symbol::gensym();
198             opendir($fh, $basedir) || die "Failed to open directory $basedir: $!";
199             my @items = map { if((/^(.*)\.cfg$/ and
200             -f File::Spec->catfile($basedir, $_))) {
201             $a = $1; $a =~ s/\_/\//g;
202             $a;
203             } else {
204             ();
205             }
206             } readdir($fh);
207             closedir($fh);
208             @items;
209             }
210              
211              
212             sub Action_ModifyDirectory {
213             shift->Action_ModifyItem(shift, shift || 'Modify Directory configuration',
214             shift || 'Action_EditDirectory',
215             'Directory configuration');
216             }
217              
218             sub Action_DeleteDirectory {
219             shift->Action_ModifyServer(shift, 'Delete this directory',
220             'Action_DeleteDirectory2');
221             }
222              
223             sub Action_DeleteDirectory2 {
224             my($self, $wiz) = @_;
225             my ($prefs, $basedir, $host, $server, $vserver) = $self->init();
226             my $name = $wiz->param('apache-directory') || die "Missing directory name";
227             $name =~ s/\//\_/g;
228             $wiz->param('apache-directory', $name);
229             $self->Load($wiz);
230             my $dirc = $self->{'dir'};
231             my ($file, $dir) = $self->getFileDir();
232              
233             if ($dirc->{'apache-directory-isdefault'}) {
234             return (['Wizard::Elem::Data', 'descr' => 'ERROR: ',
235             'value' => 'Root directory can not be deleted'],
236             $self->Action_Reset($wiz));
237             }
238              
239             (['Wizard::Elem::Title', 'value' => 'Deleting an Apache Directory configuration'],
240             ['Wizard::Elem::Data', 'descr' => 'Directory path',
241             'value' => $dirc->{'apache-directory-pathname'}],
242             ['Wizard::Elem::Data', 'descr' => 'Directory owning user',
243             'value' => $dirc->{'apache-directory-user'}],
244             ['Wizard::Elem::Data', 'descr' => 'Server root',
245             'value' => $dirc->{'apache-server-root'}],
246             ['Wizard::Elem::Data', 'descr' => 'Directory owning group',
247             'value' => $dirc->{'apache-directory-group'}],
248             ['Wizard::Elem::Submit', 'value' => 'Yes, delete it',
249             'id' => 1, 'name' => 'Action_DeleteDirectory3'],
250             (-d $dir ? ['Wizard::Elem::Submit',
251             'value' => 'Yes, delete it, including data directory',
252             'id' => 2, 'name' => 'Action_DeleteDirectory4'] : ()),
253             ['Wizard::Elem::BR'],
254             ['Wizard::Elem::Submit', 'value' => 'Return to Directory Menu',
255             'name' => 'Wizard::Examples::Apache::VirtualServer::Action_Reset',
256             'id' => 94],
257             ['Wizard::Elem::Submit', 'value' => 'Return to Virtual WWW Server Menu',
258             'name' => 'Wizard::Examples::Apache::VirtualServer::Action_Reset',
259             'id' => 95],
260             ['Wizard::Elem::Submit', 'value' => 'Return to Server Menu',
261             'name' => 'Wizard::Examples::Apache::Server::Action_Reset',
262             'id' => 96],
263             ['Wizard::Elem::Submit', 'value' => 'Return to Host Menu',
264             'name' => 'Wizard::Examples::Apache::Host::Action_Reset',
265             'id' => 97],
266             ['Wizard::Elem::Submit', 'value' => 'Return to Top Menu',
267             'name' => 'Wizard::Examples::Apache::Action_Reset',
268             'id' => 98],
269             ['Wizard::Elem::Submit', 'value' => 'Exit Apache Wizard',
270             'id' => 99]);
271             }
272              
273             sub Action_DeleteDirectory3 {
274             my($self, $wiz) = @_;
275             $self->DeleteItem($wiz);
276             $self->Action_Reset($wiz);
277             }
278              
279             sub Action_DeleteDirectory4 {
280             my($self, $wiz) = @_;
281             $self->DeleteItem($wiz,1);
282             $self->Action_Reset($wiz);
283             }
284              
285