source: sandbox/filemanager/tp/fckeditor/editor/filemanager/connectors/py/connector.py @ 1575

Revision 1575, 4.1 KB checked in by amuller, 14 years ago (diff)

Ticket #597 - Implentação, melhorias do modulo gerenciador de arquivos

  • Property svn:executable set to *
Line 
1#!/usr/bin/env python
2
3"""
4FCKeditor - The text editor for Internet - http://www.fckeditor.net
5Copyright (C) 2003-2009 Frederico Caldeira Knabben
6
7== BEGIN LICENSE ==
8
9Licensed under the terms of any of the following licenses at your
10choice:
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
23Connector for Python (CGI and WSGI).
24
25See config.py for configuration settings
26
27"""
28import os
29
30from fckutil import *
31from fckcommands import *       # default command's implementation
32from fckoutput import *         # base http, xml and html output mixins
33from fckconnector import FCKeditorConnectorBase # import base connector
34import config as Config
35
36class FCKeditorConnector(       FCKeditorConnectorBase,
37                                                        GetFoldersCommandMixin,
38                                                        GetFoldersAndFilesCommandMixin,
39                                                        CreateFolderCommandMixin,
40                                                        UploadFileCommandMixin,
41                                                        BaseHttpMixin, BaseXmlMixin, BaseHtmlMixin  ):
42        "The Standard connector class."
43        def doResponse(self):
44                "Main function. Process the request, set headers and return a string as response."
45                s = ""
46                # Check if this connector is disabled
47                if not(Config.Enabled):
48                        return self.sendError(1, "This connector is disabled.  Please check the connector configurations in \"editor/filemanager/connectors/py/config.py\" and try again.")
49                # Make sure we have valid inputs
50                for key in ("Command","Type","CurrentFolder"):
51                        if not self.request.has_key (key):
52                                return
53                # Get command, resource type and current folder
54                command = self.request.get("Command")
55                resourceType = self.request.get("Type")
56                currentFolder = getCurrentFolder(self.request.get("CurrentFolder"))
57                # Check for invalid paths
58                if currentFolder is None:
59                        if (command == "FileUpload"):
60                                return self.sendUploadResults( errorNo = 102, customMsg = "" )
61                        else:
62                                return self.sendError(102, "")
63
64                # Check if it is an allowed command
65                if ( not command in Config.ConfigAllowedCommands ):
66                        return self.sendError( 1, 'The %s command isn\'t allowed' % command )
67
68                if ( not resourceType in Config.ConfigAllowedTypes  ):
69                        return self.sendError( 1, 'Invalid type specified' )
70
71                # Setup paths
72                if command == "QuickUpload":
73                        self.userFilesFolder = Config.QuickUploadAbsolutePath[resourceType]
74                        self.webUserFilesFolder =  Config.QuickUploadPath[resourceType]
75                else:
76                        self.userFilesFolder = Config.FileTypesAbsolutePath[resourceType]
77                        self.webUserFilesFolder = Config.FileTypesPath[resourceType]
78
79                if not self.userFilesFolder: # no absolute path given (dangerous...)
80                        self.userFilesFolder = mapServerPath(self.environ,
81                                                                        self.webUserFilesFolder)
82                # Ensure that the directory exists.
83                if not os.path.exists(self.userFilesFolder):
84                        try:
85                                self.createServerFolder( self.userFilesFolder )
86                        except:
87                                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. ")
88
89                # File upload doesn't have to return XML, so intercept here
90                if (command == "FileUpload"):
91                        return self.uploadFile(resourceType, currentFolder)
92
93                # Create Url
94                url = combinePaths( self.webUserFilesFolder, currentFolder )
95
96                # Begin XML
97                s += self.createXmlHeader(command, resourceType, currentFolder, url)
98                # Execute the command
99                selector = {"GetFolders": self.getFolders,
100                                        "GetFoldersAndFiles": self.getFoldersAndFiles,
101                                        "CreateFolder": self.createFolder,
102                                        }
103                s += selector[command](resourceType, currentFolder)
104                s += self.createXmlFooter()
105                return s
106
107# Running from command line (plain old CGI)
108if __name__ == '__main__':
109        try:
110                # Create a Connector Instance
111                conn = FCKeditorConnector()
112                data = conn.doResponse()
113                for header in conn.headers:
114                        print '%s: %s' % header
115                print
116                print data
117        except:
118                print "Content-Type: text/plain"
119                print
120                import cgi
121                cgi.print_exception()
Note: See TracBrowser for help on using the repository browser.