
    2hL                          S SK r S SKJr  S SKJr  SSKJrJrJrJ	r	J
r
Jr  \ R                  " \5      r " S S5      rS rg)	    N)unquote)request   )
ACL_ORIGINget_cors_optionsget_regexp_patternparse_resourcesset_cors_headerstry_match_patternc                   (    \ rS rSrSrSS jrS rSrg)CORS   a  
Initializes Cross Origin Resource sharing for the application. The
arguments are identical to `cross_origin`, with the addition of a
`resources` parameter. The resources parameter defines a series of regular
expressions for resource paths to match and optionally, the associated
options to be applied to the particular resource. These options are
identical to the arguments to `cross_origin`.

The settings for CORS are determined in the following order

1. Resource level settings (e.g when passed as a dictionary)
2. Keyword argument settings
3. App level configuration settings (e.g. CORS_*)
4. Default settings

Note: as it is possible for multiple regular expressions to match a
resource path, the regular expressions are first sorted by length,
from longest to shortest, in order to attempt to match the most
specific regular expression. This allows the definition of a
number of specific resource options, with a wildcard fallback
for all other resources.

:param resources:
    The series of regular expression and (optionally) associated CORS
    options to be applied to the given resource path.

    If the argument is a dictionary, it's keys must be regular expressions,
    and the values must be a dictionary of kwargs, identical to the kwargs
    of this function.

    If the argument is a list, it is expected to be a list of regular
    expressions, for which the app-wide configured options are applied.

    If the argument is a string, it is expected to be a regular expression
    for which the app-wide configured options are applied.

    Default : Match all and apply app-level configuration

:type resources: dict, iterable or string

:param origins:
    The origin, or list of origins to allow requests from.
    The origin(s) may be regular expressions, case-sensitive strings,
    or else an asterisk.

    ..  note::

        origins must include the schema and the port (if not port 80),
        e.g.,
        `CORS(app, origins=["http://localhost:8000", "https://example.com"])`.

    Default : '*'
:type origins: list, string or regex

:param methods:
    The method or list of methods which the allowed origins are allowed to
    access for non-simple requests.

    Default : [GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE]
:type methods: list or string

:param expose_headers:
    The header or list which are safe to expose to the API of a CORS API
    specification.

    Default : None
:type expose_headers: list or string

:param allow_headers:
    The header or list of header field names which can be used when this
    resource is accessed by allowed origins. The header(s) may be regular
    expressions, case-sensitive strings, or else an asterisk.

    Default : '*', allow all headers
:type allow_headers: list, string or regex

:param supports_credentials:
    Allows users to make authenticated requests. If true, injects the
    `Access-Control-Allow-Credentials` header in responses. This allows
    cookies and credentials to be submitted across domains.

    :note: This option cannot be used in conjunction with a '*' origin

    Default : False
:type supports_credentials: bool

:param max_age:
    The maximum time for which this CORS request maybe cached. This value
    is set as the `Access-Control-Max-Age` header.

    Default : None
:type max_age: timedelta, integer, string or None

:param send_wildcard: If True, and the origins parameter is `*`, a wildcard
    `Access-Control-Allow-Origin` header is sent, rather than the
    request's `Origin` header.

    Default : False
:type send_wildcard: bool

:param vary_header:
    If True, the header Vary: Origin will be returned as per the W3
    implementation guidelines.

    Setting this header when the `Access-Control-Allow-Origin` is
    dynamically generated (e.g. when there is more than one allowed
    origin, and an Origin than '*' is returned) informs CDNs and other
    caches that the CORS headers are dynamic, and cannot be cached.

    If False, the Vary header will never be injected or altered.

    Default : True
:type vary_header: bool

:param allow_private_network:
    If True, the response header `Access-Control-Allow-Private-Network`
    will be set with the value 'true' whenever the request header
    `Access-Control-Request-Private-Network` has a value 'true'.

    If False, the response header `Access-Control-Allow-Private-Network`
    will be set with the value 'false' whenever the request header
    `Access-Control-Request-Private-Network` has a value of 'true'.

    If the request header `Access-Control-Request-Private-Network` is
    not present or has a value other than 'true', the response header
    `Access-Control-Allow-Private-Network` will not be set.

    Default : True
:type allow_private_network: bool
Nc                 >    X l         Ub  U R                  " U40 UD6  g g N)_optionsinit_app)selfappkwargss      L/var/www/auris/envauris/lib/python3.13/site-packages/flask_cors/extension.py__init__CORS.__init__   s"    ?MM#((     c           
      (  ^^	 [        TU R                  U5      n[        UR                  S5      5      nU VVs/ s H  u  pVU[        TX65      4PM     nnnU VVs0 s H  u  pV[	        U5      U_M     nnn[
        R                  SU5        [        U5      m	TR                  T	5        UR                  SS5      (       aH  UU	4S jn[        TS5      (       a/  U" TR                  5      Tl
        U" TR                  5      Tl        g g g s  snnf s  snnf )N	resourcesz#Configuring CORS with resources: %sintercept_exceptionsTc                    >^  UUU 4S jnU$ )Nc            	      >   > T" TR                  T" U 0 UD65      5      $ r   )make_response)argsr   r   cors_after_requestfs     r   wrapped_functionICORS.init_app.<locals>._after_request_decorator.<locals>.wrapped_function   s#    -c.?.?4@R6@R.STTr    )r"   r#   r   r!   s   ` r   _after_request_decorator/CORS.init_app.<locals>._after_request_decorator   s    U ('r   handle_exception)r   r   r	   getr   LOGdebugmake_after_request_functionafter_requesthasattrr(   handle_user_exception)
r   r   r   optionsr   patternoptsresources_humanr&   r!   s
    `       @r   r   CORS.init_app   s
    #3v> $GKK$<=	
 ]ff\e'g/WCD\e	f U^^T]'-g6<T]^		7I8C,- ;;-t44( s.//'?@T@T'U$,DSE^E^,_) 0 5 g _s   DD)r   r   )__name__
__module____qualname____firstlineno____doc__r   r   __static_attributes__r%   r   r   r   r      s    AF)
"`r   r   c                    ^  U 4S jnU$ )Nc                   > U R                   b;  U R                   R                  [        5      (       a  [        R	                  S5        U $ [        [        R                  5      nT HQ  u  p#[        XSS9(       d  M  [        R	                  S[        R                  [        U5      U5        [        X5          U $    [        R	                  S5        U $ )Nz*CORS have been already evaluated, skippingT)caseSensitivez=Request to '%r' matches CORS resource '%s'. Using options: %szNo CORS rule matches)headersr)   r   r*   r+   r   r   pathr   r   r
   )respnormalized_path	res_regexres_optionsr   s       r   r!   7make_after_request_function.<locals>.cors_after_request   s    <<#(8(8(D(DIIBCK!',,/&/"I 4PP		SLL&y1	 !3  '0 II,-r   r%   )r   r!   s   ` r   r,   r,      s    ( r   )loggingurllib.parser   flaskr   corer   r   r   r	   r
   r   	getLoggerr5   r*   r   r,   r%   r   r   <module>rJ      s8        x x!k` k`\r   