1
|
#!/usr/bin/env python
|
2
|
|
3
|
"""
|
4
|
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
5
|
Copyright (C) 2003-2009 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
|
Connector for Python (CGI and WSGI).
|
24
|
|
25
|
"""
|
26
|
|
27
|
from time import gmtime, strftime
|
28
|
import string
|
29
|
|
30
|
def escape(text, replace=string.replace):
|
31
|
"""
|
32
|
Converts the special characters '<', '>', and '&'.
|
33
|
|
34
|
RFC 1866 specifies that these characters be represented
|
35
|
in HTML as < > and & respectively. In Python
|
36
|
1.5 we use the new string.replace() function for speed.
|
37
|
"""
|
38
|
text = replace(text, '&', '&') # must be done 1st
|
39
|
text = replace(text, '<', '<')
|
40
|
text = replace(text, '>', '>')
|
41
|
text = replace(text, '"', '"')
|
42
|
return text
|
43
|
|
44
|
def convertToXmlAttribute(value):
|
45
|
if (value is None):
|
46
|
value = ""
|
47
|
return escape(value)
|
48
|
|
49
|
class BaseHttpMixin(object):
|
50
|
def setHttpHeaders(self, content_type='text/xml'):
|
51
|
"Purpose: to prepare the headers for the xml to return"
|
52
|
# Prevent the browser from caching the result.
|
53
|
# Date in the past
|
54
|
self.setHeader('Expires','Mon, 26 Jul 1997 05:00:00 GMT')
|
55
|
# always modified
|
56
|
self.setHeader('Last-Modified',strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime()))
|
57
|
# HTTP/1.1
|
58
|
self.setHeader('Cache-Control','no-store, no-cache, must-revalidate')
|
59
|
self.setHeader('Cache-Control','post-check=0, pre-check=0')
|
60
|
# HTTP/1.0
|
61
|
self.setHeader('Pragma','no-cache')
|
62
|
|
63
|
# Set the response format.
|
64
|
self.setHeader( 'Content-Type', content_type + '; charset=utf-8' )
|
65
|
return
|
66
|
|
67
|
class BaseXmlMixin(object):
|
68
|
def createXmlHeader(self, command, resourceType, currentFolder, url):
|
69
|
"Purpose: returns the xml header"
|
70
|
self.setHttpHeaders()
|
71
|
# Create the XML document header
|
72
|
s = """<?xml version="1.0" encoding="utf-8" ?>"""
|
73
|
# Create the main connector node
|
74
|
s += """<Connector command="%s" resourceType="%s">""" % (
|
75
|
command,
|
76
|
resourceType
|
77
|
)
|
78
|
# Add the current folder node
|
79
|
s += """<CurrentFolder path="%s" url="%s" />""" % (
|
80
|
convertToXmlAttribute(currentFolder),
|
81
|
convertToXmlAttribute(url),
|
82
|
)
|
83
|
return s
|
84
|
|
85
|
def createXmlFooter(self):
|
86
|
"Purpose: returns the xml footer"
|
87
|
return """</Connector>"""
|
88
|
|
89
|
def sendError(self, number, text):
|
90
|
"Purpose: in the event of an error, return an xml based error"
|
91
|
self.setHttpHeaders()
|
92
|
return ("""<?xml version="1.0" encoding="utf-8" ?>""" +
|
93
|
"""<Connector>""" +
|
94
|
self.sendErrorNode (number, text) +
|
95
|
"""</Connector>""" )
|
96
|
|
97
|
def sendErrorNode(self, number, text):
|
98
|
if number != 1:
|
99
|
return """<Error number="%s" />""" % (number)
|
100
|
else:
|
101
|
return """<Error number="%s" text="%s" />""" % (number, convertToXmlAttribute(text))
|
102
|
|
103
|
class BaseHtmlMixin(object):
|
104
|
def sendUploadResults( self, errorNo = 0, fileUrl = '', fileName = '', customMsg = '' ):
|
105
|
self.setHttpHeaders("text/html")
|
106
|
"This is the function that sends the results of the uploading process"
|
107
|
|
108
|
"Minified version of the document.domain automatic fix script (#1919)."
|
109
|
"The original script can be found at _dev/domain_fix_template.js"
|
110
|
return """<script type="text/javascript">
|
111
|
(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;}}})();
|
112
|
|
113
|
window.parent.OnUploadCompleted(%(errorNumber)s,"%(fileUrl)s","%(fileName)s","%(customMsg)s");
|
114
|
</script>""" % {
|
115
|
'errorNumber': errorNo,
|
116
|
'fileUrl': fileUrl.replace ('"', '\\"'),
|
117
|
'fileName': fileName.replace ( '"', '\\"' ) ,
|
118
|
'customMsg': customMsg.replace ( '"', '\\"' ),
|
119
|
}
|