U
    M>d(                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZ dd	lmZ G d
d dZG dd dZG dd dZdS )zS
we use middlewares in this project and this file store classes of our middlewares
    status)AuthorizatorMiddleware)UserBalanceHistory)Quiz	QuizSheet!QUIZ_SHEET_STATE_SCORES_PUBLISHEDQUIZ_SHEET_STATE_FINISHED),GetQuizSheetMinimumDataForStudentsSerializerQuizModelSerializer)price_calculator_helper)
MyResponse)
logs_adderc                   @   s$   e Zd Zdd Zdd Zdd ZdS )EntranceValidatorMiddlewarec                 C   s
   || _ d S Nget_responseselfr    r   +/var/www/wikiazma_server/quiz/middleware.py__init__   s    z$EntranceValidatorMiddleware.__init__c                 C   s   |  |}|S r   r   r   requestresponser   r   r   __call__   s    
z$EntranceValidatorMiddleware.__call__c              
   C   s  d }d }d }d }d }	|j d}
|j d}|j d}|j d}|
r|rVtd q|rn|rhtd qd}q|rxd}qtd nP|r|rtd	 q|rtd
 qd}n*|r|rtd qd}n|rd}ntd |	d kr.z,|d k	rtjj|d}|j}|j}d}	W n$ tk
r, } zW 5 d }~X Y nX |	d krJztjj|d}W n$ tk
rn } zW 5 d }~X Y nX ztjj|d}|j}W n$ tk
r } zW 5 d }~X Y nX |d k	rJt	d dd
|d d d }z
|j}W n   Y nX |d k	r|j|krt|dddtjdS |jr d}	|	d krJ|sJ|jjj|jjkrFnd}	|	d ks^|d krtt|dddtjdS |	|_||_||_||_||_d S )Ntokenentrance_tokenquiz_idquiz_sheet_idz'CRITICAL: Invalid State #23497422187324z%CRITICAL: Invalid State #028944224532r   z%CRITICAL: Invalid State #199234617542z'CRITICAL: Invalid State #39829148520943z'CRITICAL: Invalid State #84728758287552z&CRITICAL: Invalid State #3879573229855z%CRITICAL: Invalid State #917497527575)r   InstituteStudent)pkT)accept_user_token	not_foundz,No quiz sheet found related to your request.r   messager   PublicOwnerz&No quiz found related to your request.)middleware_serializer_datagetr   r   objectsquizinstitute_student	Exceptionr   r   process_viewmiddleware_useruserr   r   HTTP_404_NOT_FOUNDpublic	instituteidmiddleware_entrance_typemiddleware_quizmiddleware_institute_studentmiddleware_quiz_sheet)r   r   	view_func	view_argsview_kwargsr+   
quiz_sheetr0   r,   entrance_typer   r   r   r   ieZuser_auth_resultr   r   r   r.      s    












z(EntranceValidatorMiddleware.process_viewN__name__
__module____qualname__r   r   r.   r   r   r   r   r      s   r   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
#QuizSheetStatusValidationMiddlewareTc                 C   s   || _ || _|| _d S r   )r   error_if_quiz_sheet_is_noneprocess_quiz_status)r   r   rE   rF   r   r   r   r      s    z,QuizSheetStatusValidationMiddleware.__init__c                 C   s   |  |}|S r   r   r   r   r   r   r      s    
z,QuizSheetStatusValidationMiddleware.__call__c                 C   s   |j }|d kr|| jr*t|dddtjdS | jrx|j}| \}}|d k	rxt|ddidj	}	t|||d|	id	tj
dS d S | \}}|d k	r|jtkr|jtkrd
dlm}
 |
| |d k	rt|j	}t|||d|id	tj
dS d S )NerrorzCannot resolve a quiz_sheetr$   r   with_blueprintF)contextr+   r   r%   datar   )quiz_sheet_finish_helperr<   )r8   rE   r   r   HTTP_400_BAD_REQUESTrF   r6   can_be_entered_stater   rK   HTTP_406_NOT_ACCEPTABLEcan_be_continued_statestater   r	   Z
quiz.viewsrL   r
   )r   r   r9   r:   r;   r<   r+   error_statusr%   	quiz_datarL   quiz_sheet_datar   r   r   r.      s0    
z0QuizSheetStatusValidationMiddleware.process_viewN)TTr@   r   r   r   r   rD      s   
rD   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )QuizPurchaseHandlerMiddlewarec                 C   s
   || _ d S r   r   r   r   r   r   r      s    z&QuizPurchaseHandlerMiddleware.__init__c                 C   s   |  |}|S r   r   r   r   r   r   r      s    
z&QuizPurchaseHandlerMiddleware.__call__c                 C   s   |j d kr*|jd kr*t|dddtjdS |jd krt|j |j|j\}}}}}	t	|j j
}
|
|k rt|dd||
ddtjdS d S )NrG   zAccess deniedr$   r   zbalance is not enough)
total_costbalancerJ   )r/   r7   r   r   HTTP_401_UNAUTHORIZEDr8   r   r6   r   get_last_user_balanceremaining_balanceHTTP_402_PAYMENT_REQUIRED)r   r   r9   r:   r;   rV   institute_sharewikiazma_sharewagetaxZuser_balancer   r   r   r.      s    
z*QuizPurchaseHandlerMiddleware.process_viewNr@   r   r   r   r   rU      s   rU   N)__doc__rest_frameworkr   authenticate.middlewarer   payment.modelsr   quiz.modelsr   r   r   r	   quiz.serializersr
   r   
quiz.utilsr   utils.myresponser   utils.utilsr   r   rD   rU   r   r   r   r   <module>   s    4