getting closer, need to match api now
This commit is contained in:
parent
35ec297406
commit
50d64c3e07
|
@ -3,6 +3,9 @@ class DictKvs(dict):
|
||||||
def set(self, key, value):
|
def set(self, key, value):
|
||||||
self[key] = value
|
self[key] = value
|
||||||
|
|
||||||
|
def delete(self, key):
|
||||||
|
del self[key]
|
||||||
|
|
||||||
INMEMDB = DictKvs()
|
INMEMDB = DictKvs()
|
||||||
|
|
||||||
class KvsIdentity(object):
|
class KvsIdentity(object):
|
||||||
|
@ -11,10 +14,9 @@ class KvsIdentity(object):
|
||||||
db = INMEMDB
|
db = INMEMDB
|
||||||
self.db = db
|
self.db = db
|
||||||
|
|
||||||
# Public Interface
|
# Public interface
|
||||||
def tenants_for_token(self, token_id):
|
def tenants_for_user(self, user_id):
|
||||||
token = self.db.get('token-%s' % token_id)
|
user = self.db.get('user-%s' % user_id)
|
||||||
user = self.db.get('user-%s' % token['user'])
|
|
||||||
o = []
|
o = []
|
||||||
for tenant_id in user['tenants']:
|
for tenant_id in user['tenants']:
|
||||||
o.append(self.db.get('tenant-%s' % tenant_id))
|
o.append(self.db.get('tenant-%s' % tenant_id))
|
||||||
|
@ -30,6 +32,20 @@ class KvsIdentity(object):
|
||||||
self.db.set('tenant-%s' % id, tenant)
|
self.db.set('tenant-%s' % id, tenant)
|
||||||
return tenant
|
return tenant
|
||||||
|
|
||||||
def _create_token(self, id, token):
|
|
||||||
self.db.set('token-%s' % id, token)
|
class KvsToken(object):
|
||||||
return token
|
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)
|
||||||
|
|
|
@ -25,7 +25,8 @@ class KeystoneIdentityController(service.IdentityController):
|
||||||
|
|
||||||
def get_tenants(self, context):
|
def get_tenants(self, context):
|
||||||
tenants = super(KeystoneIdentityController, self).get_tenants(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]}}
|
for x in tenants]}}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ class IdentityController(BaseApplication):
|
||||||
token = self.token_api.validate_token(context, token_id)
|
token = self.token_api.validate_token(context, token_id)
|
||||||
|
|
||||||
return self.identity_api.get_tenants(context,
|
return self.identity_api.get_tenants(context,
|
||||||
user_id=token['user']['id'])
|
user_id=token['user'])
|
||||||
|
|
||||||
|
|
||||||
class Router(wsgi.Router):
|
class Router(wsgi.Router):
|
||||||
|
|
|
@ -4,22 +4,24 @@
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from keystonelight import identity
|
from keystonelight import utils
|
||||||
|
|
||||||
STORE = {}
|
|
||||||
|
|
||||||
class Manager(object):
|
class Manager(object):
|
||||||
def __init__(self, options):
|
def __init__(self, options):
|
||||||
self.options = options
|
self.options = options
|
||||||
|
self.driver = utils.import_object(options['token_driver'],
|
||||||
|
options=options)
|
||||||
|
|
||||||
def create_token(self, context, data):
|
def create_token(self, context, data):
|
||||||
token = uuid.uuid4().hex
|
token = uuid.uuid4().hex
|
||||||
STORE[token] = data
|
data['id'] = token
|
||||||
return token
|
token_ref = self.driver.create_token(token, data)
|
||||||
|
return token_ref
|
||||||
|
|
||||||
def validate_token(self, context, token_id):
|
def validate_token(self, context, token_id):
|
||||||
"""Return info for a token if it is valid."""
|
"""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):
|
def revoke_token(self, context, token_id):
|
||||||
STORE.pop(token_id)
|
self.driver.delete_token(token_id)
|
||||||
|
|
|
@ -2,4 +2,5 @@
|
||||||
token_controller = keystonelight.keystone_compat.KeystoneTokenController
|
token_controller = keystonelight.keystone_compat.KeystoneTokenController
|
||||||
identity_controller = keystonelight.keystone_compat.KeystoneIdentityController
|
identity_controller = keystonelight.keystone_compat.KeystoneIdentityController
|
||||||
identity_driver = keystonelight.backends.kvs.KvsIdentity
|
identity_driver = keystonelight.backends.kvs.KvsIdentity
|
||||||
|
token_driver = keystonelight.backends.kvs.KvsToken
|
||||||
paste.app_factory = keystonelight.service:identity_app_factory
|
paste.app_factory = keystonelight.service:identity_app_factory
|
||||||
|
|
|
@ -42,27 +42,27 @@ class CompatTestCase(test.TestCase):
|
||||||
os.path.join(self.sampledir, 'tenants.json')))
|
os.path.join(self.sampledir, 'tenants.json')))
|
||||||
|
|
||||||
# For the tenants for token call
|
# For the tenants for token call
|
||||||
self.user_foo = self.backend._create_user(
|
self.user_foo = self.identity_backend._create_user(
|
||||||
'foo',
|
'foo',
|
||||||
models.User(id='foo', tenants=['1234', '3456']))
|
models.User(id='foo', tenants=['1234', '3456']))
|
||||||
self.tenant_1234 = self.backend._create_tenant(
|
self.tenant_1234 = self.identity_backend._create_tenant(
|
||||||
'1234',
|
'1234',
|
||||||
models.Tenant(id='1234',
|
models.Tenant(id='1234',
|
||||||
name='ACME Corp',
|
name='ACME Corp',
|
||||||
description='A description...',
|
description='A description...',
|
||||||
enabled=True))
|
enabled=True))
|
||||||
self.tenant_3456 = self.backend._create_tenant(
|
self.tenant_3456 = self.identity_backend._create_tenant(
|
||||||
'3456',
|
'3456',
|
||||||
models.Tenant(id='3456',
|
models.Tenant(id='3456',
|
||||||
name='Iron Works',
|
name='Iron Works',
|
||||||
description='A description...',
|
description='A description...',
|
||||||
enabled=True))
|
enabled=True))
|
||||||
|
|
||||||
self.token_foo_unscoped = self.backend._create_token(
|
self.token_foo_unscoped = self.token_backend.create_token(
|
||||||
'foo_unscoped',
|
'foo_unscoped',
|
||||||
models.Token(id='foo_unscoped',
|
models.Token(id='foo_unscoped',
|
||||||
user='foo'))
|
user='foo'))
|
||||||
self.token_foo_scoped = self.backend._create_token(
|
self.token_foo_scoped = self.token_backend.create_token(
|
||||||
'foo_scoped',
|
'foo_scoped',
|
||||||
models.Token(id='foo_unscoped',
|
models.Token(id='foo_unscoped',
|
||||||
user='foo',
|
user='foo',
|
||||||
|
@ -75,8 +75,10 @@ class HeadCompatTestCase(CompatTestCase):
|
||||||
self.sampledir = os.path.join(revdir, SAMPLE_DIR)
|
self.sampledir = os.path.join(revdir, SAMPLE_DIR)
|
||||||
self.app = self.loadapp('keystone_compat_HEAD')
|
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.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()
|
super(HeadCompatTestCase, self).setUp()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue