£Á°è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>

Yc           @@  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   Z d   Z d   Z e e d d d g  e e d d      Z d S(   s   
raven.contrib.django.views
~~~~~~~~~~~~~~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
i    (   t   absolute_import(   t   wraps(   t   settings(   t   HttpResponset   HttpResponseForbiddent   HttpResponseBadRequest(   t   never_cache(   t   csrf_exempt(   t   require_http_methods(   t   string_types(   t   client(   t   jsonc         C@  s   t  j s t St  j d k r  t S|  s* t S|  j   }  xL t  j D]A } t | t  rn | j   |  k r t Sq@ | j |   r@ t Sq@ Wt S(   Nt   *(   R   t   SENTRY_ALLOW_ORIGINt   Falset   Truet   lowert
   isinstanceR	   t   match(   t   origint   value(    (    sK   /opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/views.pyt   is_valid_origin   s    	c         @  s   t       f d    } | S(   Nc         @  sO   |  j  j d  } t |  s% t   S  |  | |  } | | d <d | d <| S(   Nt   HTTP_ORIGINs   Access-Control-Allow-Origins   GET, POST, OPTIONSs   Access-Control-Allow-Methods(   t   METAt   getR   R   (   t   requestt   argst   kwargsR   t   response(   t   func(    sK   /opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/views.pyt   wrapped.   s    

(   R   (   R   R   (    (   R   sK   /opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/views.pyt   with_origin-   s    c         C@  s   |  j  j d d  j d  r) |  j  d S|  j  j d d  j d  rR |  j  d Sg  |  j j   D]3 } | d j d  rb | d d k rb d | ^ qb } | r d	 d
 j |  Sd S(   sy   
    raven-js will pass both Authorization and X-Sentry-Auth depending on the browser
    and server configurations.
    t   HTTP_X_SENTRY_AUTHt    t   Sentryt   HTTP_AUTHORIZATIONi    t   sentry_t   sentry_datas   %s=%ss	   Sentry %ss   , N(   R   R   t
   startswitht   GETt   itemst   joint   None(   R   t   iR   (    (    sK   /opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/views.pyt   extract_auth_vars=   s    3R'   t   POSTt   OPTIONSc         C@  s   |  j  d k r t   S|  j  d k rL t |  d  r@ |  j } q^ |  j } n |  j j d  } | sk t   Sy t j	 | j
 d   } Wn t j k
 r t   SXt j d t |   |  t   S(   NR.   R-   t   bodyR%   t   utf8t   auth_header(   t   methodR   t   hasattrR/   t   raw_post_dataR'   R   R   R   t   loadst   decodet   JSONDecodeErrorR
   t   sendR,   (   R   t
   project_idt   datat   decoded(    (    sK   /opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/views.pyt   reportR   s    N(   t   __doc__t
   __future__R    t	   functoolsR   t   django.confR   t   django.httpR   R   R   t   django.views.decorators.cacheR   t   django.views.decorators.csrfR   t   django.views.decorators.httpR   t   raven.utils.compatR	   t   raven.contrib.django.modelsR
   t   raven.utilsR   R   R   R,   R*   R<   (    (    (    sK   /opt/alt/python27/lib/python2.7/site-packages/raven/contrib/django/views.pyt   <module>   s$   			