1#!/usr/bin/env perl
2
3#####
4#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
5#  Copyright (C) 2003-2007 Frederico Caldeira Knabben
6#
7#  == BEGIN LICENSE ==
8#
9#  Licensed under the terms of any of the following licenses at your
10#  choice:
11#
12#   - GNU General Public License Version 2 or later (the "GPL")
13#     http://www.gnu.org/licenses/gpl.html
14#
15#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
16#     http://www.gnu.org/licenses/lgpl.html
17#
18#   - Mozilla Public License Version 1.1 or later (the "MPL")
19#     http://www.mozilla.org/MPL/MPL-1.1.html
20#
21#  == END LICENSE ==
22#
23#  This is the File Manager Connector for Perl.
24#####
25
26##
27# ATTENTION: To enable this connector, look for the "SECURITY" comment in this file.
28##
29
30## START: Hack for Windows (Not important to understand the editor code... Perl specific).
31if(Windows_check()) {
32	chdir(GetScriptPath($0));
33}
34
35sub Windows_check
36{
37	# IIS,PWS(NT/95)
38	$www_server_os = $^O;
39	# Win98 & NT(SP4)
40	if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
41	# AnHTTPd/Omni/IIS
42	if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
43	# Win Apache
44	if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
45	if($www_server_os=~ /win/i) { return(1); }
46	return(0);
47}
48
49sub GetScriptPath {
50	local($path) = @_;
51	if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
52	$path;
53}
54## END: Hack for IIS
55
56require 'util.pl';
57require 'io.pl';
58require 'basexml.pl';
59require 'commands.pl';
60require 'upload_fck.pl';
61
62##
63# SECURITY: REMOVE/COMMENT THE FOLLOWING LINE TO ENABLE THIS CONNECTOR.
64##
65	&SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/connectors/perl/connector.cgi" file' ) ;
66
67	&read_input();
68
69	if($FORM{'ServerPath'} ne "") {
70		$GLOBALS{'UserFilesPath'} = $FORM{'ServerPath'};
71		if(!($GLOBALS{'UserFilesPath'} =~ /\/$/)) {
72			$GLOBALS{'UserFilesPath'} .= '/' ;
73		}
74	} else {
75		$GLOBALS{'UserFilesPath'} = '/userfiles/';
76	}
77
78	# Map the "UserFiles" path to a local directory.
79	$rootpath = &GetRootPath();
80	$GLOBALS{'UserFilesDirectory'} = $rootpath . $GLOBALS{'UserFilesPath'};
81
82	&DoResponse();
83
84sub DoResponse
85{
86
87	if($FORM{'Command'} eq "" || $FORM{'Type'} eq "" || $FORM{'CurrentFolder'} eq "") {
88		return ;
89	}
90	# Get the main request informaiton.
91	$sCommand		= $FORM{'Command'};
92	$sResourceType	= $FORM{'Type'};
93	$sCurrentFolder	= $FORM{'CurrentFolder'};
94
95	# Check the current folder syntax (must begin and start with a slash).
96	if(!($sCurrentFolder =~ /\/$/)) {
97		$sCurrentFolder .= '/';
98	}
99	if(!($sCurrentFolder =~ /^\//)) {
100		$sCurrentFolder = '/' . $sCurrentFolder;
101	}
102
103	# Check for invalid folder paths (..)
104	if ( $sCurrentFolder =~ /\.\./ ) {
105		SendError( 102, "" ) ;
106	}
107
108	# File Upload doesn't have to Return XML, so it must be intercepted before anything.
109	if($sCommand eq 'FileUpload') {
110		FileUpload($sResourceType,$sCurrentFolder);
111		return ;
112	}
113
114	print << "_HTML_HEAD_";
115Content-Type:text/xml; charset=utf-8
116Pragma: no-cache
117Cache-Control: no-cache
118Expires: Thu, 01 Dec 1994 16:00:00 GMT
119
120_HTML_HEAD_
121
122	&CreateXmlHeader($sCommand,$sResourceType,$sCurrentFolder);
123
124	# Execute the required command.
125	if($sCommand eq 'GetFolders') {
126		&GetFolders($sResourceType,$sCurrentFolder);
127	} elsif($sCommand eq 'GetFoldersAndFiles') {
128		&GetFoldersAndFiles($sResourceType,$sCurrentFolder);
129	} elsif($sCommand eq 'CreateFolder') {
130		&CreateFolder($sResourceType,$sCurrentFolder);
131	}
132
133	&CreateXmlFooter();
134
135	exit ;
136}
137
138