ó
RrUdc           @   sQ  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l m	 Z	 d  d l
 m Z m Z d  d l m Z d  d l m Z d d l m Z m Z d  d l Z e j e ƒ Z e e d	 e ƒ Z e e d
 e ƒ Z e e d e ƒ Z e e d e ƒ Z d d d „  ƒ  YZ d d d „  ƒ  YZ d e  f d „  ƒ  YZ! d S(   iÿÿÿÿN(   t   reverset   resolve(   t   response_standard(   t   HttpResponset   JsonResponse(   t   settings(   t   statusi   (   t   StudyTokenApit   ParticipantTokenApit   DEBUGt   STUDY_TOKEN_SKIP_VALIDATIONt!   PARTICIPANT_TOKEN_SKIP_VALIDATIONt   SKIP_POST_CALLS_ONLYt   ValidateStudyTokenMiddlewarec           B   s   e  Z d  „  Z RS(   c         C   sw  d } y t  | j ƒ } | j } Wn t k
 r7 } n Xd | j k rK d  Sx t D] } | | k rR d  SqR Wd | j k rÔ t r· d | j k r· | j d } t j	 d t
 | ƒ ƒ qø t i d d 6d t j ƒSn$ | j d } t j	 d	 t
 | ƒ ƒ t j	 d
 t
 | ƒ ƒ t ƒ  j | ƒ } | t k rSt j d ƒ t i d d 6d t j ƒSt j	 d t
 | ƒ ƒ | | _ d  S(   Nt    t   apit   HTTP_X_STUDY_TOKENt   X_STUDY_TOKENsI   HTTP_X_STUDY_TOKEN' not in request.META request.GET[X_STUDY_TOKEN] token=s   Study token requiredt   errorR   s*   HTTP_X_STUDY_TOKEN in request.META  token=s   token=%ss   Invalid Study tokens(   StudyTokenApi()._get(token) study_token=(   R   t   patht   url_namet	   ExceptionR
   t   METAR	   t   GETt   loggert   debugt   strR   R   t   HTTP_400_BAD_REQUESTR   t   _gett   FalseR   t   study_token(   t   selft   requestR   t   matcht   et   skipt   tokenR   (    (    sA   /var/www/html/phendo-backend/phendo_python/security/middleware.pyt   process_request    s2    (   t   __name__t
   __module__R%   (    (    (    sA   /var/www/html/phendo-backend/phendo_python/security/middleware.pyR      s   t"   ValidateParticipantTokenMiddlewarec           B   s   e  Z d  „  Z RS(   c         C   sÒ  d } y t  | j ƒ } | j } Wn t k
 r7 } n Xd | j k rK d  Sx t D] } | | k rR d  SqR W| j d k rŸ x! t D] } | | k r‚ d  Sq‚ Wn  | j sÂ t i d d 6d t	 j
 ƒSd | j k r*t rd | j k r| j d } t j d	 t | ƒ ƒ qNt i d
 d 6d t	 j
 ƒSn$ | j d } t j d t | ƒ ƒ t j d t | ƒ t | j ƒ ƒ t ƒ  j | | j ƒ } | t k rÅt j d t | ƒ ƒ t i d d 6d t	 j
 ƒS| | _ d  S(   NR   R   t   POSTs   Study token requiredR   R   t   HTTP_X_PARTICIPANT_TOKENt   X_PARTICIPANT_TOKENsW   HTTP_X_PARTICIPANT_TOKEN' not in request.META request.GET['X_PARTICIPANT_TOKEN'] token=s   Participant token requireds0   HTTP_X_PARTICIPANT_TOKEN' in request.META token=sA   call ParticipantTokenApi()._get token=%s  request.study_token=%s:s   Invalid Participant token:s   Invalid Participant token(   R   R   R   R   R   t   methodR   R   R   R   R   R   R	   R   R   R   R   R   R   R   R   t   participant_token(   R   R    R   R!   R"   R#   R$   R-   (    (    sA   /var/www/html/phendo-backend/phendo_python/security/middleware.pyR%   @   s<    	"(   R&   R'   R%   (    (    (    sA   /var/www/html/phendo-backend/phendo_python/security/middleware.pyR(   ?   s   t   ProcessExceptionMiddlewarec           B   s   e  Z d  „  Z RS(   c         C   s‚   | j  d k r~ | j  d k r~ t j d ƒ t j | ƒ t j d t | j  ƒ ƒ t j d d j t j t	 j
 ƒ  Œ  ƒ ƒ n  | S(   NiÈ   iÉ   s   request:s   status_code: s   ProcessExceptionMiddleware: s   
(   t   status_codeR   R   t   infoR   t	   exceptiont   joint	   tracebackt   format_exceptiont   syst   exc_info(   R   R    t   response(    (    sA   /var/www/html/phendo-backend/phendo_python/security/middleware.pyt   process_responsed   s    ,(   R&   R'   R8   (    (    (    sA   /var/www/html/phendo-backend/phendo_python/security/middleware.pyR.   c   s   (    (    ("   t   hashlibt   ret   jsonR3   R5   t   django.core.urlresolversR    R   t   survey.utilsR   t   django.httpR   R   t   django.confR   t   rest_framework.viewsR   R   R   R   t   loggingt	   getLoggerR&   R   t   getattrR   R	   R
   R   R   R   R(   t   objectR.   (    (    (    sA   /var/www/html/phendo-backend/phendo_python/security/middleware.pyt   <module>   s&    $