Exemple #1
0
 def fetchReqBuff(self, key, REQUEST, forced=False):
   if REQUEST.get('ZMS_FETCH_REQ_BUFF',True):
     url = REQUEST.get('PSEUDOURL',REQUEST.get('URL','/manage'))
     url = url[url.rfind('/'):]
     if forced or not url.find('/manage') >= 0:
       buff = getReqBuff(self,REQUEST)
       reqBuffId = getReqBuffId(self,key,REQUEST)
       try:
         value = getattr(buff,reqBuffId)
         return value
       except:
         raise zExceptions.InternalError('%s not found in ReqBuff!'%reqBuffId)
   raise zExceptions.InternalError('ReqBuff is inactive!')
Exemple #2
0
 def __call__(self):
     days = self.request.form.get("days", None)
     if not days:
         raise zExceptions.InternalError(
             "Bad input. Please give days=90 as HTTP GET query parameter")
     days = int(days)
     return self.clean(days)
Exemple #3
0
 def initExportFilter(self, id, REQUEST):
   # Set environment variables.
   instance_home = standard.getINSTANCE_HOME()
   package_home = standard.getPACKAGE_HOME()
   package_home = os.path.normpath(package_home)
   REQUEST.set( 'ZMS_FILTER', True)
   REQUEST.set( 'ZMS_FILTER_INSTANCE_HOME', instance_home)
   REQUEST.set( 'ZMS_FILTER_PACKAGE_HOME', package_home)
   # Set local variables.
   ob_filter = self.getFilterManager().getFilter(id)
   ob_filter_format = ob_filter.get('format', '')
   # Create temporary folder.
   tempfolder = tempfile.mktemp()
   ressources = self.exportRessources( tempfolder, REQUEST, from_zms=ob_filter_format=='XHTML', from_home=ob_filter_format=='XHTML')
   # Export data to file.
   if ob_filter_format == 'export':
     outfilename = _fileutil.getOSPath('%s/INDEX0'%tempfolder)
   elif ob_filter_format in ['XML', 'XML_incl_embedded']:
     # Set XML.
     data = self.toXml( REQUEST)
     outfilename = _fileutil.getOSPath('%s/export.xml'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   elif ob_filter_format == 'XHTML':
     # Set XHTML.
     data = self.toXhtml( REQUEST)
     outfilename = _fileutil.getOSPath('%s/export.html'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   elif ob_filter_format == 'myXML':
     # Set myXML.
     data = self.getXmlHeader() + getattr( self, 'getObjToXml_DocElmnt')(context=self)
     outfilename = _fileutil.getOSPath('%s/export.xml'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   else:
     raise zExceptions.InternalError("Unknown format '%s'"%ob_filter.get('format', ''))
   return tempfolder, outfilename
Exemple #4
0
def importFile(self, file, REQUEST, handler):

    # Get filename.
    if isinstance(file, ZPublisher.HTTPRequest.FileUpload):
        filename = file.filename
    else:
        filename = file.name
    standard.writeBlock(self, '[importFile]: filename=' + filename)

    # Create temporary folder.
    folder = tempfile.mktemp()
    os.mkdir(folder)

    # Save to temporary file.
    filename = _fileutil.getOSPath(
        '%s/%s' % (folder, _fileutil.extractFilename(filename)))
    _fileutil.exportObj(file, filename)

    # Import ZEXP-file.
    if _fileutil.extractFileExt(filename) == 'zexp':
        ob = self._importObjectFromFile(filename, verify=0)
        # Remove temporary files.
        _fileutil.remove(folder, deep=1)
        # Refresh zcatalog_index
        standard.triggerEvent(self, '*.onImportObjEvt')
        return ob

    # Find XML-file.
    if _fileutil.extractFileExt(filename) == 'zip':
        _fileutil.extractZipArchive(filename)
        filename = None
        for deep in [0, 1]:
            for ext in ['xml', 'htm', 'html']:
                if filename is None:
                    filename = _fileutil.findExtension(ext, folder, deep)
            break
        if filename is None:
            raise zExceptions.InternalError('XML-File not found!')

    # Import Filter.
    if REQUEST.get('filter', '') in self.getFilterManager().getFilterIds():
        filename = _filtermanager.importFilter(self, filename,
                                               REQUEST.get('filter', ''),
                                               REQUEST)

    # Import XML-file.
    standard.writeBlock(self, '[importFile]: filename=' + filename)
    f = standard.pyopen(filename, 'r', encoding='utf-8')
    ob = handler(self, f)
    f.close()

    # Remove temporary files.
    _fileutil.remove(folder, deep=1)

    # Return imported object.
    return ob
Exemple #5
0
 def getHome(self):
   docElmnt = self.getDocumentElement()
   ob = docElmnt
   try:
     depth = 0
     while ob.meta_type != 'Folder':
       if depth > sys.getrecursionlimit():
         raise zExceptions.InternalError('Maximum recursion depth exceeded')
       depth = depth + 1
       ob = ob.aq_parent
   except:
     try:
       ob = getattr( docElmnt, docElmnt.absolute_url().split( '/')[-2])
     except:
       ob = docElmnt.aq_parent
   return ob
Exemple #6
0
def importFile(self, file, REQUEST, handler):
  message = ''

  # Get filename.
  if isinstance(file,ZPublisher.HTTPRequest.FileUpload):
    filename = file.filename
  else: 
    filename = file.name
  _globals.writeBlock( self, '[importFile]: filename='+filename)

  # Create temporary folder.
  folder = tempfile.mktemp()
  os.mkdir(folder)
  
  # Save to temporary file.
  filename = _fileutil.getOSPath('%s/%s'%(folder,_fileutil.extractFilename(filename)))
  _fileutil.exportObj(file,filename)
  
  # Find XML-file.
  if _fileutil.extractFileExt(filename) == 'zip':
    _fileutil.extractZipArchive(filename)
    filename = None
    for deep in [0,1]:
      for ext in ['xml', 'htm', 'html' ]:
        if filename is None:
          filename = _fileutil.findExtension(ext, folder, deep)
	  break
    if filename is None:
      raise zExceptions.InternalError('XML-File not found!')
  
  # Import Filter.
  if REQUEST.get('filter','') in self.getFilterIds():
    filename = _filtermanager.importFilter(self, filename, REQUEST.get('filter',''), REQUEST)
  
  # Import XML-file.
  _globals.writeBlock( self, '[importFile]: filename='+filename)
  f = open(filename, 'r')
  message += handler(self, f)
  f.close()
  
  # Remove temporary files.
  _fileutil.remove(folder, deep=1)
  
  # Return with message.
  message += self.getZMILangStr('MSG_IMPORTED')%('<i>%s</i>'%_fileutil.extractFilename(filename))
  return message
Exemple #7
0
def recurse_cleanArtefacts(self, level=0):
    from OFS.CopySupport import absattr
    # Recursion.
    last_id = None
    for ob in self.objectValues():
        if absattr(self.id) == absattr(ob.id):
            print(" " * level) + "recurse_cleanArtefacts", ob.absolute_url(
            ), ob.meta_type
            raise zExceptions.InternalError('InfiniteRecursionError')
        else:
            try:
                recurse_cleanArtefacts(ob, level + 1)
            except "InfiniteRecursionError":
                print(
                    " " * level
                ) + "recurse_cleanArtefacts: clean artefact ", ob.absolute_url(
                ), ob.meta_type
                self._delObject(absattr(ob.id), suppress_events=True)
Exemple #8
0
 def getUserFolders(self):
     userFolders = []
     ob = self
     depth = 0
     while True:
         if depth > sys.getrecursionlimit():
             raise zExceptions.InternalError(
                 "Maximum recursion depth exceeded")
         depth = depth + 1
         if ob is None:
             break
         try:
             localUserFolders = ob.objectValues(user_folder_meta_types)
             if len(localUserFolders) == 1:
                 localUserFolder = localUserFolders[0]
                 if localUserFolder not in userFolders:
                     userFolders.append(localUserFolder)
             ob = ob.aq_parent
         except:
             ob = None
     return userFolders
Exemple #9
0
 def getUserLangs(self, userObj, aq_parent=1):
     langs = []
     try:
         langs.extend(list(getattr(userObj, 'langs', ['*'])))
     except:
         pass
     nodes = self.getUserAttr(userObj, 'nodes', {})
     ob = self
     depth = 0
     while ob is not None:
         if depth > sys.getrecursionlimit():
             raise zExceptions.InternalError(
                 "Maximum recursion depth exceeded")
         depth = depth + 1
         nodekey = self.getRefObjPath(ob)
         if nodekey in nodes.keys():
             langs = nodes[nodekey]['langs']
             break
         if aq_parent:
             ob = ob.getParentNode()
         else:
             ob = None
     return langs
Exemple #10
0
 def getUserRoles(self, userObj, aq_parent=1):
     roles = []
     try:
         roles.extend(list(userObj.getRolesInContext(self)))
         if 'Manager' in roles:
             roles = self.concat_list(roles, [
                 'ZMSAdministrator', 'ZMSEditor', 'ZMSAuthor',
                 'ZMSSubscriber', 'ZMSUserAdministrator'
             ])
     except:
         pass
     nodes = self.getUserAttr(userObj, 'nodes', {})
     ob = self
     depth = 0
     while ob is not None:
         if depth > sys.getrecursionlimit():
             raise zExceptions.InternalError(
                 "Maximum recursion depth exceeded")
         depth = depth + 1
         nodekey = self.getRefObjPath(ob)
         if nodekey in nodes.keys():
             roles = self.concat_list(roles, nodes[nodekey]['roles'])
             break
         if aq_parent:
             ob = ob.getParentNode()
         else:
             ob = None
     # Resolve security_roles.
     security_roles = self.getConfProperty('ZMS.security.roles', {})
     for id in filter(lambda x: x in security_roles.keys(), roles):
         dict = security_roles.get(id, {})
         for v in dict.values():
             for role in map(lambda x: x.replace(' ', ''),
                             v.get('roles', [])):
                 if role not in roles:
                     roles.append(role)
     return roles
Exemple #11
0
def http_import(self, url, method='GET', auth=None, parse_qs=0, timeout=5):

    HTTP_PREFIX = 'http://'

    # Get Query-String.
    qs = ''
    i = url.find('?')
    if i > 0:
        qs = url[i + 1:]
        url = url[:i]

    # Get Host.
    host = ''
    servername = url
    if servername.startswith(HTTP_PREFIX):
        servername = servername[len(HTTP_PREFIX):]
    if servername.find('/') > 0:
        servername = servername[:servername.find('/')]
    useproxy = True
    noproxy = ['localhost', '127.0.0.1'] + filter(
        lambda x: len(x) > 0,
        map(lambda x: x.strip(),
            self.getConfProperty('HTTP.noproxy', '').split(',')))
    for noproxyurl in noproxy:
        if fnmatch.fnmatch(servername, noproxyurl):
            useproxy = False
            break
    if useproxy:
        host = self.getConfProperty('HTTP.proxy', host)

    if len(host) == 0:
        # Remove HTTP-Prefix.
        if url.startswith(HTTP_PREFIX):
            url = url[len(HTTP_PREFIX):]

        i = url.find('/')
        if i > 0:
            host = url[:i]
            url = url[i:]
        else:
            host = url
            url = '/'

    # Get Port.
    i = host.find(':', max(0, host.find('@')))
    port = 80
    if i > 0:
        port = int(host[i + 1:])
        host = host[:i]

    # Open HTTP connection.
    writeLog(
        self,
        "[http_import.%s]: %s:%i --> %s?%s" % (method, host, port, url, qs))
    req = HTTP(host, port)

    # Set request-headers.
    if method.upper() == 'GET':
        if len(qs) > 0:
            qs = '?' + qs
        req.putrequest(method, url + qs)
        req.putheader('Host', host)
        authtobasic(auth, req)
        req.putheader('Accept', '*/*')
        req.endheaders()
    elif method.upper() == 'POST':
        req.putrequest(method, url)
        req.putheader('Host', host)
        authtobasic(auth, req)
        req.putheader('Accept', '*/*')
        req.putheader('Content-type', 'application/x-www-form-urlencoded')
        req.putheader('Content-length', '%d' % len(qs))
        req.endheaders()
        # Send query string
        req.send(qs)

    # Send request.
    reply_code, message, headers = req.getreply()

    #### get parameter from content
    if reply_code == 404 or reply_code >= 500:
        error = "[%i]: %s at %s [%s]" % (reply_code, message, url, method)
        writeLog(self, "[http_import.error]: %s" % error)
        raise zExceptions.InternalError(error)
    elif reply_code == 200:
        # get content
        f = req.getfile()
        content = f.read()
        f.close()
        rtn = None
        if parse_qs:
            try:
                # return dictionary of value lists
                rtn = cgi.parse_qs(content,
                                   keep_blank_values=1,
                                   strict_parsing=1)
            except:
                # return string
                rtn = content
        else:
            # return string
            rtn = content
            if port != 80:
                rtn = rtn.replace('%s%s/' % (HTTP_PREFIX, host),
                                  '%s%s:%i/' % (HTTP_PREFIX, host, port))
        return rtn
    else:
        result = '[' + str(reply_code) + ']: ' + str(message)
        writeLog(self, "[http_import.result]: %s" % result)
        return result