1
|
<%
|
2
|
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
3
|
' Copyright (C) 2003-2009 Frederico Caldeira Knabben
|
4
|
'
|
5
|
' == BEGIN LICENSE ==
|
6
|
'
|
7
|
' Licensed under the terms of any of the following licenses at your
|
8
|
' choice:
|
9
|
'
|
10
|
' - GNU General Public License Version 2 or later (the "GPL")
|
11
|
' http://www.gnu.org/licenses/gpl.html
|
12
|
'
|
13
|
' - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
14
|
' http://www.gnu.org/licenses/lgpl.html
|
15
|
'
|
16
|
' - Mozilla Public License Version 1.1 or later (the "MPL")
|
17
|
' http://www.mozilla.org/MPL/MPL-1.1.html
|
18
|
'
|
19
|
' == END LICENSE ==
|
20
|
'
|
21
|
' This file include IO specific functions used by the ASP Connector.
|
22
|
%>
|
23
|
<%
|
24
|
function CombinePaths( sBasePath, sFolder)
|
25
|
sFolder = replace(sFolder, "\", "/")
|
26
|
CombinePaths = RemoveFromEnd( sBasePath, "/" ) & "/" & RemoveFromStart( sFolder, "/" )
|
27
|
end function
|
28
|
|
29
|
function CombineLocalPaths( sBasePath, sFolder)
|
30
|
sFolder = replace(sFolder, "/", "\")
|
31
|
' The RemoveFrom* functions use RegExp, so we must escape the \
|
32
|
CombineLocalPaths = RemoveFromEnd( sBasePath, "\\" ) & "\" & RemoveFromStart( sFolder, "\\" )
|
33
|
end function
|
34
|
|
35
|
Function GetResourceTypePath( resourceType, sCommand )
|
36
|
if ( sCommand = "QuickUpload") then
|
37
|
GetResourceTypePath = ConfigQuickUploadPath.Item( resourceType )
|
38
|
else
|
39
|
GetResourceTypePath = ConfigFileTypesPath.Item( resourceType )
|
40
|
end if
|
41
|
end Function
|
42
|
|
43
|
Function GetResourceTypeDirectory( resourceType, sCommand )
|
44
|
if ( sCommand = "QuickUpload") then
|
45
|
|
46
|
if ( ConfigQuickUploadAbsolutePath.Item( resourceType ) <> "" ) then
|
47
|
GetResourceTypeDirectory = ConfigQuickUploadAbsolutePath.Item( resourceType )
|
48
|
else
|
49
|
' Map the "UserFiles" path to a local directory.
|
50
|
GetResourceTypeDirectory = Server.MapPath( ConfigQuickUploadPath.Item( resourceType ) )
|
51
|
end if
|
52
|
else
|
53
|
if ( ConfigFileTypesAbsolutePath.Item( resourceType ) <> "" ) then
|
54
|
GetResourceTypeDirectory = ConfigFileTypesAbsolutePath.Item( resourceType )
|
55
|
else
|
56
|
' Map the "UserFiles" path to a local directory.
|
57
|
GetResourceTypeDirectory = Server.MapPath( ConfigFileTypesPath.Item( resourceType ) )
|
58
|
end if
|
59
|
end if
|
60
|
end Function
|
61
|
|
62
|
Function GetUrlFromPath( resourceType, folderPath, sCommand )
|
63
|
GetUrlFromPath = CombinePaths( GetResourceTypePath( resourceType, sCommand ), folderPath )
|
64
|
End Function
|
65
|
|
66
|
Function RemoveExtension( fileName )
|
67
|
RemoveExtension = Left( fileName, InStrRev( fileName, "." ) - 1 )
|
68
|
End Function
|
69
|
|
70
|
Function ServerMapFolder( resourceType, folderPath, sCommand )
|
71
|
Dim sResourceTypePath
|
72
|
' Get the resource type directory.
|
73
|
sResourceTypePath = GetResourceTypeDirectory( resourceType, sCommand )
|
74
|
|
75
|
' Ensure that the directory exists.
|
76
|
CreateServerFolder sResourceTypePath
|
77
|
|
78
|
' Return the resource type directory combined with the required path.
|
79
|
ServerMapFolder = CombineLocalPaths( sResourceTypePath, folderPath )
|
80
|
End Function
|
81
|
|
82
|
Sub CreateServerFolder( folderPath )
|
83
|
Dim oFSO
|
84
|
Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
|
85
|
|
86
|
Dim sParent
|
87
|
sParent = oFSO.GetParentFolderName( folderPath )
|
88
|
|
89
|
' If folderPath is a network path (\\server\folder\) then sParent is an empty string.
|
90
|
' Get out.
|
91
|
if (sParent = "") then exit sub
|
92
|
|
93
|
' Check if the parent exists, or create it.
|
94
|
If ( NOT oFSO.FolderExists( sParent ) ) Then CreateServerFolder( sParent )
|
95
|
|
96
|
If ( oFSO.FolderExists( folderPath ) = False ) Then
|
97
|
On Error resume next
|
98
|
oFSO.CreateFolder( folderPath )
|
99
|
|
100
|
if err.number<>0 then
|
101
|
dim sErrorNumber
|
102
|
Dim iErrNumber, sErrDescription
|
103
|
iErrNumber = err.number
|
104
|
sErrDescription = err.Description
|
105
|
|
106
|
On Error Goto 0
|
107
|
|
108
|
Select Case iErrNumber
|
109
|
Case 52
|
110
|
sErrorNumber = "102" ' Invalid Folder Name.
|
111
|
Case 70
|
112
|
sErrorNumber = "103" ' Security Error.
|
113
|
Case 76
|
114
|
sErrorNumber = "102" ' Path too long.
|
115
|
Case Else
|
116
|
sErrorNumber = "110"
|
117
|
End Select
|
118
|
|
119
|
SendError sErrorNumber, "CreateServerFolder(" & folderPath & ") : " & sErrDescription
|
120
|
end if
|
121
|
|
122
|
End If
|
123
|
|
124
|
Set oFSO = Nothing
|
125
|
End Sub
|
126
|
|
127
|
Function IsAllowedExt( extension, resourceType )
|
128
|
Dim oRE
|
129
|
Set oRE = New RegExp
|
130
|
oRE.IgnoreCase = True
|
131
|
oRE.Global = True
|
132
|
|
133
|
Dim sAllowed, sDenied
|
134
|
sAllowed = ConfigAllowedExtensions.Item( resourceType )
|
135
|
sDenied = ConfigDeniedExtensions.Item( resourceType )
|
136
|
|
137
|
IsAllowedExt = True
|
138
|
|
139
|
If sDenied <> "" Then
|
140
|
oRE.Pattern = sDenied
|
141
|
IsAllowedExt = Not oRE.Test( extension )
|
142
|
End If
|
143
|
|
144
|
If IsAllowedExt And sAllowed <> "" Then
|
145
|
oRE.Pattern = sAllowed
|
146
|
IsAllowedExt = oRE.Test( extension )
|
147
|
End If
|
148
|
|
149
|
Set oRE = Nothing
|
150
|
End Function
|
151
|
|
152
|
Function IsAllowedType( resourceType )
|
153
|
Dim oRE
|
154
|
Set oRE = New RegExp
|
155
|
oRE.IgnoreCase = False
|
156
|
oRE.Global = True
|
157
|
oRE.Pattern = "^(" & ConfigAllowedTypes & ")$"
|
158
|
|
159
|
IsAllowedType = oRE.Test( resourceType )
|
160
|
|
161
|
Set oRE = Nothing
|
162
|
End Function
|
163
|
|
164
|
Function IsAllowedCommand( sCommand )
|
165
|
Dim oRE
|
166
|
Set oRE = New RegExp
|
167
|
oRE.IgnoreCase = True
|
168
|
oRE.Global = True
|
169
|
oRE.Pattern = "^(" & ConfigAllowedCommands & ")$"
|
170
|
|
171
|
IsAllowedCommand = oRE.Test( sCommand )
|
172
|
|
173
|
Set oRE = Nothing
|
174
|
End Function
|
175
|
|
176
|
function GetCurrentFolder()
|
177
|
dim sCurrentFolder
|
178
|
dim oRegex
|
179
|
|
180
|
sCurrentFolder = Request.QueryString("CurrentFolder")
|
181
|
If ( sCurrentFolder = "" ) Then sCurrentFolder = "/"
|
182
|
|
183
|
' Check the current folder syntax (must begin and start with a slash).
|
184
|
If ( Right( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = sCurrentFolder & "/"
|
185
|
If ( Left( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = "/" & sCurrentFolder
|
186
|
|
187
|
' Check for invalid folder paths (..)
|
188
|
If ( InStr( 1, sCurrentFolder, ".." ) <> 0 OR InStr( 1, sCurrentFolder, "\" ) <> 0) Then
|
189
|
SendError 102, ""
|
190
|
End If
|
191
|
|
192
|
Set oRegex = New RegExp
|
193
|
oRegex.Global = True
|
194
|
oRegex.Pattern = "(/\.)|(//)|([\\:\*\?\""\<\>\|]|[\u0000-\u001F]|\u007F)"
|
195
|
|
196
|
if (oRegex.Test(sCurrentFolder)) Then
|
197
|
SendError 102, ""
|
198
|
End If
|
199
|
|
200
|
GetCurrentFolder = sCurrentFolder
|
201
|
end function
|
202
|
|
203
|
' Do a cleanup of the folder name to avoid possible problems
|
204
|
function SanitizeFolderName( sNewFolderName )
|
205
|
Dim oRegex
|
206
|
Set oRegex = New RegExp
|
207
|
oRegex.Global = True
|
208
|
|
209
|
' remove . \ / | : ? * " < > and control characters
|
210
|
oRegex.Pattern = "(\.|\\|\/|\||:|\?|\*|""|\<|\>|[\u0000-\u001F]|\u007F)"
|
211
|
SanitizeFolderName = oRegex.Replace( sNewFolderName, "_" )
|
212
|
|
213
|
Set oRegex = Nothing
|
214
|
end function
|
215
|
|
216
|
' Do a cleanup of the file name to avoid possible problems
|
217
|
function SanitizeFileName( sNewFileName )
|
218
|
Dim oRegex
|
219
|
Set oRegex = New RegExp
|
220
|
oRegex.Global = True
|
221
|
|
222
|
if ( ConfigForceSingleExtension = True ) then
|
223
|
oRegex.Pattern = "\.(?![^.]*$)"
|
224
|
sNewFileName = oRegex.Replace( sNewFileName, "_" )
|
225
|
end if
|
226
|
|
227
|
' remove \ / | : ? * " < > and control characters
|
228
|
oRegex.Pattern = "(\\|\/|\||:|\?|\*|""|\<|\>|[\u0000-\u001F]|\u007F)"
|
229
|
SanitizeFileName = oRegex.Replace( sNewFileName, "_" )
|
230
|
|
231
|
Set oRegex = Nothing
|
232
|
end function
|
233
|
|
234
|
' This is the function that sends the results of the uploading process.
|
235
|
Sub SendUploadResults( errorNumber, fileUrl, fileName, customMsg )
|
236
|
Response.Clear
|
237
|
Response.Write "<script type=""text/javascript"">"
|
238
|
' Minified version of the document.domain automatic fix script (#1919).
|
239
|
' The original script can be found at _dev/domain_fix_template.js
|
240
|
Response.Write "(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;}}})();"
|
241
|
|
242
|
Response.Write "window.parent.OnUploadCompleted(" & errorNumber & ",""" & Replace( fileUrl, """", "\""" ) & """,""" & Replace( fileName, """", "\""" ) & """,""" & Replace( customMsg , """", "\""" ) & """) ;"
|
243
|
Response.Write "</script>"
|
244
|
Response.End
|
245
|
End Sub
|
246
|
|
247
|
%>
|