1 from cas import CASClient
2 from tornado import gen
3 from tornado import web
5 from opnfv_testapi.common import constants
6 from opnfv_testapi.common.config import CONF
7 from opnfv_testapi.db import api as dbapi
8 from opnfv_testapi.resources import handlers
11 class SignBaseHandler(handlers.GenericApiHandler):
12 def __init__(self, application, request, **kwargs):
13 super(SignBaseHandler, self).__init__(application, request, **kwargs)
15 self.cas_client = CASClient(version='2',
16 server_url=CONF.lfid_cas_url,
17 service_url='{}/{}'.format(
19 CONF.lfid_signin_return))
22 class SigninHandler(SignBaseHandler):
24 self.redirect(url=(self.cas_client.get_login_url()))
27 class SigninReturnHandler(SignBaseHandler):
32 ticket = self.get_query_argument('ticket', default=None)
34 (user, attrs, _) = self.cas_client.verify_ticket(ticket=ticket)
37 'email': attrs.get('mail'),
38 'fullname': attrs.get('field_lf_full_name'),
39 'groups': constants.TESTAPI_USERS + attrs.get('group', [])
41 q_user = {'user': user}
42 db_user = yield dbapi.db_find_one(self.table, q_user)
44 dbapi.db_save(self.table, login_user)
46 dbapi.db_update(self.table, q_user, login_user)
48 self.clear_cookie(constants.TESTAPI_ID)
49 self.set_secure_cookie(constants.TESTAPI_ID, user)
51 self.redirect(url=CONF.ui_url)
54 class SignoutHandler(SignBaseHandler):
56 """Handle signout request."""
57 self.clear_cookie(constants.TESTAPI_ID)
58 logout_url = self.cas_client.get_logout_url(redirect_url=CONF.ui_url)
59 self.redirect(url=logout_url)