diff options
| author | Jorge L. Williams <jorge.williams@rackspace.com> | 2011-04-21 21:03:53 -0500 |
|---|---|---|
| committer | Jorge L. Williams <jorge.williams@rackspace.com> | 2011-04-21 21:03:53 -0500 |
| commit | 7eda7dd088e490d3dfff3498fc8fbd88a6df671e (patch) | |
| tree | 38a8fcf818d3a06fede54cb55ac4163d6a79f65d | |
| parent | 8bb4887abf9a56291fe38bd43ece5d5cbc8aebd5 (diff) | |
| download | keystone-7eda7dd088e490d3dfff3498fc8fbd88a6df671e.tar.gz keystone-7eda7dd088e490d3dfff3498fc8fbd88a6df671e.tar.xz keystone-7eda7dd088e490d3dfff3498fc8fbd88a6df671e.zip | |
Initial full response to authenticate token, still having issues with errors.
| -rw-r--r-- | keystone/identity2.py | 43 | ||||
| -rw-r--r-- | 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 |
