Esempio n. 1
0
class Lychee(object):

    def __init__(self, user, options):
        self.user = user

        logging.info("Original user: '******'" % self.user.pw_name)

        self.out_dir = options.output_dir
        self.ensure_path_exists(self.user, self.out_dir)

        logging.info("Output path: %s" % self.out_dir)

        if options.mime_types is not None:
            logging.info("Filtering mime_types: %s" % ', '.join(options.mime_types))

        self.nfl = NetworkFileListener(options.interface, options.mime_types)
        self.nfl.on_file_complete = self._on_file_complete

    def ensure_path_exists(self, owner, path):
        if os.path.exists(path):
            return

        logging.info("Creating Directory: %s" % path)

        os.setegid(owner.pw_gid)
        os.seteuid(owner.pw_uid)
        os.makedirs(path)
        os.setegid(0)
        os.seteuid(0)

    def start(self):
        self.nfl.start()

    def _on_file_complete(self, f):
        ext = mimetypes.guess_extension(f.mime_type, True)

        if ext is None:
            logging.error('Could not determine mime_type')
            return

        filename = '%s%s' % (str(datetime.now()), ext)

        out_file = os.path.join(self.out_dir, filename)

        logging.info('Writing file %s' % out_file)

        with open(out_file, 'w') as fp:
            fp.write(f.content.getvalue())
            f.content.close()

            os.fchown(fp.fileno(), self.user.pw_uid, self.user.pw_gid)

        logging.info('Writing complete.')
Esempio n. 2
0
class Lychee(object):
    def __init__(self, user, options):
        self.user = user

        logging.info("Original user: '******'" % self.user.pw_name)

        self.out_dir = options.output_dir
        self.ensure_path_exists(self.user, self.out_dir)

        logging.info("Output path: %s" % self.out_dir)

        if options.mime_types is not None:
            logging.info("Filtering mime_types: %s" %
                         ', '.join(options.mime_types))

        self.nfl = NetworkFileListener(options.interface, options.mime_types)
        self.nfl.on_file_complete = self._on_file_complete

    def ensure_path_exists(self, owner, path):
        if os.path.exists(path):
            return

        logging.info("Creating Directory: %s" % path)

        os.setegid(owner.pw_gid)
        os.seteuid(owner.pw_uid)
        os.makedirs(path)
        os.setegid(0)
        os.seteuid(0)

    def start(self):
        self.nfl.start()

    def _on_file_complete(self, f):
        ext = mimetypes.guess_extension(f.mime_type, True)

        if ext is None:
            logging.error('Could not determine mime_type')
            return

        filename = '%s%s' % (str(datetime.now()), ext)

        out_file = os.path.join(self.out_dir, filename)

        logging.info('Writing file %s' % out_file)

        with open(out_file, 'w') as fp:
            fp.write(f.content.getvalue())
            f.content.close()

            os.fchown(fp.fileno(), self.user.pw_uid, self.user.pw_gid)

        logging.info('Writing complete.')
Esempio n. 3
0
    def __init__(self, user, options):
        self.user = user

        logging.info("Original user: '******'" % self.user.pw_name)

        self.out_dir = options.output_dir
        self.ensure_path_exists(self.user, self.out_dir)

        logging.info("Output path: %s" % self.out_dir)

        if options.mime_types is not None:
            logging.info("Filtering mime_types: %s" %
                         ', '.join(options.mime_types))

        self.nfl = NetworkFileListener(options.interface, options.mime_types)
        self.nfl.on_file_complete = self._on_file_complete
Esempio n. 4
0
    def __init__(self, user, options):
        self.user = user

        logging.info("Original user: '******'" % self.user.pw_name)

        self.out_dir = options.output_dir
        self.ensure_path_exists(self.user, self.out_dir)

        logging.info("Output path: %s" % self.out_dir)

        if options.mime_types is not None:
            logging.info("Filtering mime_types: %s" % ', '.join(options.mime_types))

        self.nfl = NetworkFileListener(options.interface, options.mime_types)
        self.nfl.on_file_complete = self._on_file_complete