From 50d64c3e07255563c44cdc50a4b5a27cbdeeedcf Mon Sep 17 00:00:00 2001 From: termie Date: Tue, 11 Oct 2011 16:26:55 -0700 Subject: [PATCH] getting closer, need to match api now --- keystonelight/backends/kvs.py | 30 +++++++++++++++++++++++------- keystonelight/keystone_compat.py | 3 ++- keystonelight/service.py | 2 +- keystonelight/token.py | 14 ++++++++------ tests/keystone_compat_HEAD.conf | 1 + tests/test_keystone_compat.py | 14 ++++++++------ 6 files changed, 43 insertions(+), 21 deletions(-) diff --git a/keystonelight/backends/kvs.py b/keystonelight/backends/kvs.py index 55289051f1..a3d8b73f4f 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 e500e7d04b..bccf51d67f 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 935b50e537..a4075fd077 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 e29d637d34..f5e262ffd8 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 5976c0b1e3..9154af1a16 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 f3bb1d3fe1..95822d8f58 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()