Exemplo n.º 1
0
    def export_to_file(self,
                       aChunkSize=0,
                       filename=None,
                       target_mime=None,
                       target_extension=None,
                       ignore_conversion_problems=False,
                       directory=None):

        if self._payload[self._idx['size']] == 0:
            return None

        if filename is None:
            filename = self.get_useful_filename(make_unique=True,
                                                directory=directory)

        success = gmPG2.bytea2file(data_query={
            'cmd':
            u'SELECT substring(data from %(start)s for %(size)s) FROM blobs.doc_obj WHERE pk=%(pk)s',
            'args': {
                'pk': self.pk_obj
            }
        },
                                   filename=filename,
                                   chunk_size=aChunkSize,
                                   data_size=self._payload[self._idx['size']])

        if not success:
            return None

        if target_mime is None:
            return filename

        if target_extension is None:
            target_extension = gmMimeLib.guess_ext_by_mimetype(
                mimetype=target_mime)

        target_path, name = os.path.split(filename)
        name, tmp = os.path.splitext(name)
        target_fname = gmTools.get_unique_filename(prefix='%s-converted-' %
                                                   name,
                                                   suffix=target_extension)
        _log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename,
                   target_mime, target_fname)
        if gmMimeLib.convert_file(filename=filename,
                                  target_mime=target_mime,
                                  target_filename=target_fname):
            return target_fname

        _log.warning('conversion failed')
        if not ignore_conversion_problems:
            return None

        _log.warning(
            'programmed to ignore conversion problems, hoping receiver can handle [%s]',
            filename)
        return filename
Exemplo n.º 2
0
	def save_to_file(self, aChunkSize=0, filename=None, target_mime=None, target_extension=None, ignore_conversion_problems=False, directory=None, adjust_extension=False, conn=None):

		if self._payload[self._idx['size']] == 0:
			return None

		if filename is None:
			filename = self.get_useful_filename(make_unique = True, directory = directory)

		success = gmPG2.bytea2file (
			data_query = {
				'cmd': 'SELECT substring(data from %(start)s for %(size)s) FROM blobs.doc_obj WHERE pk=%(pk)s',
				'args': {'pk': self.pk_obj}
			},
			filename = filename,
			chunk_size = aChunkSize,
			data_size = self._payload[self._idx['size']],
			conn = conn
		)
		if not success:
			return None

		if target_mime is None:
			if filename.endswith('.dat'):
				if adjust_extension:
					return gmMimeLib.adjust_extension_by_mimetype(filename)
			return filename

		if target_extension is None:
			target_extension = gmMimeLib.guess_ext_by_mimetype(mimetype = target_mime)

		target_path, name = os.path.split(filename)
		name, tmp = os.path.splitext(name)
		target_fname = gmTools.get_unique_filename (
			prefix = '%s-conv-' % name,
			suffix = target_extension
		)
		_log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename, target_mime, target_fname)
		if gmMimeLib.convert_file (
			filename = filename,
			target_mime = target_mime,
			target_filename = target_fname
		):
			return target_fname

		_log.warning('conversion failed')
		if not ignore_conversion_problems:
			return None

		if filename.endswith('.dat'):
			if adjust_extension:
				filename = gmMimeLib.adjust_extension_by_mimetype(filename)
		_log.warning('programmed to ignore conversion problems, hoping receiver can handle [%s]', filename)
		return filename
Exemplo n.º 3
0
    def save_to_file(self,
                     aChunkSize=0,
                     target_mime=None,
                     target_extension=None,
                     ignore_conversion_problems=False):

        if self._payload[self._idx['is_textual']]:
            return None

        if self._payload[self._idx['data_size']] == 0:
            return None

        filename = gmTools.get_unique_filename(prefix='gm-data_snippet-')
        success = gmPG2.bytea2file(data_query={
            'cmd':
            'SELECT substring(binary_data from %(start)s for %(size)s) FROM ref.keyword_expansion WHERE pk = %(pk)s',
            'args': {
                'pk': self.pk_obj
            }
        },
                                   filename=filename,
                                   chunk_size=aChunkSize,
                                   data_size=self._payload[
                                       self._idx['data_size']])

        if not success:
            return None

        if target_mime is None:
            return filename

        if target_extension is None:
            target_extension = gmMimeLib.guess_ext_by_mimetype(
                mimetype=target_mime)

        target_fname = gmTools.get_unique_filename(
            prefix='gm-data_snippet-converted-', suffix=target_extension)
        _log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename,
                   target_mime, target_fname)
        if gmMimeLib.convert_file(filename=filename,
                                  target_mime=target_mime,
                                  target_filename=target_fname):
            return target_fname

        _log.warning('conversion failed')
        if not ignore_conversion_problems:
            return None

        _log.warning(
            'programmed to ignore conversion problems, hoping receiver can handle [%s]',
            filename)
        return filename
