getting closer, need to match api now

This commit is contained in:
termie 2011-10-11 16:26:55 -07:00
parent 35ec297406
commit 50d64c3e07
6 changed files with 43 additions and 21 deletions

View File

@ -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)

View File

@ -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]}}

View File

@ -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):

View File

@ -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)

View File

@ -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

View File

@ -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()