Пример #1
0
def test_find_unencrypted_files__empty_dir(walk, expanduser, Inventory,
                                           GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['restoredir'], saved_params['gpg_homedir'],
        saved_params['gpg_binary']
    ]

    register = {
        'unenc_1': {
            'unencrypted_file': 'unenc_1',
            'encrypted_file': 'uuid-1',
            'public_id': saved_params['public_id'],
            'is_link': 0,
            'target': ''
        }
    }

    walk.return_value = []

    de = DirEncryption(test_args)
    files = de.find_unencrypted_files(register)

    eq_(files, {})
Пример #2
0
def test_encrypt_regular_files(delete_file, encrypt, find_ufiles, Inventory,
                               GPGOps):

    find_ufiles.return_value = {
        'test_path_1': {
            'is_new': False
        },
        'test_path_2': {
            'is_new': False
        },
        'test_path_3': {
            'is_new': True
        }
    }

    de = DirEncryption(test_args)
    de.encrypt_regular_files(Inventory().__enter__().read_register("all"),
                             Inventory().__enter__())

    eq_(encrypt.call_count, 3)
    eq_(delete_file.call_count, 2)
    eq_(find_ufiles.call_count, 1)
    eq_(encrypt.call_args_list[0][0][0], 'test_path_1')
    eq_(encrypt.call_args_list[1][0][0], 'test_path_2')
    eq_(encrypt.call_args_list[2][0][0], 'test_path_3')
Пример #3
0
def test_do_inv_maintenance(clean, Inventory, GPGOps):

    de = DirEncryption(test_args)
    de.do_inv_maintenance(Inventory().__enter__())

    eq_(clean.call_count, 1)
    eq_(Inventory().__enter__().update_last_timestamp.call_count, 1)
Пример #4
0
def test_find_unencrypted_files(stat, walk, expanduser, Inventory, GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['gpg_homedir'], saved_params['gpg_binary']
    ]

    register = {
        'unenc_1': {
            'unencrypted_file': 'unenc_1',
            'encrypted_file': 'uuid-1',
            'public_id': saved_params['public_id']
        }
    }

    walk.return_value = [
        (saved_params['plaindir'], ['subdir_1'], ['unenc_1', 'unenc_2']),
        (os.path.join(saved_params['plaindir'], 'subdir_1'), [], ['unenc_3'])
    ]

    stat.return_value.st_mtime = 1400

    de = DirEncryption(test_args)
    files = de.find_unencrypted_files(register)

    eq_(len(files), 2)
    ok_('unenc_2' in files.keys())
    ok_(os.path.join('subdir_1', 'unenc_3') in files.keys())
Пример #5
0
def test_encrypt_all(delete_file, encrypt, find, expanduser, Inventory,
                     GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['gpg_homedir'], saved_params['gpg_binary']
    ]

    find.return_value = {
        'test_path_1': {
            'modified_time': 1234,
            'is_new': False
        },
        'test_path_2': {
            'modified_time': 1337,
            'is_new': False
        },
        'test_path_3': {
            'modified_time': 1414,
            'is_new': True
        }
    }

    de = DirEncryption(test_args)
    de.encrypt_all()

    eq_(encrypt.call_count, 3)
    eq_(encrypt.call_args_list[0][0][0], 'test_path_1')
    eq_(encrypt.call_args_list[1][0][0], 'test_path_2')
    eq_(encrypt.call_args_list[2][0][0], 'test_path_3')
    eq_(Inventory().__enter__().update_last_timestamp.call_count, 1)
    eq_(delete_file.call_count, 2)
