summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortermie <github@anarkystic.com>2011-10-11 16:26:55 -0700
committertermie <github@anarkystic.com>2011-10-11 16:26:55 -0700
commit50d64c3e07255563c44cdc50a4b5a27cbdeeedcf (patch)
tree6ae68b9d7c8af31adc7b8cfbd349b736991b3f33
parent35ec29740681f0e016f66a1be82aa5469db6c59b (diff)
downloadkeystone-50d64c3e07255563c44cdc50a4b5a27cbdeeedcf.tar.gz
keystone-50d64c3e07255563c44cdc50a4b5a27cbdeeedcf.tar.xz
keystone-50d64c3e07255563c44cdc50a4b5a27cbdeeedcf.zip
getting closer, need to match api now
-rw-r--r--keystonelight/backends/kvs.py30
-rw-r--r--keystonelight/keystone_compat.py3
-rw-r--r--keystonelight/service.py2
-rw-r--r--keystonelight/token.py14
-rw-r--r--tests/keystone_compat_HEAD.conf1
-rw-r--r--tests/test_keystone_compat.py14
6 files changed, 43 insertions, 21 deletions
diff --git a/keystonelight/backends/kvs.py b/keystonelight/backends/kvs.py
index 55289051..a3d8b73f 100644
--- a/keystonelight/backends/kvs.py
+++ b/keystonelight/backends/kvs.py
@@ -3,6 +3,9 @@ class DictKvs(dict):
def set(self, key, value):
self[key] = value
+ def delete(self, key):
+ del self[key]
+
INMEMDB = DictKvs()
class KvsIdentity(object):
@@ -11,10 +14,9 @@ class KvsIdentity(object):
db = INMEMDB
self.db = db
- # Public Interface
- def tenants_for_token(self, token_id):
- token = self.db.get('token-%s' % token_id)
- user = self.db.get('user-%s' % token['user'])
+ # Public interface
+ def tenants_for_user(self, user_id):
+ user = self.db.get('user-%s' % user_id)
o = []
for tenant_id in user['tenants']:
o.append(self.db.get('tenant-%s' % tenant_id))
@@ -30,6 +32,20 @@ class KvsIdentity(object):
self.db.set('tenant-%s' % id, tenant)
return tenant
- def _create_token(self, id, token):
- self.db.set('token-%s' % id, token)
- return token
+
+class KvsToken(object):
+ def __init__(self, options, db=None):
+ if db is None:
+ db = INMEMDB
+ self.db = db
+
+ # Public interface
+ def get_token(self, id):
+ return self.db.get('token-%s' % id)
+
+ def create_token(self, id, data):
+ self.db.set('token-%s' % id, data)
+ return data
+
+ def delete_token(self, id):
+ return self.db.delete('token-%s' % id)
diff --git a/keystonelight/keystone_compat.py b/keystonelight/keystone_compat.py
index e500e7d0..bccf51d6 100644
--- a/keystonelight/keystone_compat.py
+++ b/keystonelight/keystone_compat.py
@@ -25,7 +25,8 @@ class KeystoneIdentityController(service.IdentityController):
def get_tenants(self, context):
tenants = super(KeystoneIdentityController, self).get_tenants(context)
- return {'tenants': {'values': [{'id': x['id'], 'description': x['name'], 'enabled': True}
+ return {'tenants': {'values': [{'id': x['id'],
+ 'description': x['name'], 'enabled': True}
for x in tenants]}}
diff --git a/keystonelight/service.py b/keystonelight/service.py
index 935b50e5..a4075fd0 100644
--- a/keystonelight/service.py
+++ b/keystonelight/service.py
@@ -149,7 +149,7 @@ class IdentityController(BaseApplication):
token = self.token_api.validate_token(context, token_id)
return self.identity_api.get_tenants(context,
- user_id=token['user']['id'])
+ user_id=token['user'])
class Router(wsgi.Router):
diff --git a/keystonelight/token.py b/keystonelight/token.py
index e29d637d..f5e262ff 100644
--- a/keystonelight/token.py
+++ b/keystonelight/token.py
@@ -4,22 +4,24 @@
import uuid
-from keystonelight import identity
+from keystonelight import utils
-STORE = {}
class Manager(object):
def __init__(self, options):
self.options = options
+ self.driver = utils.import_object(options['token_driver'],
+ options=options)
def create_token(self, context, data):
token = uuid.uuid4().hex
- STORE[token] = data
- return token
+ data['id'] = token
+ token_ref = self.driver.create_token(token, data)
+ return token_ref
def validate_token(self, context, token_id):
"""Return info for a token if it is valid."""
- return STORE.get(token_id)
+ return self.driver.get_token(token_id)
def revoke_token(self, context, token_id):
- STORE.pop(token_id)
+ self.driver.delete_token(token_id)
diff --git a/tests/keystone_compat_HEAD.conf b/tests/keystone_compat_HEAD.conf
index 5976c0b1..9154af1a 100644
--- a/tests/keystone_compat_HEAD.conf
+++ b/tests/keystone_compat_HEAD.conf
@@ -2,4 +2,5 @@
token_controller = keystonelight.keystone_compat.KeystoneTokenController
identity_controller = keystonelight.keystone_compat.KeystoneIdentityController
identity_driver = keystonelight.backends.kvs.KvsIdentity
+token_driver = keystonelight.backends.kvs.KvsToken
paste.app_factory = keystonelight.service:identity_app_factory
diff --git a/tests/test_keystone_compat.py b/tests/test_keystone_compat.py
index f3bb1d3f..95822d8f 100644
--- a/tests/test_keystone_compat.py
+++ b/tests/test_keystone_compat.py
@@ -42,27 +42,27 @@ class CompatTestCase(test.TestCase):
os.path.join(self.sampledir, 'tenants.json')))
# For the tenants for token call
- self.user_foo = self.backend._create_user(
+ self.user_foo = self.identity_backend._create_user(
'foo',
models.User(id='foo', tenants=['1234', '3456']))
- self.tenant_1234 = self.backend._create_tenant(
+ self.tenant_1234 = self.identity_backend._create_tenant(
'1234',
models.Tenant(id='1234',
name='ACME Corp',
description='A description...',
enabled=True))
- self.tenant_3456 = self.backend._create_tenant(
+ self.tenant_3456 = self.identity_backend._create_tenant(
'3456',
models.Tenant(id='3456',
name='Iron Works',
description='A description...',
enabled=True))
- self.token_foo_unscoped = self.backend._create_token(
+ self.token_foo_unscoped = self.token_backend.create_token(
'foo_unscoped',
models.Token(id='foo_unscoped',
user='foo'))
- self.token_foo_scoped = self.backend._create_token(
+ self.token_foo_scoped = self.token_backend.create_token(
'foo_scoped',
models.Token(id='foo_unscoped',
user='foo',
@@ -75,8 +75,10 @@ class HeadCompatTestCase(CompatTestCase):
self.sampledir = os.path.join(revdir, SAMPLE_DIR)
self.app = self.loadapp('keystone_compat_HEAD')
- self.backend = utils.import_object(
+ self.identity_backend = utils.import_object(
self.app.options['identity_driver'], options=self.app.options)
+ self.token_backend = utils.import_object(
+ self.app.options['token_driver'], options=self.app.options)
super(HeadCompatTestCase, self).setUp()