Exemplo n.º 4
0
def encrypt_file_symmetric(filename=None,
                           passphrase=None,
                           comment=None,
                           verbose=False,
                           remove_unencrypted=False,
                           convert2pdf=False):
    """Encrypt <filename> with a symmetric cipher.

	<convert2pdf> - True: convert <filename> to PDF, if possible, and encrypt that.
	"""
    assert (filename is not None), '<filename> must not be None'

    if convert2pdf:
        _log.debug('PDF encryption preferred, attempting conversion if needed')
        pdf_fname = gmMimeLib.convert_file(filename=filename,
                                           target_mime='application/pdf',
                                           target_filename=filename + '.pdf',
                                           verbose=verbose)
        if pdf_fname is not None:
            _log.debug('successfully converted to PDF')
            # remove non-pdf file
            gmTools.remove_file(filename)
            filename = pdf_fname

    # try PDF-inherent AES
    encrypted_filename = encrypt_pdf(filename=filename,
                                     passphrase=passphrase,
                                     verbose=verbose,
                                     remove_unencrypted=remove_unencrypted)
    if encrypted_filename is not None:
        return encrypted_filename

    # try 7z based AES
    encrypted_filename = aes_encrypt_file(
        filename=filename,
        passphrase=passphrase,
        comment=comment,
        verbose=verbose,
        remove_unencrypted=remove_unencrypted)
    if encrypted_filename is not None:
        return encrypted_filename

    # try GPG based AES
    return gpg_encrypt_file_symmetric(filename=filename,
                                      passphrase=passphrase,
                                      comment=comment,
                                      verbose=verbose,
                                      remove_unencrypted=remove_unencrypted)
Exemplo n.º 5
0
    def export_to_file(
        self,
        aChunkSize=0,
        filename=None,
        target_mime=None,
        target_extension=None,
        ignore_conversion_problems=False,
        directory=None,
    ):

        if self._payload[self._idx["size"]] == 0:
            return None

        if filename is None:
            filename = self.get_useful_filename(make_unique=True, directory=directory)

        success = gmPG2.bytea2file(
            data_query={
                "cmd": u"SELECT substring(data from %(start)s for %(size)s) FROM blobs.doc_obj WHERE pk=%(pk)s",
                "args": {"pk": self.pk_obj},
            },
            filename=filename,
            chunk_size=aChunkSize,
            data_size=self._payload[self._idx["size"]],
        )

        if not success:
            return None

        if target_mime is None:
            return filename

        if target_extension is None:
            target_extension = gmMimeLib.guess_ext_by_mimetype(mimetype=target_mime)

        target_path, name = os.path.split(filename)
        name, tmp = os.path.splitext(name)
        target_fname = gmTools.get_unique_filename(prefix="%s-converted-" % name, suffix=target_extension)
        _log.debug("attempting conversion: [%s] -> [<%s>:%s]", filename, target_mime, target_fname)
        if gmMimeLib.convert_file(filename=filename, target_mime=target_mime, target_filename=target_fname):
            return target_fname

        _log.warning("conversion failed")
        if not ignore_conversion_problems:
            return None

        _log.warning("programmed to ignore conversion problems, hoping receiver can handle [%s]", filename)
        return filename
Exemplo n.º 6
0
	def export_to_file(self, aChunkSize=0, target_mime=None, target_extension=None, ignore_conversion_problems=False):

		if self._payload[self._idx['is_textual']]:
			return None

		if self._payload[self._idx['data_size']] == 0:
			return None

		filename = gmTools.get_unique_filename(prefix = 'gm-data_snippet-')
		success = gmPG2.bytea2file (
			data_query = {
				'cmd': u'SELECT substring(binary_data from %(start)s for %(size)s) FROM ref.keyword_expansion WHERE pk = %(pk)s',
				'args': {'pk': self.pk_obj}
			},
			filename = filename,
			chunk_size = aChunkSize,
			data_size = self._payload[self._idx['data_size']]
		)

		if not success:
			return None

		if target_mime is None:
			return filename

		if target_extension is None:
			target_extension = gmMimeLib.guess_ext_by_mimetype(mimetype = target_mime)

		target_fname = gmTools.get_unique_filename (
			prefix = 'gm-data_snippet-converted-',
			suffix = target_extension
		)
		_log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename, target_mime, target_fname)
		if gmMimeLib.convert_file (
			filename = filename,
			target_mime = target_mime,
			target_filename = target_fname
		):
			return target_fname

		_log.warning('conversion failed')
		if not ignore_conversion_problems:
			return None

		_log.warning('programmed to ignore conversion problems, hoping receiver can handle [%s]', filename)
		return filename
