Esempio n. 1
0
    def test_gets_passwords_correctly(self, mock_post):
        pm = PasswordManager(key='tests/fixtures/privkey.pem')

        def encrypt_text(text):
            public_key = pm._rsa_verifier.public_key()
            encrypted_key = public_key.encrypt(text.encode('ascii'),
                                               padding.PKCS1v15())
            return base64.b64encode(bytes(encrypted_key))

        mock_response = Mock()
        mock_response.json.return_value = {
            'status': 'success',
            'password': {
                'url': encrypt_text('a'),
                'login': encrypt_text('b'),
                'passwd': encrypt_text('c'),
                'description': encrypt_text('d'),
            }
        }
        mock_post.return_value = mock_response

        passwords = pm.get_passwords('folder-name', 'password-name')

        self.assertEqual(passwords['password-name']['url'], 'a')
        self.assertEqual(passwords['password-name']['login'], 'b')
        self.assertEqual(passwords['password-name']['password'], 'c')
        self.assertEqual(passwords['password-name']['description'], 'd')
Esempio n. 2
0
    def test_request_to_get_password_returns_error(self, mock_post):
        mock_response = Mock()
        mock_response.json.return_value = {'status': 'error', 'password': ''}
        mock_post.return_value = mock_response
        pm = PasswordManager(key='tests/fixtures/privkey.pem')

        passwords = pm.get_passwords('folder-name', 'password-name')

        self.assertDictEqual(passwords, {})
Esempio n. 3
0
    def test_response_to_get_token_returns_error(self, mock_post):
        mock_post.side_effect = Exception('Boom!')

        with self.assertRaises(Exception) as context_manager:
            PasswordManager(key='tests/fixtures/privkey.pem')

        self.assertEqual(str(context_manager.exception),
                         'There was error requesting token. Error was: Boom!')
    def test_response_to_get_token_is_not_ok(self, mock_post):
        mock_response = Mock()
        mock_response.ok = False
        mock_post.return_value = mock_response

        pm = PasswordManager(key='tests/fixtures/privkey.pem')

        self.assertIsNone(pm._token)
Esempio n. 5
0
    def test_response_to_get_token_is_ok(self, mock_post):
        mock_response = Mock()
        mock_response.ok = True
        mock_response.json.return_value = {'token': 'my-fake-token'}
        mock_post.return_value = mock_response

        pm = PasswordManager(key='tests/fixtures/privkey.pem')

        self.assertEqual(pm._token, 'my-fake-token')
Esempio n. 6
0
    def test_response_to_get_token_is_ok_but_there_is_no_token(
            self, mock_post):
        mock_response = Mock()
        mock_response.ok = True
        mock_response.json.return_value = {}
        mock_post.return_value = mock_response

        pm = PasswordManager(key='tests/fixtures/privkey.pem')

        self.assertIsNone(pm._token)
Esempio n. 7
0
    def test_response_to_get_token_is_not_ok(self, mock_post):
        mock_response = Mock()
        mock_response.ok = False
        mock_response.status_code = 500
        mock_post.return_value = mock_response

        with self.assertRaises(TokenError) as context_manager:
            PasswordManager(key='tests/fixtures/privkey.pem')

        self.assertEqual(
            str(context_manager.exception),
            'Response status code to get token is not ok. Status code was: 500'
        )
    def test_gets_passwords_correctly_vault_true(self, mock_post):
        pm = PasswordManager(key='tests/fixtures/privkey.pem')

        def b64_encode(text):
            return base64.b64encode(bytes(text, 'utf-8')).decode()

        mock_response = Mock()
        mock_response.json.return_value = {
            'status': 'success',
            'password': {
                'url': b64_encode('a'),
                'login': b64_encode('b'),
                'passwd': b64_encode('c'),
                'description': b64_encode('d'),
                'vault': True
            }
        }
        mock_post.return_value = mock_response

        passwords = pm.get_passwords('folder-name', 'password-name')
        self.assertEqual(passwords['password-name']['url'], 'a')
        self.assertEqual(passwords['password-name']['login'], 'b')
        self.assertEqual(passwords['password-name']['password'], 'c')
        self.assertEqual(passwords['password-name']['description'], 'd')
Esempio n. 9
0
    def test_try_to_get_password_but_password_name_is_not_passed(self):
        pm = PasswordManager(key='tests/fixtures/privkey.pem')

        passwords = pm.get_passwords('folder-name')

        self.assertDictEqual(passwords, {})
Esempio n. 10
0
    def test_invalid_key_path_raises_exception(self):
        with self.assertRaises(ValueError) as context_manager:
            PasswordManager(key='/this/path/does/not/exists')

        self.assertEqual(str(context_manager.exception),
                         'Key File does not exist')
Esempio n. 11
0
    def test_invalid_key_raises_exception(self):
        with self.assertRaises(Exception) as context_manager:
            PasswordManager(key='')

        self.assertEqual(str(context_manager.exception),
                         'Error loading private key')
def test_key_load_error():
    with pytest.raises(Exception) as excinfo:
        PasswordManager(key='')
    assert "key load error" in str(excinfo.value)
Esempio n. 13
0
              '-n',
              help='Name of password',
              multiple=True,
              required=True)
@click.option('--prefix', '-p', help='Prefix for exports', default="GSENHA_")
def get(folder, name, prefix):
    export_string = ''
    passwd = PM.get_passwords(folder, *name)
    for p in passwd:
        export_string += '\n'
        export_string += '#' * 20
        export_string += ' Keys for {name} \n\n'.format(name=p)
        for key in passwd[p]:
            key_name = EXPORT_KEYS.sub(
                '', '{p}_{key}'.format(p=p.upper(), key=key.upper()))
            export_string += 'export {prefix}{key}=\'{value}\' \n'.format(
                prefix=prefix, key=key_name, value=passwd[p][key])
    click.echo(export_string)


gsenha = click.CommandCollection(sources=[password])

if __name__ == '__main__':
    if validate_env('GSENHA_ENDPOINT') and validate_env(
            'GSENHA_USER') and validate_env('GSENHA_PASS') and validate_env(
                'GSENHA_KEY', 'GSENHA_KEY_PATH'):
        PM = PasswordManager()
        gsenha()
    else:
        exit(1)