connector.py
上传用户:ah_jiwei
上传日期:2022-07-24
资源大小:54044k
文件大小:4k
源码类别:

数据库编程

开发平台:

Visual C++

  1. #!/usr/bin/env python
  2. """
  3. FCKeditor - The text editor for Internet - http://www.fckeditor.net
  4. Copyright (C) 2003-2007 Frederico Caldeira Knabben
  5. == BEGIN LICENSE ==
  6. Licensed under the terms of any of the following licenses at your
  7. choice:
  8.  - GNU General Public License Version 2 or later (the "GPL")
  9.    http://www.gnu.org/licenses/gpl.html
  10.  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
  11.    http://www.gnu.org/licenses/lgpl.html
  12.  - Mozilla Public License Version 1.1 or later (the "MPL")
  13.    http://www.mozilla.org/MPL/MPL-1.1.html
  14. == END LICENSE ==
  15. Connector for Python (CGI and WSGI).
  16. See config.py for configuration settings
  17. """
  18. import os
  19. from fckutil import *
  20. from fckcommands import *  # default command's implementation
  21. from fckoutput import *  # base http, xml and html output mixins
  22. from fckconnector import FCKeditorConnectorBase # import base connector
  23. import config as Config
  24. class FCKeditorConnector( FCKeditorConnectorBase,
  25. GetFoldersCommandMixin,
  26. GetFoldersAndFilesCommandMixin,
  27. CreateFolderCommandMixin,
  28. UploadFileCommandMixin, 
  29. BaseHttpMixin, BaseXmlMixin, BaseHtmlMixin  ):
  30. "The Standard connector class."
  31. def doResponse(self):
  32. "Main function. Process the request, set headers and return a string as response."
  33. s = ""
  34. # Check if this connector is disabled
  35. if not(Config.Enabled):
  36. return self.sendError(1, "This connector is disabled.  Please check the connector configurations in "editor/filemanager/connectors/py/config.py" and try again.")
  37. # Make sure we have valid inputs
  38. for key in ("Command","Type","CurrentFolder"):
  39. if not self.request.has_key (key):
  40. return
  41. # Get command, resource type and current folder
  42. command = self.request.get("Command")
  43. resourceType = self.request.get("Type")
  44. currentFolder = getCurrentFolder(self.request.get("CurrentFolder"))
  45. # Check for invalid paths
  46. if currentFolder is None:
  47. return self.sendError(102, "")
  48. # Check if it is an allowed command
  49. if ( not command in Config.ConfigAllowedCommands ):
  50. return self.sendError( 1, 'The %s command isn't allowed' % command ) 
  51. if ( not resourceType in Config.ConfigAllowedTypes  ):
  52. return self.sendError( 1, 'Invalid type specified' ) 
  53. # Setup paths
  54. if command == "QuickUpload":
  55. self.userFilesFolder = Config.QuickUploadAbsolutePath[resourceType] 
  56. self.webUserFilesFolder =  Config.QuickUploadPath[resourceType]
  57. else:
  58. self.userFilesFolder = Config.FileTypesAbsolutePath[resourceType]
  59. self.webUserFilesFolder = Config.FileTypesPath[resourceType]
  60. if not self.userFilesFolder: # no absolute path given (dangerous...)
  61. self.userFilesFolder = mapServerPath(self.environ, 
  62. self.webUserFilesFolder)
  63. # Ensure that the directory exists.
  64. if not os.path.exists(self.userFilesFolder):
  65. try:
  66. self.createServerFoldercreateServerFolder( self.userFilesFolder ) 
  67. except:
  68. return self.sendError(1, "This connector couldn't access to local user's files directories.  Please check the UserFilesAbsolutePath in "editor/filemanager/connectors/py/config.py" and try again. ")
  69. # File upload doesn't have to return XML, so intercept here
  70. if (command == "FileUpload"):
  71. return self.uploadFile(resourceType, currentFolder)
  72. # Create Url
  73. url = combinePaths( self.webUserFilesFolder, currentFolder )
  74. # Begin XML
  75. s += self.createXmlHeader(command, resourceType, currentFolder, url)
  76. # Execute the command
  77. selector = {"GetFolders": self.getFolders,
  78. "GetFoldersAndFiles": self.getFoldersAndFiles,
  79. "CreateFolder": self.createFolder,
  80. }
  81. s += selector[command](resourceType, currentFolder)
  82. s += self.createXmlFooter()
  83. return s
  84. # Running from command line (plain old CGI)
  85. if __name__ == '__main__':
  86. try:
  87. # Create a Connector Instance
  88. conn = FCKeditorConnector()
  89. data = conn.doResponse()
  90. for header in conn.headers:
  91. print '%s: %s' % header
  92. print 
  93. print data
  94. except:
  95. print "Content-Type: text/plain"
  96. print
  97. import cgi
  98. cgi.print_exception()