PageRenderTime 25ms CodeModel.GetById 17ms app.highlight 3ms RepoModel.GetById 1ms app.codeStats 0ms

/source/Plug-in/fck/editor/filemanager/connectors/cfm/cf_io.cfm

http://prosporous.googlecode.com/
ColdFusion | 288 lines | 264 code | 1 blank | 23 comment | 0 complexity | acb47dbf9c913df33648f97fcf9bf361 MD5 | raw file
  1<cfsetting enablecfoutputonly="Yes">
  2<!---
  3 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  4 * Copyright (C) 2003-2007 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 IO specific functions used by the ColdFusion Connector (MX 6.0 and above).
 23 *
 24--->
 25
 26<cffunction name="CombinePaths" returntype="String" output="true">
 27	<cfargument name="sBasePath" required="true">
 28	<cfargument name="sFolder" required="true">
 29	<cfset sBasePath = RemoveFromEnd( sBasePath, "/" )>
 30	<cfset sBasePath = RemoveFromEnd( sBasePath, "\" )>
 31	<cfreturn sBasePath & "/" & RemoveFromStart( ARGUMENTS.sFolder, '/' )>
 32</cffunction>
 33
 34<cffunction name="GetResourceTypePath" returntype="String" output="false">
 35	<cfargument name="resourceType" required="true">
 36	<cfargument name="sCommand" required="true">
 37
 38	<cfif ARGUMENTS.sCommand eq "QuickUpload">
 39		<cfreturn REQUEST.Config['QuickUploadPath'][ARGUMENTS.resourceType]>
 40	<cfelse>
 41		<cfreturn REQUEST.Config['FileTypesPath'][ARGUMENTS.resourceType]>
 42	</cfif>
 43</cffunction>
 44
 45<cffunction name="GetResourceTypeDirectory" returntype="String" output="false">
 46	<cfargument name="resourceType" required="true">
 47	<cfargument name="sCommand" required="true">
 48
 49	<cfif ARGUMENTS.sCommand eq "QuickUpload">
 50		<cfif isDefined( "REQUEST.Config.QuickUploadAbsolutePath" )
 51			and structkeyexists( REQUEST.Config.QuickUploadAbsolutePath, ARGUMENTS.resourceType )
 52			and Len( REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType] )>
 53				<cfreturn REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType]>
 54		</cfif>
 55
 56		<cfreturn expandpath( REQUEST.Config.QuickUploadPath[ARGUMENTS.resourceType] )>
 57	<cfelse>
 58		<cfif isDefined( "REQUEST.Config.FileTypesAbsolutePath" )
 59			and structkeyexists( REQUEST.Config.FileTypesAbsolutePath, ARGUMENTS.resourceType )
 60			and Len( REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType] )>
 61				<cfreturn REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType]>
 62		</cfif>
 63
 64		<cfreturn expandpath( REQUEST.Config.FileTypesPath[ARGUMENTS.resourceType] )>
 65	</cfif>
 66</cffunction>
 67
 68<cffunction name="GetUrlFromPath" returntype="String" output="false">
 69	<cfargument name="resourceType" required="true">
 70	<cfargument name="folderPath" required="true">
 71	<cfargument name="sCommand" required="true">
 72
 73	<cfreturn CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, ARGUMENTS.sCommand ), ARGUMENTS.folderPath )>
 74</cffunction>
 75
 76<cffunction name="RemoveExtension" output="false" returntype="String">
 77	<cfargument name="fileName" required="true">
 78	<cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
 79
 80	<cfreturn mid( ARGUMENTS.fileName, 1, Len( ARGUMENTS.fileName ) - pos ) >
 81</cffunction>
 82
 83<cffunction name="GetExtension" output="false" returntype="String">
 84	<cfargument name="fileName" required="true">
 85	<cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
 86
 87	<cfif not pos>
 88		<cfreturn "">
 89	</cfif>
 90
 91	<cfreturn mid( ARGUMENTS.fileName, pos, Len( ARGUMENTS.fileName ) - pos ) >
 92</cffunction>
 93
 94<cffunction name="ServerMapFolder" returntype="String" output="false">
 95	<cfargument name="resourceType" required="true">
 96	<cfargument name="folderPath" required="true">
 97	<cfargument name="sCommand" required="true">
 98
 99	<!--- Get the resource type directory. --->