Пример #6
0
def test_decrypt_all(decrypt, expanduser, Inventory, GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['gpg_homedir'], saved_params['gpg_binary']
    ]

    Inventory().__enter__().read_register.return_value = {
        'unenc_file_1': {
            'unencrypted_file': 'unenc_1',
            'encrypted_file': 'uuid-1',
            'public_id': saved_params['public_id']
        },
        'unenc_file_2': {
            'unencrypted_file': 'unenc_2',
            'encrypted_file': 'uuid-2',
            'public_id': saved_params['public_id']
        },
        'unenc_file_3': {
            'unencrypted_file': 'unenc_3',
            'encrypted_file': 'uuid-3',
            'public_id': 'some_other_id'
        }
    }

    de = DirEncryption(test_args)
    de.decrypt_all('trustno1')

    eq_(de.decrypt.call_count, 2)
    eq_(de.decrypt.call_args_list[0][0], ('uuid-1', 'unenc_1', 'trustno1'))
    eq_(de.decrypt.call_args_list[1][0], ('uuid-2', 'unenc_2', 'trustno1'))
Пример #7
0
def test_clean_links(listdir, islink, expanduser, Inventory, GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['restoredir'], saved_params['gpg_homedir'],
        saved_params['gpg_binary']
    ]

    inv = MagicMock()
    inv.read_register.return_value = {
        'unenc_3': {
            'unencrypted_file': 'unenc_3',
            'encrypted_file': '',
            'public_id': '',
            'is_link': 1,
            'target': 'link_3'
        },
        'unenc_4': {
            'unencrypted_file': 'unenc_4',
            'encrypted_file': '',
            'public_id': '',
            'is_link': 1,
            'target': 'link_4'
        }
    }
    islink.return_value = False
    de = DirEncryption(test_args)
    de.clean(inv)
    eq_(inv.clean_record.call_count, 6)
Пример #8
0
def test_encrypt_all(maintenance, register_links, register_dirs,
                     encrypt_files):

    de = DirEncryption(test_args)
    de.encrypt_all()

    eq_(maintenance.call_count, 1)
    eq_(register_links.call_count, 1)
    eq_(register_dirs.call_count, 1)
    eq_(encrypt_files.call_count, 1)
Пример #9
0
    def loop_through(self, clean=False, resync=False):
        """Go through all entries and take action based on user input.

        This method can be called after check() has been executed,
        otherwise it cannot properly report on the existence of
        files.
        """
        count_nok = 0
        total_files = len(self.registered_files)

        print('Plaindir: {}'.format(self.parameters['plaindir']))
        print('Securedir: {}'.format(self.parameters['securedir']))
        print('\nSTATUS PLAINFILE{}ENCFILE'.format(' '*27))

        for filename, entry in self.registered_files.items():

            unenc_exists = 'u'
            enc_exists = 'e'
            status = 'ok'

            if not entry['unencrypted_file_check']:
                unenc_exists = ''
            if not entry['encrypted_file_check']:
                enc_exists = ''

            if clean and (not unenc_exists or not enc_exists):
                if unenc_exists:
                    print("delete unenc")
                    FileOps.delete_file(self.parameters['plaindir'],
                                     entry['unencrypted_file'])

                if enc_exists:
                    print("delete enc")
                    FileOps.delete_file(self.parameters['securedir'],
                                     entry['encrypted_file'])

                self.clean_registry(entry['unencrypted_file'])
                total_files -= 1
            elif not unenc_exists and resync:
                de = DirEncryption(None, self.database)
                de.decrypt(entry['encrypted_file'],
                           entry['unencrypted_file'],
                           self.passphrase)
                unenc_exists = 'u'
            elif not unenc_exists or not enc_exists:
                status = 'NOK'
                count_nok += 1


            print('%-3s %1s%1s %-35s %-30s' % (status, unenc_exists, enc_exists,
                    self.registered_files[filename]['unencrypted_file'],
                    self.registered_files[filename]['encrypted_file']))

        print('\nTotal files in the register: {}'.format(total_files))
        print('Check: {} ok, {} not ok'.format(total_files - count_nok, count_nok))
Пример #10
0
def test_encrypt_all__no_files(encrypt, find, expanduser, Inventory, GPGOps):

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['gpg_homedir'], saved_params['gpg_binary']
    ]

    de = DirEncryption(test_args)
    de.encrypt_all()

    eq_(encrypt.call_count, 0)
    eq_(Inventory().__enter__().update_last_timestamp.call_count, 1)
