Merge "Add qtip job to pod zte-virtual6"
[releng.git] / utils / test / testapi / opnfv_testapi / handlers / sign_handlers.py
1 from cas import CASClient
2 from tornado import gen
3 from tornado import web
4
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.handlers import base_handlers
9
10
11 class SignBaseHandler(base_handlers.GenericApiHandler):
12     def __init__(self, application, request, **kwargs):
13         super(SignBaseHandler, self).__init__(application, request, **kwargs)
14         self.table = 'users'
15         self.cas_client = CASClient(version='2',
16                                     server_url=CONF.lfid_cas_url,
17                                     service_url='{}/{}'.format(
18                                         CONF.ui_url,
19                                         CONF.lfid_signin_return))
20
21
22 class SigninHandler(SignBaseHandler):
23     def get(self):
24         self.redirect(url=(self.cas_client.get_login_url()))
25
26
27 class SigninReturnHandler(SignBaseHandler):
28
29     @web.asynchronous
30     @gen.coroutine
31     def get(self):
32         ticket = self.get_query_argument('ticket', default=None)
33         if ticket:
34             (user, attrs, _) = self.cas_client.verify_ticket(ticket=ticket)
35             login_user = {
36                 'user': user,
37                 'email': attrs.get('mail'),
38                 'fullname': attrs.get('field_lf_full_name'),
39                 'groups': constants.TESTAPI_USERS + attrs.get('group', [])
40             }
41             q_user = {'user': user}
42             db_user = yield dbapi.db_find_one(self.table, q_user)
43             if not db_user:
44                 dbapi.db_save(self.table, login_user)
45             else:
46                 dbapi.db_update(self.table, q_user, login_user)
47
48             self.clear_cookie(constants.TESTAPI_ID)
49             self.set_secure_cookie(constants.TESTAPI_ID, user)
50
51             self.redirect(url=CONF.ui_url)
52
53
54 class SignoutHandler(SignBaseHandler):
55     def get(self):
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)