def create_token(api, settings, email, password): while True: try: if get_user_config(settings).get('ssh_auth') and password is None: key_path = get_user_config(settings).get('ssh_path', get_default_ssh_key_path()) fingerprint = get_public_key_fingerprint(key_path) if not fingerprint: raise PublicKeyException('WrongPublicKey') ssh_token = api.create_ssh_token() signature = sign_token(key_path, fingerprint, ssh_token) return api.create_token_ssh_auth(email, ssh_token, signature, fingerprint) else: return api.create_token_basic_auth(email, password) except (cclib.APIException, SignatureException, PublicKeyException) as e: if password is not None: sys.exit(messages['NotAuthorized']) print >> sys.stderr, str(e) + " " + messages['NotAuthorizedPublicKey'] password = get_password_env(settings) if not password: password = get_password()
def test_get_public_key_fingerprint_use_default_path(self, open, **kwargs): open.return_value.read.return_value = self.TEST_PUB_KEY self.assertEqual(self.TEST_FINGERPRINT, get_public_key_fingerprint(None)) self.assertEqual([ call(os.path.expanduser('~') + '/.ssh/id_rsa.pub'), call().read() ], open.mock_calls)
def test_get_public_key_fingerprint_key_not_found(self, open, **kwargs): open.side_effect = IOError('File not found') self.assertEqual(None, get_public_key_fingerprint('path')) self.assertEqual([call('path')], open.mock_calls)
def test_get_public_key_fingerprint(self, open, **kwargs): open.return_value.read.return_value = self.TEST_PUB_KEY self.assertEqual(self.TEST_FINGERPRINT, get_public_key_fingerprint('path')) self.assertEqual([call('path'), call().read()], open.mock_calls)
def test_get_public_key_fingerprint_key_not_found(self, open, **kwargs): open.side_effect = IOError('File not found') self.assertEqual(None, get_public_key_fingerprint('path')) self.assertEqual([call('path')], open.mock_calls)
def test_get_public_key_fingerprint_use_default_path(self, open, **kwargs): open.return_value.read.return_value = self.TEST_PUB_KEY self.assertEqual(self.TEST_FINGERPRINT, get_public_key_fingerprint(None)) self.assertEqual([call(os.path.expanduser('~') + '/.ssh/id_rsa.pub'), call().read()], open.mock_calls)
def test_get_public_key_fingerprint(self, open, **kwargs): open.return_value.read.return_value = self.TEST_PUB_KEY self.assertEqual(self.TEST_FINGERPRINT, get_public_key_fingerprint('path')) self.assertEqual([call('path'), call().read()], open.mock_calls)