Ejemplo n.º 1
0
 def _makeOne(self, id, filename):
     path = path_join(self.skin_path_name, filename)
     metadata = FSMetadata(filepath=path)
     metadata.read()
     return FSPageTemplate(id,
                           filepath=path,
                           properties=metadata.getProperties())
Ejemplo n.º 2
0
    def _makeOne(self, id, filename):
        from Products.CMFCore.FSPageTemplate import FSPageTemplate

        path = path_join(self.skin_path_name, filename)
        metadata = FSMetadata(path)
        metadata.read()
        return FSPageTemplate( id, path, properties=metadata.getProperties() )
Ejemplo n.º 3
0
 def _makeOne( self, id, filename ):
     from Products.CMFCore.FSMetadata import FSMetadata
     from Products.CMFCore.FSSTXMethod import FSSTXMethod
     path = os.path.join(self.skin_path_name, filename)
     metadata = FSMetadata(path)
     metadata.read()
     return FSSTXMethod( id, path, properties=metadata.getProperties() )
    def _makeOne(self, id, filename):
        from Products.CMFCore.FSPageTemplate import FSPageTemplate

        path = path_join(self.skin_path_name, filename)
        metadata = FSMetadata(path)
        metadata.read()
        return FSPageTemplate(id, path, properties=metadata.getProperties())
Ejemplo n.º 5
0
 def _makeOne(self, id, filename):
     from Products.CMFCore.FSMetadata import FSMetadata
     from Products.CMFCore.FSReSTMethod import FSReSTMethod
     path = os.path.join(self.skin_path_name, filename)
     metadata = FSMetadata(path)
     metadata.read()
     return FSReSTMethod(id, path, properties=metadata.getProperties())
Ejemplo n.º 6
0
 def _makeOne(self, id, filename):
     path = join(self.skin_path_name, filename)
     metadata = FSMetadata(filepath=path)
     metadata.read()
     return FSPythonScript(id,
                           filepath=path,
                           properties=metadata.getProperties())
Ejemplo n.º 7
0
    def _makeOne(self, id, filename):
        from Products.CMFCore.FSFile import FSFile
        from Products.CMFCore.FSMetadata import FSMetadata

        full_path = os.path.join(self.skin_path_name, filename)
        metadata = FSMetadata(full_path)
        metadata.read()
        return FSFile(id, full_path, properties=metadata.getProperties())
Ejemplo n.º 8
0
    def _makeOne(self, id, filename):
        from Products.CMFCore.FSFile import FSFile
        from Products.CMFCore.FSMetadata import FSMetadata

        full_path = os.path.join(self.skin_path_name, filename)
        metadata = FSMetadata(full_path)
        metadata.read()
        return FSFile(id, full_path, properties=metadata.getProperties())
Ejemplo n.º 9
0
    def _baseReadMetadata(self):
        # re-read .metadata file if it exists
        e_fp = self._filepath + '.metadata'
        if os.path.exists(e_fp):
            metadata = FSMetadata(e_fp)
            metadata.read()
            self._setProperties(metadata.getProperties())

            # re-read actions and validators whenever we re-read the file
            self._read_action_metadata(self.getId(), self._filepath)
            self._read_validator_metadata(self.getId(), self._filepath)
Ejemplo n.º 10
0
 def _baseReadMetadata(self):
     # re-read .metadata file if it exists
     e_fp = self._filepath + '.metadata'
     if os.path.exists(e_fp):
         metadata = FSMetadata(e_fp)
         metadata.read()
         self._setProperties(metadata.getProperties())
 
         # re-read actions and validators whenever we re-read the file
         self._read_action_metadata(self.getId(), self._filepath)
         self._read_validator_metadata(self.getId(), self._filepath)
Ejemplo n.º 11
0
    def _makeOne( self, id, filename ):

        from Products.CMFCore.FSFile import FSFile
        from Products.CMFCore.FSMetadata import FSMetadata

        full_path = path_join(self.skin_path_name, filename)
        metadata = FSMetadata(filepath=full_path)
        metadata.read()
        fsfile_ob = FSFile(id,
                           filepath=full_path,
                           properties=metadata.getProperties(),
                          )
        return fsfile_ob
 def registerDirectory(self, directory, package):
     """See interface"""
     dirkey = getDirKey(package, directory)
     for filename in os.listdir(directory):
         if len(filename) > 3 and filename.endswith(".pt"):
             path = osjoin(directory, filename)
             tmplkey = getTemplateKey(dirkey, filename)
             metadata = FSMetadata(path)
             metadata.read()
             properties = metadata.getProperties()
             title = properties.get("title", filename[:-3])
             self._templates[tmplkey] = (title.decode("utf-8"), ViewPageTemplateFile(path))
             migration.add_to_migration_map(tmplkey, path)
