£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<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$   