summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZiad Sawalha <github@highbridgellc.com>2011-06-14 23:33:57 -0500
committerZiad Sawalha <github@highbridgellc.com>2011-06-14 23:33:57 -0500
commitffd23970d416e1e8eab3dbe6daecd80ed81c2be1 (patch)
treeb34c09cd6469010baa2c66b05cf6ca30ab897e87
parent610e997fe665715a463177141c61b79f0df2e217 (diff)
downloadkeystone-ffd23970d416e1e8eab3dbe6daecd80ed81c2be1.tar.gz
keystone-ffd23970d416e1e8eab3dbe6daecd80ed81c2be1.tar.xz
keystone-ffd23970d416e1e8eab3dbe6daecd80ed81c2be1.zip
Support for GET /v2.0/users and add cdn back to sampledata for v1.0 support
-rwxr-xr-xbin/sampledata.sh3
-rwxr-xr-xetc/keystone.conf2
-rwxr-xr-xkeystone/db/sqlalchemy/api.py51
-rwxr-xr-xkeystone/logic/service.py25
-rwxr-xr-xkeystone/server.py11
5 files changed, 89 insertions, 3 deletions
diff --git a/bin/sampledata.sh b/bin/sampledata.sh
index 2309aecc..d8544ec0 100755
--- a/bin/sampledata.sh
+++ b/bin/sampledata.sh
@@ -27,7 +27,7 @@
# Users
./keystone-manage $* user add joeuser secrete 1234
./keystone-manage $* user add joeadmin secrete 1234
-./keystone-manage $* user add admin secrete 1234
+./keystone-manage $* user add admin secrete
./keystone-manage $* user add disabled secrete 1234
./keystone-manage $* user disable disabled
@@ -40,6 +40,7 @@
#BaseURLs
./keystone-manage $* baseURLs add ZONE1 swift http://localhost:8888/v1/AUTH_%tenant_id% admin.swift.local internal.swift.local 1
./keystone-manage $* baseURLs add ZONE1 nova http://localhost:8008/v1.1/%tenant_id% https://api.openstack.local/v1.1/%tenant_id% https://api.openstack.local/v1.1/%tenant_id% 1
+./keystone-manage $* baseURLs add ZONE1 cdn http://localhost:8080/v1.1/%tenant_id% https://api.openstack.local/v1.1/%tenant_id% https://api.openstack.local/v1.1/%tenant_id% 1
# Groups
#./keystone-manage $* group add Admin 1234
diff --git a/etc/keystone.conf b/etc/keystone.conf
index 259e3ef3..db0eeb44 100755
--- a/etc/keystone.conf
+++ b/etc/keystone.conf
@@ -27,7 +27,7 @@ sql_connection = sqlite:///../keystone/keystone.db
sql_idle_timeout = 30
#Dictionary Maps every service to a header.Missing services would get header X_(SERVICE_NAME) Key => Service Name, Value => Header Name
-service-header-mappings = {'nova' : 'X-Server-Management-Url' , 'swift' : 'X-Storage-Url', 'CDN' : 'X-CDN-Management-Url'}
+service-header-mappings = {'nova' : 'X-Server-Management-Url' , 'swift' : 'X-Storage-Url', 'cdn' : 'X-CDN-Management-Url'}
# Address to bind the API server
#TODO Properties defined within app not available via pipeline.Till then server props stay outside.
diff --git a/keystone/db/sqlalchemy/api.py b/keystone/db/sqlalchemy/api.py
index df1d4d4e..9341954b 100755
--- a/keystone/db/sqlalchemy/api.py
+++ b/keystone/db/sqlalchemy/api.py
@@ -488,6 +488,57 @@ def user_get(id, session=None):
return result
+def user_get_page(marker, limit, session=None):
+ if not session:
+ session = get_session()
+
+ if marker:
+ return session.query(models.User).filter("id>:marker").params(\
+ marker='%s' % marker).order_by(\
+ models.User.id.desc()).limit(limit).all()
+ else:
+ return session.query(models.User).order_by(\
+ models.User.id.desc()).limit(limit).all()
+
+
+def user_get_page_markers(marker, limit, session=None):
+ if not session:
+ session = get_session()
+ first = session.query(models.User).order_by(\
+ models.User.id).first()
+ last = session.query(models.User).order_by(\
+ models.User.id.desc()).first()
+ if first is None:
+ return (None, None)
+ if marker is None:
+ marker = first.id
+ next = session.query(models.User).filter("id > :marker").params(\
+ marker='%s' % marker).order_by(\
+ models.User.id).limit(limit).all()
+ prev = session.query(models.User).filter("id < :marker").params(\
+ marker='%s' % marker).order_by(\
+ models.User.id.desc()).limit(int(limit)).all()
+ if len(next) == 0:
+ next = last
+ else:
+ for t in next:
+ next = t
+ if len(prev) == 0:
+ prev = first
+ else:
+ for t in prev:
+ prev = t
+ if prev.id == marker:
+ prev = None
+ else:
+ prev = prev.id
+ if next.id == last.id:
+ next = None
+ else:
+ next = next.id
+ return (prev, next)
+
+
def user_get_email(email, session=None):
if not session:
session = get_session()
diff --git a/keystone/logic/service.py b/keystone/logic/service.py
index ba40d247..4030e06b 100755
--- a/keystone/logic/service.py
+++ b/keystone/logic/service.py
@@ -210,7 +210,6 @@ class IdentityService(object):
#
# Tenant Group Operations
#
-
def create_tenant_group(self, admin_token, tenant, group):
self.__validate_token(admin_token)
@@ -511,6 +510,30 @@ class IdentityService(object):
return users.User_Update(None, duser.id, duser.tenant_id, duser.email,
duser.enabled, ts)
+ ##
+ ## GET Users with Pagination
+ ##
+ def get_users(self, admin_token, marker, limit, url):
+ (token, user) = self.__validate_token(admin_token)
+ # If Global admin return all tenants.
+ us = []
+ dusers = db_api.user_get_page(marker, limit)
+ for duser in dusers:
+ us.append(users.User(None,
+ duser.id,
+ duser.tenant_id,
+ duser.email,
+ duser.enabled))
+ prev, next = db_api.user_get_page_markers(marker, limit)
+ links = []
+ if prev:
+ links.append(atom.Link('prev', "%s?'marker=%s&limit=%s'" \
+ % (url, prev, limit)))
+ if next:
+ links.append(atom.Link('next', "%s?'marker=%s&limit=%s'" \
+ % (url, next, limit)))
+ return users.Users(us, links)
+
def update_user(self, admin_token, user_id, user):
self.__validate_token(admin_token)
diff --git a/keystone/server.py b/keystone/server.py
index 1e481311..e58185d1 100755
--- a/keystone/server.py
+++ b/keystone/server.py
@@ -285,6 +285,13 @@ class UserController(wsgi.Controller):
user))
@utils.wrap_error
+ def get_users(self, req):
+ marker, limit, url = get_marker_limit_and_url(req)
+ users = service.get_users(utils.get_auth_token(req), marker,
+ limit, url)
+ return utils.send_result(200, req, users)
+
+ @utils.wrap_error
def get_user(self, req, user_id):
user = service.get_user(utils.get_auth_token(req), user_id)
return utils.send_result(200, req, user)
@@ -653,6 +660,10 @@ class KeystoneAdminAPI(wsgi.Router):
controller=user_controller,
action="create_user",
conditions=dict(method=["PUT"]))
+ mapper.connect("/v2.0/users",
+ controller=user_controller,
+ action="get_users",
+ conditions=dict(method=["GET"]))
mapper.connect("/v2.0/users/{user_id}",
controller=user_controller,
action="get_user",