Project

General

Profile

1
<cfsetting enablecfoutputonly="Yes">
2
<!---
3
 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
4
 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
5
 *
6
 * == BEGIN LICENSE ==
7
 *
8
 * Licensed under the terms of any of the following licenses at your
9
 * choice:
10
 *
11
 *  - GNU General Public License Version 2 or later (the "GPL")
12
 *    http://www.gnu.org/licenses/gpl.html
13
 *
14
 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15
 *    http://www.gnu.org/licenses/lgpl.html
16
 *
17
 *  - Mozilla Public License Version 1.1 or later (the "MPL")
18
 *    http://www.mozilla.org/MPL/MPL-1.1.html
19
 *
20
 * == END LICENSE ==
21
 *
22
 * This file include the functions that handle the Command requests
23
 * in the ColdFusion Connector (MX 6.0 and above).
24
--->
25

    
26
<cffunction name="FileUpload" returntype="void" output="true">
27
	<cfargument name="resourceType" type="string" required="yes" default="">
28
	<cfargument name="currentFolder" type="string" required="yes" default="">
29
	<cfargument name="sCommand" type="string" required="yes" default="">
30

    
31
	<cfset var sFileName = "">
32
	<cfset var sFilePart = "">
33
	<cfset var sFileExt = "">
34
	<cfset var sFileUrl = "">
35
	<cfset var sTempDir = "">
36
	<cfset var sTempFilePath = "">
37
	<cfset var errorNumber = 0>
38
	<cfset var customMsg = "">
39
	<cfset var counter = 0>
40
	<cfset var destination = "">
41

    
42
	<cftry>
43
		<cfif isDefined( "REQUEST.Config.TempDirectory" )>
44
			<cfset sTempDir = REQUEST.Config.TempDirectory>
45
		<cfelse>
46
			<cfset sTempDir = GetTempDirectory()>
47
		</cfif>
48
		<cfif NOT DirectoryExists (sTempDir)>
49
			<cfthrow message="Invalid temporary directory: #sTempDir#">
50
		</cfif>
51

    
52
		<cffile action="UPLOAD" filefield="NewFile" destination="#sTempDir#" nameconflict="makeunique" mode="0755" />
53
		<cfset sTempFilePath = CFFILE.ServerDirectory & REQUEST.fs & CFFILE.ServerFile>
54

    
55
		<!--- Map the virtual path to the local server path. --->
56
		<cfset sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, ARGUMENTS.sCommand) >
57
		<!--- Get the uploaded file name. --->
58
		<cfset sFileName = SanitizeFileName( CFFILE.ClientFile ) >
59
		<cfset sOriginalFileName = sFileName >
60

    
61
		<cfif isDefined( "REQUEST.Config.SecureImageUploads" ) and REQUEST.Config.SecureImageUploads>
62
			<cfif not IsImageValid( sTempFilePath, CFFILE.ClientFileExt )>
63
				<cftry>
64
				<cffile action="delete" file="#sTempFilePath#">
65
				<cfcatch type="any">
66
				</cfcatch>
67
				</cftry>
68
				<cfthrow errorcode="202" type="fckeditor">
69
			</cfif>
70
		</cfif>
71

    
72
		<cfif isDefined( "REQUEST.Config.HtmlExtensions" ) and not listFindNoCase( REQUEST.Config.HtmlExtensions, CFFILE.ClientFileExt )>
73
			<cfif DetectHtml( sTempFilePath )>
74
				<cftry>
75
				<cffile action="delete" file="#sTempFilePath#">
76
				<cfcatch type="any">
77
				</cfcatch>
78
				</cftry>
79
				<cfthrow errorcode="202" type="fckeditor">
80
			</cfif>
81
		</cfif>
82

    
83
		<cfif not IsAllowedExt( CFFILE.ClientFileExt, ARGUMENTS.resourceType )>
84
			<cftry>
85
			<cffile action="delete" file="#sTempFilePath#">
86
			<cfcatch type="any">
87
			</cfcatch>
88
			</cftry>
89
			<cfthrow errorcode="202" type="fckeditor">
90
		</cfif>
91

    
92
		<!--- When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename. --->
93
		<cfscript>
94
			sFileExt = GetExtension( sFileName ) ;
95
			sFilePart = RemoveExtension( sFileName );
96
			while( fileExists( sServerDir & sFileName ) )
97
			{
98
				counter = counter + 1;
99
				sFileName = sFilePart & '(#counter#).' & CFFILE.ClientFileExt;
100
				errorNumber = 201;
101
			}
102
		</cfscript>
103

    
104
 		<cfset destination = sServerDir & sFileName>
105

    
106
		<cflock name="#destination#" timeout="30" type="Exclusive">
107
		<cftry>
108
			<cffile action="move" source="#sTempFilePath#" destination="#destination#" mode="755">
109
			<!--- omit CF 6.1 error during moving uploaded file, just copy that file instead of moving --->
110
			<cfcatch type="any">
111
				<cftry>
112
					<cffile action="copy" source="#sTempFilePath#" destination="#destination#" mode="755">
113
					<cfcatch type="any">
114
						<cfset errorNumber = 102>
115
					</cfcatch>
116
				</cftry>
117
				<cftry>