Пример #11
0
def test_encrypt(expanduser, GPGOps):

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['gpg_homedir'], saved_params['gpg_binary']
    ]
    inventory = MagicMock()

    de = DirEncryption(test_args)
    de.encrypt('plainfile', 'securefile', inventory)
    eq_(inventory.register.call_count, 1)
    de.gpg.encrypt.assert_called_once_with(
        os.path.join(saved_params['plaindir'], 'plainfile'),
        os.path.join(saved_params['securedir'], 'securefile'))
Пример #12
0
def test_decrypt_all__no_files(decrypt, expanduser, Inventory, GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['gpg_homedir'], saved_params['gpg_binary']
    ]

    Inventory().__enter__().read_register.return_value = {}

    de = DirEncryption(test_args)
    de.decrypt_all('trustno1')

    eq_(de.decrypt.call_count, 0)
Пример #13
0
def test_decrypt(expanduser, Inventory, GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['gpg_homedir'], saved_params['gpg_binary']
    ]

    de = DirEncryption(test_args)
    de.decrypt('test_enc_file', 'test_plain_file', 'trustno1')

    de.gpg.decrypt.assert_called_once_with(
        os.path.join(saved_params['securedir'], 'test_enc_file'),
        os.path.join(saved_params['plaindir'], 'test_plain_file'), 'trustno1')