100	<cfset var sResourceTypePath = GetResourceTypeDirectory( ARGUMENTS.resourceType, ARGUMENTS.sCommand ) >
101	<!--- Ensure that the directory exists. --->
102	<cfset var sErrorMsg = CreateServerFolder( sResourceTypePath ) >
103
104	<cfif sErrorMsg neq ''>
105		<cfset SendError( 1, 'Error creating folder "' & sResourceTypePath & '" (' & sErrorMsg & ')' )>
106	</cfif>
107
108	<!--- Return the resource type directory combined with the required path. --->
109	<cfreturn CombinePaths( sResourceTypePath , ARGUMENTS.folderPath )>
110</cffunction>
111
112<cffunction name="GetParentFolder" returntype="string" output="false">
113	<cfargument name="folderPath" required="true">
114
115	<cfreturn rereplace(ARGUMENTS.folderPath, "[/\\\\][^/\\\\]+[/\\\\]?$", "")>
116</cffunction>
117
118<cffunction name="CreateServerFolder" returntype="String" output="false">
119	<cfargument name="folderPath">
120
121	<!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
122	<cfset folderPath = rereplace(ARGUMENTS.folderPath, "//+", "/", "all")>
123
124	<cfif directoryexists(ARGUMENTS.folderPath) or fileexists(ARGUMENTS.folderPath)>
125		<cfreturn "">
126	<cfelse>
127		<cftry>
128			<cfdirectory action="create" mode="0755" directory="#ARGUMENTS.folderPath#">
129		<cfcatch type="any">
130			<cfreturn CFCATCH.Message>
131		</cfcatch>
132		</cftry>
133	</cfif>
134
135	<cfreturn "">
136</cffunction>
137
138<cffunction name="IsAllowedExt" returntype="boolean" output="false">
139	<cfargument name="sExtension" required="true">
140	<cfargument name="resourceType" required="true">
141
142	<cfif isDefined( "REQUEST.Config.AllowedExtensions." & ARGUMENTS.resourceType )
143			and listLen( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType] )
144			and not listFindNoCase( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
145			<cfreturn false>
146	</cfif>
147
148	<cfif isDefined( "REQUEST.Config.DeniedExtensions." & ARGUMENTS.resourceType )
149			and listLen( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType] )
150			and listFindNoCase( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
151			<cfreturn false>
152	</cfif>
153
154	<cfreturn true>
155</cffunction>
156
157<cffunction name="IsAllowedType" returntype="boolean" output="false">
158	<cfargument name="resourceType">
159
160	<cfif not listFindNoCase( REQUEST.Config.ConfigAllowedTypes, ARGUMENTS.resourceType )>
161		<cfreturn false>
162	</cfif>
163
164	<cfreturn true>
165</cffunction>
166
167<cffunction name="IsAllowedCommand" returntype="boolean" output="true">
168	<cfargument name="sCommand" required="true" type="String">
169
170	<cfif not listFindNoCase( REQUEST.Config.ConfigAllowedCommands, ARGUMENTS.sCommand )>
171		<cfreturn false>
172	</cfif>
173
174	<cfreturn true>
175</cffunction>
176
177<cffunction name="GetCurrentFolder" returntype="String" output="false">
178	<cfset var sCurrentFolder = "/">
179
180	<cfif isDefined( "URL.CurrentFolder" )>
181		<cfset sCurrentFolder = URL.CurrentFolder>
182	</cfif>
183
184	<!--- Check the current folder syntax (must begin and start with a slash). --->
185	<cfif not refind( "/$", sCurrentFolder)>
186		<cfset sCurrentFolder = sCurrentFolder & "/">
187	</cfif>
188
189	<cfif not refind( "^/", sCurrentFolder )>
190		<cfset sCurrentFolder = "/" & sCurrentFolder>
191	</cfif>
192
193	<!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
194	<cfset sCurrentFolder = rereplace( sCurrentFolder, "//+", "/", "all" )>
195
196	<cfif find( "..", sCurrentFolder)>
197		<cfset SendError( 102, "" )>
198	</cfif>
199
200	<cfreturn sCurrentFolder>
201</cffunction>
202
203<cffunction name="SanitizeFolderName" returntype="String" output="false">
204	<cfargument name="sNewFolderName" required="true">
205
206	<!--- Do a cleanup of the folder name to avoid possible problems --->
207	<!--- Remove . \ / | : ? * " < > --->
208	<cfset sNewFolderName = rereplace( sNewFolderName, '\.+|\\+|\/+|\|+|\:+|\?+|\*+|"+|<+|>+', "_", "all" )>
209
210	<cfreturn sNewFolderName>
211</cffunction>
212
213<cffunction name="BinaryFileRead" returntype="String" output="true">
214	<cfargument name="fileName" required="true" type="string">
215	<cfargument name="bytes" required="true" type="Numeric">
216
217	<cfscript>
218	var chunk = "";
219	var fileReaderClass = "";
220	var fileReader = "";
221	var file = "";
222	var done = false;
223	var counter = 0;
224	var byteArray = "";
225
226	if( not fileExists( ARGUMENTS.fileName ) )
227	{
228		return "" ;
229	}
230
231	if (REQUEST.CFVersion gte 8)
232	{
233		 file  = FileOpen( ARGUMENTS.fileName, "readbinary" ) ;
234		 byteArray = FileRead( file, 1024 ) ;
235		 chunk = toString( toBinary( toBase64( byteArray ) ) ) ;
236		 FileClose( file ) ;
237	}
238	else
239	{
240		fileReaderClass = createObject("java", "java.io.FileInputStream");
241		fileReader = fileReaderClass.init(fileName);
242
243		while(not done)
244		{
245			char = fileReader.read();
246			counter = counter + 1;
247			if ( char eq -1 or counter eq ARGUMENTS.bytes)
248			{
249				done = true;
250			}
251			else
252			{
253				chunk = chunk & chr(char) ;
254			}
255		}
256	}
257	</cfscript>
258
259	<cfreturn chunk>
260</cffunction>
261
262<cffunction name="SendUploadResults" returntype="String" output="true">
263	<cfargument name="errorNumber" required="true" type="Numeric">
264	<cfargument name="fileUrl" required="false" type="String" default="">
265	<cfargument name="fileName" required="false" type="String" default="">
266	<cfargument name="customMsg" required="false" type="String" default="">
267
268	<cfoutput>
269		<script type="text/javascript">
270			window.parent.OnUploadCompleted( #errorNumber#, "#JSStringFormat(fileUrl)#", "#JSStringFormat(fileName)#", "#JSStringFormat(customMsg)#" );
271		</script>
272	</cfoutput>
273	<cfabort>
274</cffunction>
275
276<cffunction name="SanitizeFileName" returntype="String" output="false">
277	<cfargument name="sNewFileName" required="true">
278
279	<cfif isDefined("REQUEST.Config.ForceSingleExtension") and REQUEST.Config.ForceSingleExtension>
280		<cfset sNewFileName = rereplace( sNewFileName, '\.(?![^.]*$)', "_", "all" )>
281	</cfif>
282
283	<!--- Do a cleanup of the file name to avoid possible problems --->
284	<!--- Remove \ / | : ? * " < > --->
285	<cfset sNewFileName = rereplace( sNewFileName, '\\[.]+|\\+|\/+|\|+|\:+|\?+|\*+|"+|<+|>+', "_", "all" )>
286
287	<cfreturn sNewFileName>
288</cffunction>