示例#1
0
    def get_file_upload(self):
        if 'flowFilename' not in self.request.args:
            return None

        total_file_size = int(self.request.args['flowTotalSize'][0])
        flow_identifier = self.request.args['flowIdentifier'][0]

        chunk_size = len(self.request.args['file'][0])
        if ((chunk_size / (1024 * 1024)) > self.state.tenant_cache[1].maximum_filesize or
            (total_file_size / (1024 * 1024)) > self.state.tenant_cache[1].maximum_filesize):
            log.err("File upload request rejected: file too big")
            raise errors.FileTooBig(self.state.tenant_cache[1].maximum_filesize)

        if flow_identifier not in Uploads:
            Uploads.set(flow_identifier, SecureTemporaryFile(Settings.tmp_upload_path))

        f = Uploads.get(flow_identifier)
        f.write(self.request.args['file'][0])

        if self.request.args['flowChunkNumber'][0] != self.request.args['flowTotalChunks'][0]:
            return None

        mime_type, encoding = mimetypes.guess_type(self.request.args['flowFilename'][0])
        if mime_type is None:
            mime_type = 'application/octet-stream'

        return {
            'name': self.request.args['flowFilename'][0],
            'type': mime_type,
            'size': total_file_size,
            'path': f.filepath,
            'body': f,
            'description': self.request.args.get('description', [''])[0]
        }
