コード例 #1
0
    def __init__(self, api_address, api_token):
        self.api_address = api_address
        self.api_token = api_token

        self._http_client = RequestsClient()

        self.backend_swagger_client = SwaggerClient.from_url(
            '{}/api/backend/swagger.json'.format(self.api_address),
            config=dict(validate_swagger_spec=False,
                        validate_requests=False,
                        validate_responses=False,
                        formats=[uuid_format]),
            http_client=self._http_client)

        self.leaderboard_swagger_client = SwaggerClient.from_url(
            '{}/api/leaderboard/swagger.json'.format(self.api_address),
            config=dict(validate_swagger_spec=False,
                        validate_requests=False,
                        validate_responses=False,
                        formats=[uuid_format]),
            http_client=self._http_client)

        self.authenticator = NeptuneAuthenticator(
            self.backend_swagger_client.api.exchangeApiToken(
                X_Neptune_Api_Token=api_token).response().result)
        self._http_client.authenticator = self.authenticator
コード例 #2
0
def create_http_client_with_auth(
        credentials: Credentials, ssl_verify: bool,
        proxies: Dict[str, str]) -> Tuple[RequestsClient, ClientConfig]:
    client_config = get_client_config(credentials=credentials,
                                      ssl_verify=ssl_verify,
                                      proxies=proxies)

    config_api_url = credentials.api_url_opt or credentials.token_origin_address

    verify_client_version(client_config, neptune_client_version)

    endpoint_url = None
    if config_api_url != client_config.api_url:
        endpoint_url = build_operation_url(client_config.api_url,
                                           BACKEND_SWAGGER_PATH)

    http_client = create_http_client(ssl_verify=ssl_verify, proxies=proxies)
    http_client.authenticator = NeptuneAuthenticator(
        credentials.api_token,
        _get_token_client(
            credentials=credentials,
            ssl_verify=ssl_verify,
            proxies=proxies,
            endpoint_url=endpoint_url,
        ),
        ssl_verify,
        proxies,
    )

    return http_client, client_config
コード例 #3
0
    def test_apply_oauth2_session_to_request(self, time_mock, session_mock):
        # given
        api_token = MagicMock()
        backend_client = MagicMock()

        auth_tokens = MagicMock()
        auth_tokens.accessToken = an_access_token()
        auth_tokens.refreshToken = a_refresh_token()
        decoded_access_token = jwt.decode(auth_tokens.accessToken,
                                          SECRET,
                                          options=_decoding_options)

        backend_client.api.exchangeApiToken(
            X_Neptune_Api_Token=api_token).response().result = auth_tokens

        # and
        now = time.time()
        time_mock.time.return_value = now

        # and
        session = MagicMock()
        session_mock.return_value = session
        session.token = dict()

        # and
        neptune_authenticator = NeptuneAuthenticator(api_token, backend_client,
                                                     False, None)
        request = a_request()

        # when
        updated_request = neptune_authenticator.apply(request)

        # then
        expected_token = {
            "access_token": auth_tokens.accessToken,
            "refresh_token": auth_tokens.refreshToken,
            "expires_in": decoded_access_token["exp"] - now,
        }

        expected_auto_refresh_url = "{realm_url}/protocol/openid-connect/token".format(
            realm_url=decoded_access_token["iss"])

        session_mock.assert_called_once_with(
            client_id=decoded_access_token["azp"],
            token=expected_token,
            auto_refresh_url=expected_auto_refresh_url,
            auto_refresh_kwargs={"client_id": decoded_access_token["azp"]},
            token_updater=_no_token_updater,
        )

        # and
        self.assertEqual(session, updated_request.auth.session)
コード例 #4
0
    def test_apply_oauth2_session_to_request(self, time_mock, session_mock):
        # given
        auth_tokens = MagicMock()
        auth_tokens.accessToken = an_access_token()
        auth_tokens.refreshToken = a_refresh_token()
        decoded_access_token = jwt.decode(auth_tokens.accessToken, SECRET)

        # and
        now = time.time()
        time_mock.time.return_value = now

        # and
        session = MagicMock()
        session_mock.return_value = session
        session.token = dict()

        # and
        neptune_authenticator = NeptuneAuthenticator(auth_tokens, False, None)
        request = a_request()

        # when
        updated_request = neptune_authenticator.apply(request)

        # then
        expected_token = {
            'access_token': auth_tokens.accessToken,
            'refresh_token': auth_tokens.refreshToken,
            'expires_in': decoded_access_token['exp'] - now
        }

        expected_auto_refresh_url = '{realm_url}/protocol/openid-connect/token'.format(
            realm_url=decoded_access_token['iss'])

        session_mock.assert_called_once_with(
            client_id=decoded_access_token['azp'],
            token=expected_token,
            auto_refresh_url=expected_auto_refresh_url,
            auto_refresh_kwargs={'client_id': decoded_access_token['azp']},
            token_updater=_no_token_updater)

        # and
        self.assertEqual(session, updated_request.auth.session)
コード例 #5
0
 def _create_authenticator(self, api_token, ssl_verify, proxies, backend_client):
     return NeptuneAuthenticator(api_token, backend_client, ssl_verify, proxies)
コード例 #6
0
 def _create_authenticator(self, api_token, ssl_verify, proxies):
     return NeptuneAuthenticator(
         self.backend_swagger_client.api.exchangeApiToken(X_Neptune_Api_Token=api_token).response().result,
         ssl_verify,
         proxies
     )