X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=utils%2Ftest%2Ftestapi%2Fopnfv_testapi%2Fresources%2Fhandlers.py;h=15096468c3a930a4f03baa6f1da8709864989732;hb=11590f3fdf57ad7526de743d9723eb90ba462d68;hp=89e91b3a15e9d8c6bfa69cee55a5f4cafa90cfef;hpb=88c250214b1b340db72e7e1799883330aeee37fa;p=releng.git diff --git a/utils/test/testapi/opnfv_testapi/resources/handlers.py b/utils/test/testapi/opnfv_testapi/resources/handlers.py index 89e91b3a1..15096468c 100644 --- a/utils/test/testapi/opnfv_testapi/resources/handlers.py +++ b/utils/test/testapi/opnfv_testapi/resources/handlers.py @@ -21,6 +21,7 @@ ############################################################################## from datetime import datetime +import functools import json from tornado import gen @@ -43,6 +44,7 @@ class GenericApiHandler(web.RequestHandler): self.db_testcases = 'testcases' self.db_results = 'results' self.db_scenarios = 'scenarios' + self.auth = self.settings["auth"] def prepare(self): if self.request.method != "GET" and self.request.method != "DELETE": @@ -70,8 +72,27 @@ class GenericApiHandler(web.RequestHandler): cls_data = self.table_cls.from_dict(data) return cls_data.format_http() - @web.asynchronous - @gen.coroutine + def authenticate(method): + @web.asynchronous + @gen.coroutine + @functools.wraps(method) + def wrapper(self, *args, **kwargs): + if self.auth: + try: + token = self.request.headers['X-Auth-Token'] + except KeyError: + raise web.HTTPError(constants.HTTP_UNAUTHORIZED, + "No Authentication Header.") + query = {'access_token': token} + check = yield self._eval_db_find_one(query, 'tokens') + if not check: + raise web.HTTPError(constants.HTTP_FORBIDDEN, + "Invalid Token.") + ret = yield gen.coroutine(method)(self, *args, **kwargs) + raise gen.Return(ret) + return wrapper + + @authenticate def _create(self, miss_checks, db_checks, **kwargs): """ :param miss_checks: [miss1, miss2] @@ -135,8 +156,7 @@ class GenericApiHandler(web.RequestHandler): .format(query, self.table)) self.finish_request(self.format_data(data)) - @web.asynchronous - @gen.coroutine + @authenticate def _delete(self, query): data = yield self._eval_db_find_one(query) if data is None: @@ -147,8 +167,7 @@ class GenericApiHandler(web.RequestHandler): yield self._eval_db(self.table, 'remove', query) self.finish_request() - @web.asynchronous - @gen.coroutine + @authenticate def _update(self, query, db_keys): if self.json_args is None: raise web.HTTPError(constants.HTTP_BAD_REQUEST, "No payload")