From 89269f652fc46e65006b9aead5eb1ae61ebc311e Mon Sep 17 00:00:00 2001
From: pcanterino <>
Date: Wed, 8 Oct 2003 11:47:51 +0000
Subject: [PATCH 1/1] Dev-Editor 1.0
---
devedit.pl | 76 +++++++++++++++++------
modules/Command.pm | 147 +++++++++++++++++++++++++++++++++++----------
modules/Output.pm | 6 +-
modules/Tool.pm | 42 ++++++-------
4 files changed, 194 insertions(+), 77 deletions(-)
diff --git a/devedit.pl b/devedit.pl
index 42e1d40..6f38e38 100644
--- a/devedit.pl
+++ b/devedit.pl
@@ -6,12 +6,15 @@
# Dev-Editor's main program
#
# Author: Patrick Canterino
-# Last modified: 09-22-2003
+# Last modified: 10-04-2003
#
use strict;
use CGI::Carp qw(fatalsToBrowser);
+use vars qw($VERSION
+ %config);
+
use lib 'modules';
use CGI;
@@ -20,17 +23,18 @@ use File::UseList;
use Output;
use Tool;
-our $VERSION = '0.7';
+$VERSION = '1.0';
### Settings ###
-our %config = (
- fileroot => 'D:/Server/WWW/Root',
- httproot => '/',
- uselist_file => 'uselist',
- lock_file => 'uselist.lock',
- lock_timeout => '10'
- );
+%config = (
+ fileroot => 'D:/Server/WWW/dokumente',
+ httproot => '/',
+ timeformat => '%d.%m.%Y %H:%M',
+ uselist_file => 'uselist',
+ lock_file => 'uselist.lock',
+ lock_timeout => '10'
+ );
### End Settings ###
@@ -40,6 +44,44 @@ my $cgi = new CGI;
my $command = $cgi->param('command') || 'show';
my $file = $cgi->param('file') || '/';
+my $curdir = $cgi->param('curdir') || '';
+my $newfile = $cgi->param('newfile') || '';
+
+# Create physical and virtual path for the new file
+# This section has to be optimized - ugh!
+
+my $new_physical = '';
+my $new_virtual = '';
+
+if($newfile ne '')
+{
+ $curdir = upper_path($file) if($curdir eq '');
+ my $path = clean_path($curdir.$newfile);
+
+ # Extract file and directory name...
+
+ my $file = file_name($path);
+ my $dir = upper_path($path);
+
+ # ... check if the directory exists ...
+
+ unless(-d clean_path($config{'fileroot'}."/".$dir))
+ {
+ abort("The directory where you want to create this file or directory doesn't exist.");
+ }
+
+ # ... and check if the path is above the root directory
+
+ unless(($new_physical,$new_virtual) = check_path($config{'fileroot'},$dir))
+ {
+ abort("You aren't allowed to create files and directories above the virtual root directory.");
+ }
+
+ # Create the physical and the virtual path
+
+ $new_physical = File::Spec->canonpath($new_physical."/".$file);
+ $new_virtual .= $file;
+}
# This check has to be performed first, or abs_path() will be confused
@@ -53,11 +95,11 @@ if(-e clean_path($config{'fileroot'}."/".$file))
'beginedit' => \&exec_beginedit,
'canceledit' => \&exec_unlock,
'endedit' => \&exec_endedit,
- # 'mkdir' => \&exec_mkdir,
- # 'mkfile' => \&exec_mkfile,
+ 'mkdir' => \&exec_mkdir,
+ 'mkfile' => \&exec_mkfile,
'workwithfile' => \&exec_workwithfile,
- # 'copy' => \&exec_copy,
- # 'rename' => \&exec_rename,
+ 'copy' => \&exec_copy,
+ 'rename' => \&exec_rename,
'remove' => \&exec_remove,
'unlock' => \&exec_unlock
);
@@ -68,16 +110,16 @@ if(-e clean_path($config{'fileroot'}."/".$file))
lockfile => $config{'lock_file'},
timeout => $config{'lock_timeout'});
- $uselist->lock or abort("Locking failed. Try it again in a moment. If the problem persists, ask someone to recreate the lockfile ($config{'lock_file'}).");
+ $uselist->lock or abort("Locking of $config{'uselist_file'} failed. Try it again in a moment. If the problem persists, ask someone to recreate the lock file ($config{'lock_file'}).");
$uselist->load;
# Create a hash with data submitted by user
- # (the CGI and the File::UseList objects will also be included)
+ # (the CGI and the File::UseList object will also be included)
my %data = (physical => $physical,
virtual => $virtual,
- new_physical => '',
- new_virtual => '',
+ new_physical => $new_physical,
+ new_virtual => $new_virtual,
uselist => $uselist,
cgi => $cgi);
diff --git a/modules/Command.pm b/modules/Command.pm
index 6aa3fc1..363cffe 100644
--- a/modules/Command.pm
+++ b/modules/Command.pm
@@ -6,7 +6,7 @@ package Command;
# Execute Dev-Editor's commands
#
# Author: Patrick Canterino
-# Last modified: 09-25-2003
+# Last modified: 10-04-2003
#
use strict;
@@ -14,8 +14,7 @@ use strict;
use vars qw(@EXPORT
$script);
-use CGI qw(header
- redirect);
+use CGI qw(redirect);
use File::Access;
use File::Copy;
@@ -86,7 +85,7 @@ sub exec_show($$$)
$output .= "../\n";
}
- # Get the longest file/directory name
+ # Get the length of the longest file/directory name
my $max_name_len = 0;
@@ -104,7 +103,7 @@ sub exec_show($$$)
$output .= " ";
$output .= "[SUBDIR] ";
- $output .= strftime("%d.%m.%Y %H:%M",localtime($stat[9]));
+ $output .= strftime($config->{'timeformat'},localtime($stat[9]));
$output .= " " x 10;
$output .= "".encode_entities($dir)."/\n";
}
@@ -122,7 +121,7 @@ sub exec_show($$$)
$output .= " " x (10 - length($stat[7]));
$output .= $stat[7];
$output .= " ";
- $output .= strftime("%d.%m.%Y %H:%M",localtime($stat[9]));
+ $output .= strftime($config->{'timeformat'},localtime($stat[9]));
$output .= ($in_use) ? " (IN USE) " : (not -T $phys_path) ? " (BINARY) " : " " x 10;
$output .= encode_entities($file);
$output .= " " x ($max_name_len - length($file))."\t (";
@@ -148,12 +147,20 @@ sub exec_show($$$)
$output .= <
+
Create new file:
-
$virtual
+
@@ -192,7 +199,7 @@ END
}
}
- return \$output
+ return \$output;
}
# exec_beginedit
@@ -229,30 +236,33 @@ sub exec_beginedit($$)
$uselist->add_file($virtual);
$uselist->save;
- my $dir = upper_path($virtual);
- my $content = encode_entities(${file_read($physical)});
+ my $dir = upper_path($virtual);
+ my $content = encode_entities(${file_read($physical)});
- my $output = htmlhead("Edit file ".encode_entities($virtual));
- $output .= equal_url($config->{'httproot'},$virtual);
+ my $equal_url = equal_url($config->{'httproot'},$virtual);
- $virtual = encode_entities($virtual);
+ $virtual = encode_entities($virtual);
+ my $output = htmlhead("Edit file $virtual");
+ $output .= $equal_url;
$output .= <Caution! This file is locked for other users while you are editing it. To unlock it, click Save and exit or Exit WITHOUT saving. Please don't click the Reload button in your browser! This will confuse the editor.