diff options
author | Serena Feng <feng.xiaowei@zte.com.cn> | 2017-10-30 12:28:31 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@opnfv.org> | 2017-10-30 12:28:31 +0000 |
commit | 529b408c84abb20e3ac28f5d07fe485d9f55ac12 (patch) | |
tree | bd4b0f860af6379896be8f4576f6e25f20ad887b /testapi/opnfv_testapi/handlers/sign_handlers.py | |
parent | 7d32f7713668e69c89f0cb9fdd0fe2d5c293280b (diff) | |
parent | 9db91e3b166f07750a045d5e24f820837f5772b4 (diff) |
Merge "divide resources into handlers and models"
Diffstat (limited to 'testapi/opnfv_testapi/handlers/sign_handlers.py')
-rw-r--r-- | testapi/opnfv_testapi/handlers/sign_handlers.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/testapi/opnfv_testapi/handlers/sign_handlers.py b/testapi/opnfv_testapi/handlers/sign_handlers.py new file mode 100644 index 0000000..7540662 --- /dev/null +++ b/testapi/opnfv_testapi/handlers/sign_handlers.py @@ -0,0 +1,59 @@ +from cas import CASClient +from tornado import gen +from tornado import web + +from opnfv_testapi.common import constants +from opnfv_testapi.common.config import CONF +from opnfv_testapi.db import api as dbapi +from opnfv_testapi.handlers import base_handlers + + +class SignBaseHandler(base_handlers.GenericApiHandler): + def __init__(self, application, request, **kwargs): + super(SignBaseHandler, self).__init__(application, request, **kwargs) + self.table = 'users' + self.cas_client = CASClient(version='2', + server_url=CONF.lfid_cas_url, + service_url='{}/{}'.format( + CONF.ui_url, + CONF.lfid_signin_return)) + + +class SigninHandler(SignBaseHandler): + def get(self): + self.redirect(url=(self.cas_client.get_login_url())) + + +class SigninReturnHandler(SignBaseHandler): + + @web.asynchronous + @gen.coroutine + def get(self): + ticket = self.get_query_argument('ticket', default=None) + if ticket: + (user, attrs, _) = self.cas_client.verify_ticket(ticket=ticket) + login_user = { + 'user': user, + 'email': attrs.get('mail'), + 'fullname': attrs.get('field_lf_full_name'), + 'groups': constants.TESTAPI_USERS + attrs.get('group', []) + } + q_user = {'user': user} + db_user = yield dbapi.db_find_one(self.table, q_user) + if not db_user: + dbapi.db_save(self.table, login_user) + else: + dbapi.db_update(self.table, q_user, login_user) + + self.clear_cookie(constants.TESTAPI_ID) + self.set_secure_cookie(constants.TESTAPI_ID, user) + + self.redirect(url=CONF.ui_url) + + +class SignoutHandler(SignBaseHandler): + def get(self): + """Handle signout request.""" + self.clear_cookie(constants.TESTAPI_ID) + logout_url = self.cas_client.get_logout_url(redirect_url=CONF.ui_url) + self.redirect(url=logout_url) |