<cfsetting enablecfoutputonly="Yes">
|
<!---
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
* Copyright (C) 2003-2009 Frederico Caldeira Knabben
|
*
|
* == BEGIN LICENSE ==
|
*
|
* Licensed under the terms of any of the following licenses at your
|
* choice:
|
*
|
* - GNU General Public License Version 2 or later (the "GPL")
|
* http://www.gnu.org/licenses/gpl.html
|
*
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
* http://www.gnu.org/licenses/lgpl.html
|
*
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
*
|
* == END LICENSE ==
|
*
|
* This file include IO specific functions used by the ColdFusion Connector (MX 6.0 and above).
|
*
|
--->
|
|
<cffunction name="CombinePaths" returntype="String" output="true">
|
<cfargument name="sBasePath" required="true">
|
<cfargument name="sFolder" required="true">
|
<cfset sBasePath = RemoveFromEnd( sBasePath, "/" )>
|
<cfset sBasePath = RemoveFromEnd( sBasePath, "\" )>
|
<cfreturn sBasePath & "/" & RemoveFromStart( ARGUMENTS.sFolder, '/' )>
|
</cffunction>
|
|
<cffunction name="GetResourceTypePath" returntype="String" output="false">
|
<cfargument name="resourceType" required="true">
|
<cfargument name="sCommand" required="true">
|
|
<cfif ARGUMENTS.sCommand eq "QuickUpload">
|
<cfreturn REQUEST.Config['QuickUploadPath'][ARGUMENTS.resourceType]>
|
<cfelse>
|
<cfreturn REQUEST.Config['FileTypesPath'][ARGUMENTS.resourceType]>
|
</cfif>
|
</cffunction>
|
|
<cffunction name="GetResourceTypeDirectory" returntype="String" output="false">
|
<cfargument name="resourceType" required="true">
|
<cfargument name="sCommand" required="true">
|
|
<cfif ARGUMENTS.sCommand eq "QuickUpload">
|
<cfif isDefined( "REQUEST.Config.QuickUploadAbsolutePath" )
|
and structkeyexists( REQUEST.Config.QuickUploadAbsolutePath, ARGUMENTS.resourceType )
|
and Len( REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType] )>
|
<cfreturn REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType]>
|
</cfif>
|
|
<cfreturn expandpath( REQUEST.Config.QuickUploadPath[ARGUMENTS.resourceType] )>
|
<cfelse>
|
<cfif isDefined( "REQUEST.Config.FileTypesAbsolutePath" )
|
and structkeyexists( REQUEST.Config.FileTypesAbsolutePath, ARGUMENTS.resourceType )
|
and Len( REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType] )>
|
<cfreturn REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType]>
|
</cfif>
|
|
<cfreturn expandpath( REQUEST.Config.FileTypesPath[ARGUMENTS.resourceType] )>
|
</cfif>
|
</cffunction>
|
|
<cffunction name="GetUrlFromPath" returntype="String" output="false">
|
<cfargument name="resourceType" required="true">
|
<cfargument name="folderPath" required="true">
|
<cfargument name="sCommand" required="true">
|
|
<cfreturn CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, ARGUMENTS.sCommand ), ARGUMENTS.folderPath )>
|
</cffunction>
|
|
<cffunction name="RemoveExtension" output="false" returntype="String">
|
<cfargument name="fileName" required="true">
|
<cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
|
|
<cfreturn mid( ARGUMENTS.fileName, 1, Len( ARGUMENTS.fileName ) - pos ) >
|
</cffunction>
|
|
<cffunction name="GetExtension" output="false" returntype="String">
|
<cfargument name="fileName" required="true">
|
<cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
|
|
<cfif not pos>
|
<cfreturn "">
|
</cfif>
|
|
<cfreturn mid( ARGUMENTS.fileName, pos, Len( ARGUMENTS.fileName ) - pos ) >
|
</cffunction>
|
|
<cffunction name="ServerMapFolder" returntype="String" output="false">
|
<cfargument name="resourceType" required="true">
|
<cfargument name="folderPath" required="true">
|
<cfargument name="sCommand" required="true">
|
|
<!--- Get the resource type directory. --->
|
<cfset var sResourceTypePath = GetResourceTypeDirectory( ARGUMENTS.resourceType, ARGUMENTS.sCommand ) >
|
<!--- Ensure that the directory exists. --->
|
<cfset var sErrorMsg = CreateServerFolder( sResourceTypePath ) >
|
|
<cfif sErrorMsg neq ''>
|
<cfset SendError( 1, 'Error creating folder "' & sResourceTypePath & '" (' & sErrorMsg & ')' )>
|
</cfif>
|
|
<!--- Return the resource type directory combined with the required path. --->
|
<cfreturn CombinePaths( sResourceTypePath , ARGUMENTS.folderPath )>
|
</cffunction>
|
|
<cffunction name="GetParentFolder" returntype="string" output="false">
|
<cfargument name="folderPath" required="true">
|
|
<cfreturn rereplace(ARGUMENTS.folderPath, "[/\\\\][^/\\\\]+[/\\\\]?$", "")>
|
</cffunction>
|
|
<cffunction name="CreateServerFolder" returntype="String" output="false">
|
<cfargument name="folderPath">
|
|
<!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
|
<cfset folderPath = rereplace(ARGUMENTS.folderPath, "//+", "/", "all")>
|
|
<cfif directoryexists(ARGUMENTS.folderPath) or fileexists(ARGUMENTS.folderPath)>
|
<cfreturn "">
|
<cfelse>
|
<cftry>
|
<cfdirectory action="create" mode="0755" directory="#ARGUMENTS.folderPath#">
|
<cfcatch type="any">
|
<cfreturn CFCATCH.Message>
|
</cfcatch>
|
</cftry>
|
</cfif>
|
|
<cfreturn "">
|
</cffunction>
|
|
<cffunction name="IsAllowedExt" returntype="boolean" output="false">
|
<cfargument name="sExtension" required="true">
|
<cfargument name="resourceType" required="true">
|
|
<cfif isDefined( "REQUEST.Config.AllowedExtensions." & ARGUMENTS.resourceType )
|
and listLen( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType] )
|
and not listFindNoCase( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
|
<cfreturn false>
|
</cfif>
|
|
<cfif isDefined( "REQUEST.Config.DeniedExtensions." & ARGUMENTS.resourceType )
|
and listLen( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType] )
|
and listFindNoCase( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
|
<cfreturn false>
|
</cfif>
|
|
<cfreturn true>
|
</cffunction>
|
|
<cffunction name="IsAllowedType" returntype="boolean" output="false">
|
<cfargument name="resourceType">
|
|
<cfif not listFindNoCase( REQUEST.Config.ConfigAllowedTypes, ARGUMENTS.resourceType )>
|
<cfreturn false>
|
</cfif>
|
|
<cfreturn true>
|
</cffunction>
|
|
<cffunction name="IsAllowedCommand" returntype="boolean" output="true">
|
<cfargument name="sCommand" required="true" type="String">
|
|
<cfif not listFindNoCase( REQUEST.Config.ConfigAllowedCommands, ARGUMENTS.sCommand )>
|
<cfreturn false>
|
</cfif>
|
|
<cfreturn true>
|
</cffunction>
|
|
<cffunction name="GetCurrentFolder" returntype="String" output="true">
|
<cfset var sCurrentFolder = "/">
|
|
<cfif isDefined( "URL.CurrentFolder" )>
|
<cfset sCurrentFolder = URL.CurrentFolder>
|
</cfif>
|
|
<!--- Check the current folder syntax (must begin and start with a slash). --->
|
<cfif not refind( "/$", sCurrentFolder)>
|
<cfset sCurrentFolder = sCurrentFolder & "/">
|
</cfif>
|
|
<cfif not refind( "^/", sCurrentFolder )>
|
<cfset sCurrentFolder = "/" & sCurrentFolder>
|
</cfif>
|
|
<!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
|
<cfset sCurrentFolder = rereplace( sCurrentFolder, "//+", "/", "all" )>
|
|
<cfif find( "..", sCurrentFolder) or find( "\", sCurrentFolder) or REFind('(/\.)|(//)|[[:cntrl:]]|([\\:\*\?\"<>])', sCurrentFolder)>
|
<cfif URL.Command eq "FileUpload" or URL.Command eq "QuickUpload">
|
<cfset SendUploadResults( 102, "", "", "") >
|
<cfelse>
|
<cfset SendError( 102, "" )>
|
</cfif>
|
</cfif>
|
|
<cfreturn sCurrentFolder>
|
</cffunction>
|
|
<cffunction name="SanitizeFolderName" returntype="String" output="false">
|
<cfargument name="sNewFolderName" required="true">
|
|
<!--- Do a cleanup of the folder name to avoid possible problems --->
|
<!--- Remove . \ / | : ? * " < > and control characters --->
|
<cfset sNewFolderName = rereplace( sNewFolderName, '\.+|\\+|\/+|\|+|\:+|\?+|\*+|"+|<+|>+|[[:cntrl:]]+', "_", "all" )>
|
|
<cfreturn sNewFolderName>
|
</cffunction>
|
|
<cffunction name="BinaryFileRead" returntype="String" output="true">
|
<cfargument name="fileName" required="true" type="string">
|
<cfargument name="bytes" required="true" type="Numeric">
|
|
<cfscript>
|
var chunk = "";
|
var fileReaderClass = "";
|
var fileReader = "";
|
var file = "";
|
var done = false;
|
var counter = 0;
|
var byteArray = "";
|
|
if( not fileExists( ARGUMENTS.fileName ) )
|
{
|
return "" ;
|
}
|
|
if (REQUEST.CFVersion gte 8)
|
{
|
file = FileOpen( ARGUMENTS.fileName, "readbinary" ) ;
|
byteArray = FileRead( file, 1024 ) ;
|
chunk = toString( toBinary( toBase64( byteArray ) ) ) ;
|
FileClose( file ) ;
|
}
|
else
|
{
|
fileReaderClass = createObject("java", "java.io.FileInputStream");
|
fileReader = fileReaderClass.init(fileName);
|
|
while(not done)
|
{
|
char = fileReader.read();
|
counter = counter + 1;
|
if ( char eq -1 or counter eq ARGUMENTS.bytes)
|
{
|
done = true;
|
}
|
else
|
{
|
chunk = chunk & chr(char) ;
|
}
|
}
|
}
|
</cfscript>
|
|
<cfreturn chunk>
|
</cffunction>
|
|
<cffunction name="SendUploadResults" returntype="String" output="true">
|
<cfargument name="errorNumber" required="true" type="Numeric">
|
<cfargument name="fileUrl" required="false" type="String" default="">
|
<cfargument name="fileName" required="false" type="String" default="">
|
<cfargument name="customMsg" required="false" type="String" default="">
|
|
<cfif errorNumber and errorNumber neq 201>
|
<cfset fileUrl = "">
|
<cfset fileName = "">
|
</cfif>
|
<!--- Minified version of the document.domain automatic fix script (#1919).
|
The original script can be found at _dev/domain_fix_template.js --->
|
<cfoutput>
|
<script type="text/javascript">
|
(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
|
window.parent.OnUploadCompleted( #errorNumber#, "#JSStringFormat(fileUrl)#", "#JSStringFormat(fileName)#", "#JSStringFormat(customMsg)#" );
|
</script>
|
</cfoutput>
|
<cfabort>
|
</cffunction>
|
|
<cffunction name="SanitizeFileName" returntype="String" output="false">
|
<cfargument name="sNewFileName" required="true">
|
|
<cfif isDefined("REQUEST.Config.ForceSingleExtension") and REQUEST.Config.ForceSingleExtension>
|
<cfset sNewFileName = rereplace( sNewFileName, '\.(?![^.]*$)', "_", "all" )>
|
</cfif>
|
|
<!--- Do a cleanup of the file name to avoid possible problems --->
|
<!--- Remove \ / | : ? * " < > and control characters --->
|
<cfset sNewFileName = rereplace( sNewFileName, '\\[.]+|\\+|\/+|\|+|\:+|\?+|\*+|"+|<+|>+|[[:cntrl:]]+', "_", "all" )>
|
|
<cfreturn sNewFileName>
|
</cffunction>
|