From 84b82436fd710bd40a5b7251528430330771e7b1 Mon Sep 17 00:00:00 2001 From: Jamie Lennox Date: Tue, 11 Mar 2014 08:13:23 +1000 Subject: [PATCH] Handle Token/Endpoint authentication This is essentially the Admin token where your authentication will always use a given token and have no means of querying information from within that token blob. Change-Id: Ia4317836d6fc1e62c65a1dcbd84c820d90832dc4 --- keystoneclient/auth/token_endpoint.py | 31 ++++++++++++++++ .../tests/auth/test_token_endpoint.py | 35 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 keystoneclient/auth/token_endpoint.py create mode 100644 keystoneclient/tests/auth/test_token_endpoint.py diff --git a/keystoneclient/auth/token_endpoint.py b/keystoneclient/auth/token_endpoint.py new file mode 100644 index 000000000..27d96734b --- /dev/null +++ b/keystoneclient/auth/token_endpoint.py @@ -0,0 +1,31 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +from keystoneclient.auth import base + + +class Token(base.BaseAuthPlugin): + """A provider that will always use the given token and endpoint. + + This is really only useful for testing and in certain CLI cases where you + have a known endpoint and admin token that you want to use. + """ + + def __init__(self, endpoint, token): + # NOTE(jamielennox): endpoint is reserved for when plugins + # can be used to provide that information + self.endpoint = endpoint + self.token = token + + def get_token(self, session): + return self.token diff --git a/keystoneclient/tests/auth/test_token_endpoint.py b/keystoneclient/tests/auth/test_token_endpoint.py new file mode 100644 index 000000000..59554251c --- /dev/null +++ b/keystoneclient/tests/auth/test_token_endpoint.py @@ -0,0 +1,35 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import httpretty + +from keystoneclient.auth import token_endpoint +from keystoneclient import session +from keystoneclient.tests import utils + + +class TokenEndpointTest(utils.TestCase): + + TEST_TOKEN = 'aToken' + TEST_URL = 'http://server/prefix' + + @httpretty.activate + def test_basic_case(self): + httpretty.register_uri(httpretty.GET, self.TEST_URL, body='body') + + a = token_endpoint.Token(self.TEST_URL, self.TEST_TOKEN) + s = session.Session(auth=a) + + data = s.get(self.TEST_URL, authenticated=True) + + self.assertEqual(data.text, 'body') + self.assertRequestHeaderEqual('X-Auth-Token', self.TEST_TOKEN)