From 7eda7dd088e490d3dfff3498fc8fbd88a6df671e Mon Sep 17 00:00:00 2001 From: "Jorge L. Williams" Date: Thu, 21 Apr 2011 21:03:53 -0500 Subject: Initial full response to authenticate token, still having issues with errors. --- keystone/identity2.py | 43 ++++++++++++++++++++++++++++++++++++++++++- keystone/logic/service.py | 15 ++++++++++----- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/keystone/identity2.py b/keystone/identity2.py index d80ef086..4349923b 100644 --- a/keystone/identity2.py +++ b/keystone/identity2.py @@ -19,6 +19,38 @@ import bottle from bottle import route from bottle import run from bottle import request +from bottle import response +from bottle import abort + +import keystone.logic.service as serv +import keystone.logic.types.auth as auth +import keystone.logic.types.tenant as tenant +import keystone.logic.types.fault as fault + +bottle.debug(True) + +service = serv.IDMService() + +def is_xml_response(): + if not "Accept" in request.header: + return False + return request.header["Accept"] == "application/xml" + +def send_result(result, code=500): + if is_xml_response(): + ret = result.to_xml() + response.content_type = "application/xml" + else: + ret = result.to_json() + response.content_type = "application/json" + response.status = code + return ret + +def send_error(error): + if isinstance(error, fault.IDMFault): + send_result (error, error.code) + else: + send_result (fault.IDMFault("Unhandled error", error.__str__())) @route('/v1.0/token', method='POST') def authenticate(): @@ -26,7 +58,16 @@ def authenticate(): @route('/v1.0/token/:token_id', method='GET') def validate_token(token_id): - return "Good token "+token_id+" is good!" + try: + belongs_to = None + if "belongsTo" in request.GET: + belongs_to = request.GET["belongsTo"] + auth_token = None + if "X-Auth-Token" in request.header: + auth_token = request.header["X-Auth-Token"] + return send_result (service.validate_token(auth_token, token_id, belongs_to)) + except Exception as e: + return send_error (e) @route('/v1.0/token/:token_id', method='DELETE') def delete_token(token_id): diff --git a/keystone/logic/service.py b/keystone/logic/service.py index c7b1aa22..e6ca1bcb 100644 --- a/keystone/logic/service.py +++ b/keystone/logic/service.py @@ -17,7 +17,6 @@ import keystone.logic.types.auth as auth import keystone.logic.types.tenant as tenant import keystone.logic.types.atom as atom import keystone.logic.types.fault as fault -import keystone.db.sqlalchemy.api as db_api class IDMService(object): @@ -32,7 +31,14 @@ class IDMService(object): True def validate_token(self, admin_token, token_id, belongs_to=None): - True + self.__validate_admin_token(admin_token) + group1 = auth.Group("Admin","19928") + group2 = auth.Group("Other","28882") + gs = [group1, group2] + groups = auth.Groups(gs,[]) + user = auth.User("joeuser","19928", groups) + token = auth.Token ("2010-11-01T03:32:15-05:00", "388376625525637773") + return auth.AuthData(token, user) def revoke_token(self, admin_token, token_id): True @@ -46,8 +52,7 @@ class IDMService(object): True def get_tenant(self, admin_token, tenant_id): - #TODO: Validate the admin_token - return db_api.tenant_get(tenant_id) + True def get_tenants(self, admin_token, marker, limit): True @@ -65,6 +70,6 @@ class IDMService(object): # def __validate_admin_token(self, admin_token): if not admin_token: - raise fault.ForbiddenFault("You are not authorized this operation") + raise fault.UnauthorizedFault("Missing admin token") True -- cgit