fckutil.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. Utility functions for the File Manager Connector for Python 
  16. """
  17. import string, re
  18. import os
  19. import config as Config
  20. # Generic manipulation functions
  21. def removeExtension(fileName):
  22. index = fileName.rindex(".")
  23. newFileName = fileName[0:index]
  24. return newFileName
  25. def getExtension(fileName):
  26. index = fileName.rindex(".") + 1
  27. fileExtension = fileName[index:]
  28. return fileExtension
  29. def removeFromStart(string, char):
  30. return string.lstrip(char)
  31. def removeFromEnd(string, char):
  32. return string.rstrip(char)
  33. # Path functions
  34. def combinePaths( basePath, folder ):
  35. return removeFromEnd( basePath, '/' ) + '/' + removeFromStart( folder, '/' ) 
  36. def getFileName(filename):
  37. " Purpose: helper function to extrapolate the filename " 
  38. for splitChar in ["/", "\"]:
  39. array = filename.split(splitChar)
  40. if (len(array) > 1):
  41. filename = array[-1]
  42. return filename
  43. def sanitizeFolderName( newFolderName ):
  44. "Do a cleanup of the folder name to avoid possible problems"
  45. # Remove .  / | : ? *
  46. return re.sub( '\.|\\|\/|\||\:|\?|\*', '_', newFolderName )
  47. def sanitizeFileName( newFileName ):
  48. "Do a cleanup of the file name to avoid possible problems"
  49. # Replace dots in the name with underscores (only one dot can be there... security issue).
  50. if ( Config.ForceSingleExtension ): # remove dots
  51. newFileName = re.sub ( '/\.(?![^.]*$)/', '_', newFileName ) ;
  52. newFileName = newFileName.replace('\','/') # convert windows to unix path
  53. newFileName = os.path.basename (newFileName) # strip directories
  54. # Remove  / | : ? *
  55. return re.sub ( '/\\|\/|\||\:|\?|\*/', '_', newFileName )
  56. def getCurrentFolder(currentFolder):
  57. if not currentFolder: 
  58. currentFolder = '/' 
  59. # Check the current folder syntax (must begin and end with a slash).
  60. if (currentFolder[-1] <> "/"):
  61. currentFolder += "/"
  62. if (currentFolder[0] <> "/"):
  63. currentFolder = "/" + currentFolder
  64. # Ensure the folder path has no double-slashes
  65. while '//' in currentFolder:
  66. currentFolder = currentFolder.replace('//','/') 
  67. # Check for invalid folder paths (..)
  68. if '..' in currentFolder:
  69. return None
  70. return currentFolder 
  71. def mapServerPath( environ, url):
  72. " Emulate the asp Server.mapPath function. Given an url path return the physical directory that it corresponds to "
  73. # This isn't correct but for the moment there's no other solution
  74. # If this script is under a virtual directory or symlink it will detect the problem and stop
  75. return combinePaths( getRootPath(environ), url )
  76. def mapServerFolder(resourceTypePath, folderPath):
  77. return combinePaths ( resourceTypePath  , folderPath ) 
  78. def getRootPath(environ):
  79. "Purpose: returns the root path on the server"
  80. # WARNING: this may not be thread safe, and doesn't work w/ VirtualServer/mod_python
  81. # Use Config.UserFilesAbsolutePath instead
  82. if environ.has_key('DOCUMENT_ROOT'):
  83. return environ['DOCUMENT_ROOT']
  84. else:
  85. realPath = os.path.realpath( './' ) 
  86. selfPath = environ['SCRIPT_FILENAME']
  87. selfPath = selfPath [ :  selfPath.rfind( '/'  ) ] 
  88. selfPath = selfPath.replace( '/', os.path.sep) 
  89. position = realPath.find(selfPath) 
  90. # This can check only that this script isn't run from a virtual dir
  91. # But it avoids the problems that arise if it isn't checked
  92. raise realPath 
  93. if ( position < 0 or position <> len(realPath) - len(selfPath) or realPath[ : position ]==''):
  94. raise Exception('Sorry, can't map "UserFilesPath" to a physical path. You must set the "UserFilesAbsolutePath" value in "editor/filemanager/connectors/py/config.py".')
  95. return realPath[ : position ]