<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    ¿öY¬  ã               @   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
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ dd„ Zdd„ Zdd„ Zeedddgƒeeddd„ƒƒƒƒZdS )z±
raven.contrib.django.views
~~~~~~~~~~~~~~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
é    )Úabsolute_import)Úwraps)Úsettings)ÚHttpResponseÚHttpResponseForbiddenÚHttpResponseBadRequest)Únever_cache)Úcsrf_exempt)Úrequire_http_methods)Ústring_types)Úclient)Újsonc             C   sf   t js
dS t jdkrdS | s dS |  ¡ } x8t jD ].}t|tƒrP| ¡ | kr^dS q0| | ¡r0dS q0W dS )NFÚ*T)r   ZSENTRY_ALLOW_ORIGINÚlowerÚ
isinstancer   Úmatch)ÚoriginÚvalue© r   úK/opt/alt/python37/lib/python3.7/site-packages/raven/contrib/django/views.pyÚis_valid_origin   s    


r   c                s   t ˆ ƒ‡ fdd„ƒ}|S )Nc                s>   | j  d¡}t|ƒstƒ S ˆ | f|ž|Ž}||d< d|d< |S )NZHTTP_ORIGINzAccess-Control-Allow-OriginzGET, POST, OPTIONSzAccess-Control-Allow-Methods)ÚMETAÚgetr   r   )ÚrequestÚargsÚkwargsr   Úresponse)Úfuncr   r   Úwrapped.   s    zwith_origin.<locals>.wrapped)r   )r   r   r   )r   r   Úwith_origin-   s    r   c             C   sf   | j  dd¡ d¡r| j d S | j  dd¡ d¡r<| j d S dd„ | j ¡ D ƒ}|rbdd |¡ S d	S )
zy
    raven-js will pass both Authorization and X-Sentry-Auth depending on the browser
    and server configurations.
    ZHTTP_X_SENTRY_AUTHÚ ÚSentryZHTTP_AUTHORIZATIONc             S   s.   g | ]&}|d    d¡r|d  dkrd| ‘qS )r   Zsentry_Úsentry_dataz%s=%s)Ú
startswith)Ú.0Úir   r   r   ú
<listcomp>I   s   z%extract_auth_vars.<locals>.<listcomp>z	Sentry %sz, N)r   r   r#   ÚGETÚitemsÚjoin)r   r   r   r   r   Úextract_auth_vars=   s    

r*   r'   ÚPOSTÚOPTIONSNc             C   s–   | j dkrtƒ S | j dkr4t| dƒr,| j}q@| j}n| j d¡}|sJtƒ S yt 	| 
d¡¡}W n tjk
rv   tƒ S X tjf dt| ƒi|—Ž tƒ S )Nr,   r+   Úbodyr"   Úutf8Zauth_header)Úmethodr   Úhasattrr-   Zraw_post_datar'   r   r   r   ÚloadsÚdecodeÚJSONDecodeErrorr   Úsendr*   )r   Z
project_idÚdataÚdecodedr   r   r   ÚreportR   s    


r7   )N)Ú__doc__Ú
__future__r   Ú	functoolsr   Zdjango.confr   Zdjango.httpr   r   r   Zdjango.views.decorators.cacher   Zdjango.views.decorators.csrfr	   Zdjango.views.decorators.httpr
   Zraven.utils.compatr   Zraven.contrib.django.modelsr   Zraven.utilsr   r   r   r*   r7   r   r   r   r   Ú<module>   s$   