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.')
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