Пример #14
0
def test_set_parameters__from_args(expanduser, Inventory, GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    args = MagicMock()
    args.verbose = True
    args.plaindir = 'runtime_plaindir'
    args.securedir = 'runtime_securedir'
    args.restoredir = 'runtime_restoredir'
    args.public_id = 'runtime_public_id'
    args.gpg_keyring = 'runtime_gpg_keyring'
    args.gpg_homedir = 'runtime_gpg_homedir'
    args.gpg_binary = 'runtime_gpg_binary'

    expanduser.side_effect = [
        args.plaindir, args.securedir, args.restoredir, args.gpg_homedir,
        args.gpg_binary, args.plaindir, args.securedir, args.restoredir,
        args.gpg_homedir, args.gpg_binary
    ]

    de = DirEncryption(args)
    eq_(de.verbose, True)
    eq_(de.last_timestamp, saved_params['last_timestamp'])
    eq_(de.plaindir, args.plaindir)
    eq_(de.securedir, args.securedir)
    eq_(de.restoredir, args.restoredir)
    eq_(de.public_id, args.public_id)
    eq_(de.gpg_keyring, args.gpg_keyring)
    eq_(de.gpg_binary, args.gpg_binary)
Пример #15
0
def test_find_unregistered_links(readlink, islink, stat, walk, expanduser,
                                 Inventory, GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['restoredir'], saved_params['gpg_homedir'],
        saved_params['gpg_binary']
    ]

    register = {
        'unenc_1': {
            'unencrypted_file': 'unenc_1',
            'encrypted_file': '',
            'public_id': '',
            'is_link': 1,
            'target': 'target_1'
        }
    }

    walk.return_value = [(saved_params['plaindir'], ['subdir_1'],
                          ['unenc_1', 'unenc_2', 'unenc_3']),
                         (os.path.join(saved_params['plaindir'],
                                       'subdir_1'), [], ['unenc_4'])]

    stat.return_value.st_mtime = 1234567895
    islink.return_value = True
    readlink.return_value = 'my_target'
    de = DirEncryption(test_args)
    links = de.find_unregistered_links(register)
    eq_(len(links), 6)
    ok_('unenc_3' in links.keys())
    ok_(os.path.join('subdir_1', 'unenc_4') in links.keys())

    stat.reset_mock()
    stat.return_value.st_mtime = 1234567885
    links = de.find_unregistered_links(register)
    eq_(len(links), 5)

    islink.reset_mock()
    islink.return_value = False
    links = de.find_unregistered_links(register)
    eq_(len(links), 0)
Пример #16
0
def test_register_symlinks(register, find_ulinks, Inventory, GPGOps):

    find_ulinks.return_value = {
        'test_link_1': {
            'target': 'target_1',
            'is_new': False
        },
        'test_link_2': {
            'target': 'target_2',
            'is_new': True
        }
    }

    de = DirEncryption(test_args)
    de.register_symlinks(Inventory().__enter__().read_register("links"),
                         Inventory().__enter__())

    eq_(register.call_count, 2)
    eq_(find_ulinks.call_count, 1)
    eq_(Inventory().__enter__().clean_record.call_count, 1)
Пример #17
0
def test_register_empty_dirs(find_udirs, register, Inventory, GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    find_udirs.return_value = {
        'test_dir_1': {
            'is_new': False
        },
        'test_dir_2': {
            'is_new': True
        }
    }

    de = DirEncryption(test_args)
    de.register_empty_dirs(Inventory().__enter__().read_register("dirs"),
                           Inventory().__enter__())

    eq_(register.call_count, 2)
    eq_(find_udirs.call_count, 1)
    eq_(Inventory().__enter__().clean_record.call_count, 1)
Пример #18
0
def test_find_unregistered_empty_dirs(stat, walk, expanduser, Inventory,
                                      GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['restoredir'], saved_params['gpg_homedir'],
        saved_params['gpg_binary']
    ]

    register = {
        'subdir_1': {
            'unencrypted_file': 'subdir_1',
            'encrypted_file': '',
            'public_id': '',
            'is_link': 0,
            'target': ''
        }
    }

    walk.return_value = [(saved_params['plaindir'], ['subdir_1'],
                          ['unenc_1', 'unenc_2', 'unenc_3']),
                         (os.path.join(saved_params['plaindir'],
                                       'subdir_1'), [], [])]

    stat.return_value.st_mtime = 1234567895
    de = DirEncryption(test_args)
    dirs = de.find_unregistered_empty_dirs(register)
    eq_(len(dirs), 1)
    ok_('subdir_1' in dirs.keys())

    stat.reset_mock()
    stat.return_value.st_mtime = 1234567885
    dirs = de.find_unregistered_empty_dirs(register)
    eq_(len(dirs), 0)
Пример #19
0
def test_set_parameters__from_param(expanduser, Inventory, GPGOps):

    Inventory().__enter__().read_parameters.return_value = saved_params

    expanduser.side_effect = [
        saved_params['plaindir'], saved_params['securedir'],
        saved_params['public_id'], saved_params['gpg_keyring'],
        saved_params['gpg_binary']
    ]

    de = DirEncryption(test_args)
    eq_(de.verbose, False)
    eq_(de.last_timestamp, saved_params['last_timestamp'])
    eq_(de.plaindir, saved_params['plaindir'])
    eq_(de.securedir, saved_params['securedir'])
    eq_(de.public_id, saved_params['public_id'])
    eq_(de.gpg_keyring, saved_params['gpg_keyring'])
    eq_(de.gpg_binary, saved_params['gpg_binary'])
Пример #20
0
            help='Print verbose messages during execution')

    parser.add_argument('-p', '--plaindir',    help='Unencrypted directory')
    parser.add_argument('-s', '--securedir',   help='Encrypted directory')
    parser.add_argument('-i', '--public-id',   help='GPG public id')
    parser.add_argument('-P', '--passphrase',
            help='Passphrase to decrypt files.')
    parser.add_argument('-H', '--gpg-homedir', help='GPG home directory')
    parser.add_argument('-k', '--gpg-keyring', help='GPG keyring file')
    parser.add_argument('-b', '--gpg-binary',  help='GPG binary file')

    args = parser.parse_args()

    if args.configure:
        header()
        c = RunConfig(database=database)
    elif args.encrypt:
        e = DirEncryption(args, database=database)
        e.encrypt_all()
    elif args.decrypt:
        if args.passphrase:
            passphrase = args.passphrase
        else:
            passphrase = getpass.getpass('Passphrase: ')
        e = DirEncryption(args, database=database)
        e.decrypt_all(passphrase)
    else:
        header()
        print('Please specify encrypt (-e) or decrypt (-d) operation,')
        print('or --configure to set up configuration.')