Exemplo n.º 7
0
	def save_to_file(self, aChunkSize=0, filename=None, target_mime=None, target_extension=None, ignore_conversion_problems=False, directory=None, adjust_extension=False, conn=None):

		if filename is None:
			filename = self.get_useful_filename(make_unique = True, directory = directory)

		filename = self.__download_to_file(filename = filename)
		if filename is None:
			return None

		if target_mime is None:
			if filename.endswith('.dat'):
				if adjust_extension:
					return gmMimeLib.adjust_extension_by_mimetype(filename)
			return filename

		if target_extension is None:
			target_extension = gmMimeLib.guess_ext_by_mimetype(mimetype = target_mime)

		target_path, name = os.path.split(filename)
		name, tmp = os.path.splitext(name)
		target_fname = gmTools.get_unique_filename (
			prefix = '%s-conv-' % name,
			suffix = target_extension
		)
		_log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename, target_mime, target_fname)
		converted_fname = gmMimeLib.convert_file (
			filename = filename,
			target_mime = target_mime,
			target_filename = target_fname
		)
		if converted_fname is not None:
			return converted_fname

		_log.warning('conversion failed')
		if not ignore_conversion_problems:
			return None

		if filename.endswith('.dat'):
			if adjust_extension:
				filename = gmMimeLib.adjust_extension_by_mimetype(filename)
		_log.warning('programmed to ignore conversion problems, hoping receiver can handle [%s]', filename)
		return filename
Exemplo n.º 8
0
def encrypt_file_symmetric(filename: str = None,
                           passphrase: str = None,
                           comment: str = None,
                           verbose: bool = False,
                           remove_unencrypted: bool = False,
                           convert2pdf: bool = False) -> str:
    """Encrypt file with a symmetric cipher.

	Args:
		filename: file to encrypt
		passphrase: minimum of 5 characters
		remove_unencrypted: remove unencrypted source file if encryption succeeded
		comment: a comment to be included within the encrypted output
		remove_unencrypted: remove unencrypted source file if encryption succeeds
		convert2pdf: attempt converting _filename_ to PDF and encrypt that on success

	Returns:
		Name of encrypted PDF or None.
	"""
    assert (filename is not None), '<filename> must not be None'

    if passphrase is None:
        # try GPG based AES only, as GPG is the only supported method
        # for securely getting a passphrase from the user
        return encrypt_file_symmetric_gpg(
            filename=filename,
            passphrase=None,
            comment=comment,
            verbose=verbose,
            remove_unencrypted=remove_unencrypted)

    # else try other methods, too
    if len(passphrase) < 5:
        _log.error('<passphrase> must be at least 5 characters/signs/digits')
        return None

    if convert2pdf:
        _log.debug('PDF encryption preferred, attempting conversion if needed')
        pdf_fname = gmMimeLib.convert_file(filename=filename,
                                           target_mime='application/pdf',
                                           target_filename=filename + '.pdf',
                                           verbose=verbose)
        if pdf_fname is not None:
            _log.debug('successfully converted to PDF')
            if remove_unencrypted:
                # remove non-pdf file
                gmTools.remove_file(filename)
            filename = pdf_fname

    # try PDF-based encryption
    encrypted_filename = encrypt_pdf(filename=filename,
                                     passphrase=passphrase,
                                     verbose=verbose,
                                     remove_unencrypted=remove_unencrypted)
    if encrypted_filename is not None:
        return encrypted_filename

    # try 7z based encryption
    encrypted_filename = encrypt_file_symmetric_7z(
        filename=filename,
        passphrase=passphrase,
        comment=comment,
        verbose=verbose,
        remove_unencrypted=remove_unencrypted)
    if encrypted_filename is not None:
        return encrypted_filename

    # try GPG based encryption
    return encrypt_file_symmetric_gpg(filename=filename,
                                      passphrase=passphrase,
                                      comment=comment,
                                      verbose=verbose,
                                      remove_unencrypted=remove_unencrypted)