示例#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)
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())
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)
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.')