示例#2
0
    def get_file_upload(self):
        try:
            if (int(self.request.arguments['flowTotalSize'][0]) / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize:
                log.err("File upload request rejected: file too big")
                raise errors.FileTooBig(GLSettings.memory_copy.maximum_filesize)

            if self.request.arguments['flowIdentifier'][0] not in GLUploads:
                f = GLSecureTemporaryFile(GLSettings.tmp_upload_path)
                GLUploads[self.request.arguments['flowIdentifier'][0]] = f
            else:
                f = GLUploads[self.request.arguments['flowIdentifier'][0]]

            f.write(self.request.files['file'][0]['body'])

            if self.request.arguments['flowChunkNumber'][0] != self.request.arguments['flowTotalChunks'][0]:
                return None

            uploaded_file = {}
            uploaded_file['filename'] = self.request.files['file'][0]['filename']
            uploaded_file['content_type'] = self.request.files['file'][0]['content_type']
            uploaded_file['body_len'] = int(self.request.arguments['flowTotalSize'][0])
            uploaded_file['body_filepath'] = f.filepath
            uploaded_file['body'] = f

            return uploaded_file

        except errors.FileTooBig:
            raise  # propagate the exception

        except Exception as exc:
            log.err("Error while handling file upload %s" % exc)
            return None
示例#3
0
    def get_file_upload(self):
        try:
            if len(self.request.files) != 1:
                raise errors.InvalidInputFormat(
                    "cannot accept more than a file upload at once")

            chunk_size = len(self.request.files['file'][0]['body'])
            total_file_size = int(
                self.request.arguments['flowTotalSize'][0]
            ) if 'flowTotalSize' in self.request.arguments else chunk_size
            flow_identifier = self.request.arguments['flowIdentifier'][
                0] if 'flowIdentifier' in self.request.arguments else generateRandomKey(
                    10)

            if ((chunk_size /
                 (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize or
                (total_file_size /
                 (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize):
                log.err("File upload request rejected: file too big")
                raise errors.FileTooBig(
                    GLSettings.memory_copy.maximum_filesize)

            if flow_identifier not in GLUploads:
                f = GLSecureTemporaryFile(GLSettings.tmp_upload_path)
                GLUploads[flow_identifier] = f
            else:
                f = GLUploads[flow_identifier]

            f.write(self.request.files['file'][0]['body'])

            if 'flowChunkNumber' in self.request.arguments and 'flowTotalChunks' in self.request.arguments:
                if self.request.arguments['flowChunkNumber'][
                        0] != self.request.arguments['flowTotalChunks'][0]:
                    return None

            uploaded_file = {}
            uploaded_file['filename'] = self.request.files['file'][0][
                'filename']
            uploaded_file['content_type'] = self.request.files['file'][0][
                'content_type']
            uploaded_file['body_len'] = total_file_size
            uploaded_file['body_filepath'] = f.filepath
            uploaded_file['body'] = f

            upload_time = time.time() - f.creation_date

            track_handler(self)

            return uploaded_file

        except errors.FileTooBig:
            raise  # propagate the exception

        except Exception as exc:
            log.err("Error while handling file upload %s" % exc)
            return None
示例#4
0
    def get_file_upload(self):
        try:
            if len(self.request.files) != 1:
                raise errors.InvalidInputFormat("cannot accept more than a file upload at once")

            chunk_size = len(self.request.files['file'][0]['body'])
            total_file_size = int(self.request.arguments['flowTotalSize'][0]) if 'flowTotalSize' in self.request.arguments else chunk_size
            flow_identifier = self.request.arguments['flowIdentifier'][0] if 'flowIdentifier' in self.request.arguments else generateRandomKey(10)

            if ((chunk_size / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize or
                (total_file_size / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize):
                log.err("File upload request rejected: file too big")
                raise errors.FileTooBig(GLSettings.memory_copy.maximum_filesize)

            if flow_identifier not in GLUploads:
                f = GLSecureTemporaryFile(GLSettings.tmp_upload_path)
                GLUploads[flow_identifier] = f
            else:
                f = GLUploads[flow_identifier]

            f.write(self.request.files['file'][0]['body'])

            if 'flowChunkNumber' in self.request.arguments and 'flowTotalChunks' in self.request.arguments:
                if self.request.arguments['flowChunkNumber'][0] != self.request.arguments['flowTotalChunks'][0]:
                    return None

            uploaded_file = {}
            uploaded_file['filename'] = self.request.files['file'][0]['filename']
            uploaded_file['content_type'] = self.request.files['file'][0]['content_type']
            uploaded_file['body_len'] = total_file_size
            uploaded_file['body_filepath'] = f.filepath
            uploaded_file['body'] = f

            upload_time = time.time() - f.creation_date

            # file uploads works on chunk basis so that we count 1 the file upload
            # as a whole in function get_file_upload()
            for event in outcoming_event_monitored:
                if event['status_checker'](self._status_code) and \
                        event['method'] == self.request.method and \
                        event['handler_check'](self.request.uri):
                    EventTrack(event, upload_time)

            return uploaded_file

        except errors.FileTooBig:
            raise  # propagate the exception

        except Exception as exc:
            log.err("Error while handling file upload %s" % exc)
            return None
示例#5
0
    def get_file_upload(self):
        try:
            chunk_size = len(self.request.args['file'][0])
            total_file_size = int(
                self.request.args['flowTotalSize']
                [0]) if 'flowTotalSize' in self.request.args else chunk_size
            flow_identifier = self.request.args['flowIdentifier'][
                0] if 'flowIdentifier' in self.request.args else generateRandomKey(
                    10)

            if ((chunk_size /
                 (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize or
                (total_file_size /
                 (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize):
                log.err("File upload request rejected: file too big")
                raise errors.FileTooBig(
                    GLSettings.memory_copy.maximum_filesize)

            if flow_identifier not in GLUploads:
                f = GLSecureTemporaryFile(GLSettings.tmp_upload_path)
                GLUploads[flow_identifier] = f
            else:
                f = GLUploads[flow_identifier]

            f.write(self.request.args['file'][0])

            if 'flowChunkNumber' in self.request.args and 'flowTotalChunks' in self.request.args:
                if self.request.args['flowChunkNumber'][
                        0] != self.request.args['flowTotalChunks'][0]:
                    return None

            mime_type, encoding = mimetypes.guess_type(
                self.request.args['flowFilename'][0])

            uploaded_file = {
                'name': self.request.args['flowFilename'][0],
                'type': mime_type,
                'size': total_file_size,
                'path': f.filepath,
                'body': f,
                'description': self.request.args.get('description', [''])[0]
            }

            return uploaded_file

        except errors.FileTooBig:
            raise  # propagate the exception

        except Exception as exc:
            log.err("Error while handling file upload %s" % exc)
            return None
示例#6
0
文件: base.py 项目: MrMEEE/GlobaLeaks
    def process_file_upload(self):
        if b'flowFilename' not in self.request.args:
            return

        total_file_size = int(self.request.args[b'flowTotalSize'][0])
        file_id = self.request.args[b'flowIdentifier'][0].decode()

        chunk_size = len(self.request.args[b'file'][0])
        if ((chunk_size // (1024 * 1024)) >
                self.state.tenant_cache[self.request.tid].maximum_filesize
                or (total_file_size // (1024 * 1024)) >
                self.state.tenant_cache[self.request.tid].maximum_filesize):
            log.err("File upload request rejected: file too big",
                    tid=self.request.tid)
            raise errors.FileTooBig(
                self.state.tenant_cache[self.request.tid].maximum_filesize)

        if file_id not in self.state.TempUploadFiles:
            self.state.TempUploadFiles[file_id] = SecureTemporaryFile(
                Settings.tmp_path)

        f = self.state.TempUploadFiles[file_id]
        with f.open('w') as f:
            f.write(self.request.args[b'file'][0])

            if self.request.args[b'flowChunkNumber'][0] != self.request.args[
                    b'flowTotalChunks'][0]:
                return None

            f.finalize_write()

        mime_type, _ = mimetypes.guess_type(
            self.request.args[b'flowFilename'][0].decode())
        if mime_type is None:
            mime_type = 'application/octet-stream'

        filename = self.request.args[b'flowFilename'][0].decode()

        self.uploaded_file = {
            'id': file_id,
            'date': datetime_now(),
            'name': filename,
            'type': mime_type,
            'size': total_file_size,
            'filename': os.path.basename(f.filepath),
            'body': f,
            'description': self.request.args.get(b'description', [''])[0]
        }
示例#7
0
    def get_file_upload(self):
        try:
            if (int(self.request.arguments['flowTotalSize'][0]) /
                (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize:
                log.err("File upload request rejected: file too big")
                raise errors.FileTooBig(
                    GLSettings.memory_copy.maximum_filesize)

            if self.request.arguments['flowIdentifier'][0] not in GLUploads:
                f = GLSecureTemporaryFile(GLSettings.tmp_upload_path)
                GLUploads[self.request.arguments['flowIdentifier'][0]] = f
            else:
                f = GLUploads[self.request.arguments['flowIdentifier'][0]]

            f.write(self.request.files['file'][0]['body'])

            if self.request.arguments['flowChunkNumber'][
                    0] != self.request.arguments['flowTotalChunks'][0]:
                return None

            uploaded_file = {}
            uploaded_file['filename'] = self.request.files['file'][0][
                'filename']
            uploaded_file['content_type'] = self.request.files['file'][0][
                'content_type']
            uploaded_file['body_len'] = int(
                self.request.arguments['flowTotalSize'][0])
            uploaded_file['body_filepath'] = f.filepath
            uploaded_file['body'] = f

            upload_time = time.time() - f.creation_date

            # file uploads works on chunk basis so that we count 1 the file upload
            # as a whole in function get_file_upload()
            for event in outcoming_event_monitored:
                if event['status_checker'](self._status_code) and \
                        event['method'] == self.request.method and \
                        event['handler_check'](self.request.uri):
                    EventTrack(event, upload_time)

            return uploaded_file

        except errors.FileTooBig:
            raise  # propagate the exception

        except Exception as exc:
            log.err("Error while handling file upload %s" % exc)
            return None