Ejemplo n.º 13
0
    def _makeOne(self, id, filename):

        from Products.CMFCore.FSFile import FSFile
        from Products.CMFCore.FSMetadata import FSMetadata

        full_path = path_join(self.skin_path_name, filename)
        metadata = FSMetadata(filepath=full_path)
        metadata.read()
        fsfile_ob = FSFile(
            id,
            filepath=full_path,
            properties=metadata.getProperties(),
        )
        return fsfile_ob
Ejemplo n.º 14
0
 def registerDirectory(self, directory, package):
     """See interface"""
     dirkey = getDirKey(package, directory)
     for filename in os.listdir(directory):
         if len(filename) > 3 and filename.endswith('.pt'):
             path = osjoin(directory, filename)
             tmplkey = getTemplateKey(dirkey, filename)
             metadata = FSMetadata(path)
             metadata.read()
             properties = metadata.getProperties()
             title = properties.get('title', filename[:-3])
             self._templates[tmplkey] = (title.decode('utf-8'),
                                         ViewPageTemplateFile(path))
             migration.add_to_migration_map(tmplkey, path)
Ejemplo n.º 15
0
 def _makeOne( self, id, filename ):
     path = path_join(self.skin_path_name, filename)
     metadata = FSMetadata(path)
     metadata.read()
     return FSPageTemplate( id, path, properties=metadata.getProperties() )
Ejemplo n.º 16
0
def prepareContents(self, registry, register_subdirs=0):
    # Creates objects for each file.
    data = {}
    objects = []
    types = self._readTypesFile()
    for entry in _filtered_listdir(self._filepath, ignore=self.ignore):
        if not self._isAllowableFilename(entry):
            continue
        entry_filepath = path.join(self._filepath, entry)
        if path.isdir(entry_filepath):
            # Add a subdirectory only if it was previously registered,
            # unless register_subdirs is set.
            entry_reg_key = '/'.join((self._reg_key, entry))
            info = registry.getDirectoryInfo(entry_reg_key)
            if info is None and register_subdirs:
                # Register unknown subdirs
                registry.registerDirectoryByKey(entry_filepath, entry_reg_key)
                info = registry.getDirectoryInfo(entry_reg_key)
            if info is not None:
                # Folders on the file system have no extension or
                # meta_type, as a crutch to enable customizing what gets
                # created to represent a filesystem folder in a
                # DirectoryView we use a fake type "FOLDER". That way
                # other implementations can register for that type and
                # circumvent the hardcoded assumption that all filesystem
                # directories will turn into DirectoryViews.
                mt = types.get(entry) or 'FOLDER'
                t = registry.getTypeByMetaType(mt)
                if t is None:
                    t = DirectoryView
                metadata = FSMetadata(entry_filepath)
                metadata.read()
                ob = t(entry,
                       entry_reg_key,
                       properties=metadata.getProperties())
                ob_id = ob.getId()
                data[ob_id] = ob
                objects.append({'id': ob_id, 'meta_type': ob.meta_type})
        else:
            pos = entry.rfind('.')
            if pos >= 0:
                name = entry[:pos]
                ext = path.normcase(entry[pos + 1:])
            else:
                name = entry
                ext = ''
            if not name or name == 'REQUEST':
                # Not an allowable id.
                continue
            mo = bad_id(name)
            if mo is not None and mo != -1:  # Both re and regex formats
                # Not an allowable id.
                continue
            t = None
            mt = types.get(entry, None)
            if mt is None:
                mt = types.get(name, None)
            if mt is not None:
                t = registry.getTypeByMetaType(mt)
            if t is None:
                t = registry.getTypeByExtension(ext)

            if t is not None:
                metadata = FSMetadata(entry_filepath)
                metadata.read()
                try:
                    ob = t(name,
                           entry_filepath,
                           fullname=entry,
                           properties=metadata.getProperties())
                except:
                    import sys
                    import traceback
                    typ, val, tb = sys.exc_info()
                    try:
                        logger.exception("prepareContents")

                        exc_lines = traceback.format_exception(typ, val, tb)
                        ob = BadFile(name,
                                     entry_filepath,
                                     exc_str='\r\n'.join(exc_lines),
                                     fullname=entry)
                    finally:
                        tb = None  # Avoid leaking frame!

                # FS-based security
                permissions = metadata.getSecurity()
                if permissions is not None:
                    for name in permissions.keys():
                        acquire, roles = permissions[name]
                        try:
                            ob.manage_permission(name, roles, acquire)
                        except ValueError:
                            logger.exception("Error setting permissions")
###########################################################################
# This is the monkeypatch. These lines don't exist in CMFCore.  This allows
# unauthenticated users to access filesystem-based resources like page
# templates and static UI elements.
###########################################################################
                else:
                    ob.manage_permission('View', ('Authenticated', ), 1)
###########################################################################
# End monkeypatch
###########################################################################