118
					<cffile action="delete" file="#sTempFilePath#">
119
					<cfcatch type="any">
120
					</cfcatch>
121
				</cftry>
122
			</cfcatch>
123
		</cftry>
124
		</cflock>
125

    
126
		<cfset sFileUrl = CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, sCommand ) , ARGUMENTS.currentFolder ) >
127
		<cfset sFileUrl = CombinePaths( sFileUrl , sFileName ) >
128

    
129
		<cfcatch type="fckeditor">
130
			<cfset errorNumber = CFCATCH.ErrorCode>
131
		</cfcatch>
132

    
133
		<cfcatch type="any">
134
			<cfset errorNumber = "1">
135
			<cfset customMsg = CFCATCH.Message >
136
		</cfcatch>
137

    
138
	</cftry>
139

    
140
	<cfset SendUploadResults( errorNumber, sFileUrl, sFileName, customMsg ) >
141
</cffunction>
142

    
143
<cffunction name="GetFolders" returntype="void" output="true">
144
	<cfargument name="resourceType" type="String" required="true">
145
	<cfargument name="currentFolder" type="String" required="true">
146

    
147
	<cfset var i = 1>
148
	<cfset var folders = "">
149
	<!--- Map the virtual path to the local server path --->
150
	<cfset var sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, "GetFolders" ) >
151

    
152
	<!--- Sort directories first, name ascending --->
153
	<cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
154
	<cfscript>
155
		while( i lte qDir.recordCount )
156
		{
157
			if( compareNoCase( qDir.type[i], "FILE" ) and not listFind( ".,..", qDir.name[i] ) )
158
			{
159
				folders = folders & '<Folder name="#HTMLEditFormat( qDir.name[i] )#" />' ;
160
			}
161
			i = i + 1;
162
		}
163
	</cfscript>
164
	<cfoutput><Folders>#folders#</Folders></cfoutput>
165
</cffunction>
166

    
167
<cffunction name="GetFoldersAndfiles" returntype="void" output="true">
168
	<cfargument name="resourceType" type="String" required="true">
169
	<cfargument name="currentFolder" type="String" required="true">
170

    
171
	<cfset var i = 1>
172
	<cfset var folders = "">
173
	<cfset var files = "">
174
	<!--- Map the virtual path to the local server path --->
175
	<cfset var sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, "GetFolders" ) >
176

    
177
	<!--- Sort directories first, name ascending --->
178
	<cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
179
	<cfscript>
180
		while( i lte qDir.recordCount )
181
		{
182
			if( not compareNoCase( qDir.type[i], "DIR" ) and not listFind( ".,..", qDir.name[i] ) )
183
			{
184
				folders = folders & '<Folder name="#HTMLEditFormat(qDir.name[i])#" />' ;
185
			}
186
			else if( not compareNoCase( qDir.type[i], "FILE" ) )
187
			{
188
				fileSizeKB = round(qDir.size[i] / 1024) ;
189
				files = files & '<File name="#HTMLEditFormat(qDir.name[i])#" size="#IIf( fileSizeKB GT 0, DE( fileSizeKB ), 1)#" />' ;
190
			}
191
			i = i + 1 ;
192
		}
193
	</cfscript>
194
	<cfoutput><Folders>#folders#</Folders></cfoutput>
195
	<cfoutput><Files>#files#</Files></cfoutput>
196
</cffunction>
197

    
198
<cffunction name="CreateFolder" returntype="void" output="true">
199
	<cfargument name="resourceType" required="true" type="string">
200
	<cfargument name="currentFolder" required="true" type="string">
201

    
202
	<cfset var sNewFolderName = url.newFolderName >
203
	<cfset var sServerDir = "" >
204
	<cfset var errorNumber = 0>
205
	<cfset var sErrorMsg = "">
206
	<cfset var currentFolderPath = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, 'CreateFolder' )>
207

    
208
	<cfparam name="url.newFolderName" default="">
209

    
210
	<cfscript>
211
		sNewFolderName = SanitizeFolderName( sNewFolderName ) ;
212
	</cfscript>
213

    
214
	<cfif not len( sNewFolderName ) or len( sNewFolderName ) gt 255>
215
		<cfset errorNumber = 102>
216
	<cfelseif directoryExists( currentFolderPath & sNewFolderName )>
217
		<cfset errorNumber = 101>
218
	<cfelseif find( "..", sNewFolderName )>
219
		<cfset errorNumber = 103>
220
	<cfelse>
221
		<cfset errorNumber = 0>
222

    
223
		<!--- Map the virtual path to the local server path of the current folder. --->
224
		<cfset sServerDir = currentFolderPath & sNewFolderName >
225

    
226
		<cftry>
227
			<cfdirectory action="create" directory="#currentFolderPath##sNewFolderName#" mode="755">
228
			<cfcatch type="any">
229
			<!---
230
				un-resolvable error numbers in ColdFusion:
231
				* 102 : Invalid folder name.
232
				* 103 : You have no permissions to create the folder.
233
			--->
234
			<cfset errorNumber = 110>
235
			</cfcatch>
236
		</cftry>
237
	</cfif>
238

    
239
	<cfoutput><Error number="#errorNumber#" /></cfoutput>
240
</cffunction>
(5-5/13)