예제 #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.')