# only DTML Methods and Python Scripts can have proxy roles
                if hasattr(ob, '_proxy_roles'):
                    try:
                        ob._proxy_roles = tuple(metadata.getProxyRoles())
                    except:
                        logger.exception("Error setting proxy role")

                ob_id = ob.getId()
                data[ob_id] = ob
                objects.append({'id': ob_id, 'meta_type': ob.meta_type})

    return data, tuple(objects)
Ejemplo n.º 17
0
 def _makeOne( self, id, filename ):
     path = join(self.skin_path_name, filename)
     metadata = FSMetadata(path)
     metadata.read()
     return FSPythonScript( id, path, properties=metadata.getProperties() ) 
Ejemplo n.º 18
0
    def prepareContents(self, registry, register_subdirs=0):
        # Creates objects for each file.
        data = {}
        objects = []
        types = self._readTypesFile()
        for entry in _filtered_listdir(self._filepath, ignore=self.ignore):
            if not self._isAllowableFilename(entry):
                continue
            entry_filepath = os.path.join(self._filepath, entry)
            if os.path.isdir(entry_filepath):
                # Add a subdirectory only if it was previously registered,
                # unless register_subdirs is set.
                entry_reg_key = '/'.join((self._reg_key, entry))
                info = registry.getDirectoryInfo(entry_reg_key)
                if info is None and register_subdirs:
                    # Register unknown subdirs
                    registry.registerDirectoryByKey(entry_filepath,
                                                    entry_reg_key)
                    info = registry.getDirectoryInfo(entry_reg_key)
                if info is not None:
                    # Folders on the file system have no extension or
                    # meta_type, as a crutch to enable customizing what gets
                    # created to represent a filesystem folder in a
                    # DirectoryView we use a fake type "FOLDER". That way
                    # other implementations can register for that type and
                    # circumvent the hardcoded assumption that all filesystem
                    # directories will turn into DirectoryViews.
                    mt = types.get(entry) or 'FOLDER'
                    t = registry.getTypeByMetaType(mt)
                    if t is None:
                        t = DirectoryView
                    metadata = FSMetadata(entry_filepath)
                    metadata.read()
                    ob = t( entry
                          , entry_reg_key
                          , properties=metadata.getProperties()
                          )
                    ob_id = ob.getId()
                    data[ob_id] = ob
                    objects.append({'id': ob_id, 'meta_type': ob.meta_type})
            else:
                pos = entry.rfind('.')
                if pos >= 0:
                    name = entry[:pos]
                    ext = os.path.normcase(entry[pos + 1:])
                else:
                    name = entry
                    ext = ''
                if not name or name == 'REQUEST':
                    # Not an allowable id.
                    continue
                mo = bad_id(name)
                if mo is not None and mo != -1:  # Both re and regex formats
                    # Not an allowable id.
                    continue
                t = None
                mt = types.get(entry, None)
                if mt is None:
                    mt = types.get(name, None)
                if mt is not None:
                    t = registry.getTypeByMetaType(mt)
                if t is None:
                    t = registry.getTypeByExtension(ext)

                if t is not None:
                    metadata = FSMetadata(entry_filepath)
                    metadata.read()
                    try:
                        ob = t(name, entry_filepath, fullname=entry,
                               properties=metadata.getProperties())
                    except:
                        import sys
                        import traceback
                        typ, val, tb = sys.exc_info()
                        try:
                            logger.exception("prepareContents")

                            exc_lines = traceback.format_exception( typ,
                                                                    val,
                                                                    tb )
                            ob = BadFile( name,
                                          entry_filepath,
                                          exc_str='\r\n'.join(exc_lines),
                                          fullname=entry )
                        finally:
                            tb = None   # Avoid leaking frame!

                    # FS-based security
                    permissions = metadata.getSecurity()
                    if permissions is not None:
                        for name in permissions.keys():
                            acquire, roles = permissions[name]
                            try:
                                ob.manage_permission(name,roles,acquire)
                            except ValueError:
                                logger.exception("Error setting permissions")

                    # only DTML Methods and Python Scripts can have proxy roles
                    if hasattr(ob, '_proxy_roles'):
                        try:
                            ob._proxy_roles = tuple(metadata.getProxyRoles())
                        except:
                            logger.exception("Error setting proxy role")

                    ob_id = ob.getId()
                    data[ob_id] = ob
                    objects.append({'id': ob_id, 'meta_type': ob.meta_type})

        return data, tuple(objects)
Ejemplo n.º 19
0
 def _makeOne(self, id, filename):
     path = path_join(self.skin_path_name, filename)
     metadata = FSMetadata(path)
     metadata.read()
     return FSDTMLMethod(id, path, properties=metadata.getProperties())
Ejemplo n.º 20
0
 def _makeOne( self, id, filename ):
     path = join( self.skin_path_name, filename )
     metadata = FSMetadata( filepath=path )
     metadata.read()
     return FSZSQLMethod( id, filepath=path,
                          properties=metadata.getProperties() )