1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import logging
- import time
- from django.conf import settings
- from typing import Optional, TYPE_CHECKING
- from apps.web.user.models import MyUser
- from apps.web.utils import trace_call
- from middlewares.django_jwt_session_auth import jwt_login, jwt_session_key
- if TYPE_CHECKING:
- from django.http.request import HttpRequest
- from django.http.response import HttpResponseRedirect
- logger = logging.getLogger(__name__)
- def user_to_payload(user):
- # type: (MyUser)->dict
- exp = datetime.datetime.now() + datetime.timedelta(seconds = 3600 * 24 * 30)
- return {
- 'user_id': str(user.id),
- 'iat': int(time.time()),
- 'exp': exp
- }
- def payload_to_user(payload):
- # type: (dict)->Optional[MyUser]
- if not payload:
- return None
- user_id = payload.get('user_id')
- try:
- user = MyUser.objects.get(id = user_id)
- except:
- user = None
- return user
- def end_user_login(request, user):
- # type:(HttpRequest, MyUser)->str
- return jwt_login(settings.SERVICE_DOMAIN.USER, user, request)
- end_user_login_session_key = jwt_session_key(settings.SERVICE_DOMAIN.USER)
- @trace_call(logger = logger)
- def response_with_login(request, user, response):
- # type:(HttpRequest, MyUser, HttpResponseRedirect)->HttpResponseRedirect
- token = end_user_login(request, user)
- logger.debug("{} login in.".format(repr(user)))
- response.set_cookie(key = settings.JWT_AUTH_DOMAIN_COOKIE_NAME,
- value = settings.SERVICE_DOMAIN.USER,
- max_age = 3600 * 24 * 30,
- domain = settings.COOKIE_DOMAIN,
- secure = False,
- httponly = False)
- response.set_cookie(key = end_user_login_session_key,
- value = token,
- max_age = 3600 * 24 * 30,
- domain = settings.COOKIE_DOMAIN,
- secure = False,
- httponly = False)
- return response
|