
    h                         d Z ddlZddlmZ ddl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	lmZ dd	lmZ dd	lmZ dd
lmZ defdZy)a  
initializer.py

Purpose:
  Build and configure the Flask app, applying configuration, registering
  teardown hooks, assets, and all blueprints. This keeps `app.py` minimal so it
  only imports the created app and optionally runs a dev server.

Exports:
  - create_app() -> Flask
    N)Flask   )ROOT_DIRSTATIC_PATH)apply_config)register_teardown)register_assets)bpsecurity_headers_middlewarereturnc                    	 t        t        t        j                  j	                  t
        d      t        d      } t        |        t        |        t        |        | j                  d        }| j                  t               | j                  t               | j                  t               | j                  t               | j                  t                | j                  t"               dd lddlm	mmm | j0                  	fd       }| j2                  	fd       }| j0                  	fd	       }| S )
N	templatesz/static)template_folderstatic_folderstatic_url_pathc                     t        |       S )Nr   )resps    JC:\Users\algun\Documents\ceba web\Ceba - Github\app_modules\initializer.pyadd_security_headersz(create_app.<locals>.add_security_headers)   s    *400    r   )sessionrequestabortgc                  b    dvrj                  d      d<   j                  d       _        y )N
csrf_token       )token_urlsafe	csp_nonce)r   secretsr   s   r   ensure_csrf_tokenz%create_app.<locals>.ensure_csrf_token:   s4     w&$+$9$9"$=GL!++B/r   c                  D    j                  dd      t         dd      dS )Nr    r!   )
CSRF_TOKEN	CSP_NONCE)getgetattr)r   r   s   r   inject_csrf_tokenz%create_app.<locals>.inject_csrf_tokenB   s%    &{{<<7STVaceKfhhr   c                  *   j                   dv rj                  dv ry j                  j                  d      xs8 j                  j                  d      xs j
                  j                  d      } | r| j                  d      k7  r	 d       y y y )N)POSTPUTPATCHDELETE>   views.login_rootviews.login_loginviews.login_post_aliaszX-CSRF-Tokenr   i  )methodendpointheadersr(   formargs)tokenr   r   r   s    r   csrf_protectz create_app.<locals>.csrf_protectG   s    >>??#ffOO''7{7<<;K;KL;Y{]d]i]i]m]mnz]{EEW[[%>>c
 ? @r   )r   __name__ospathjoinr   r   r   r   r	   after_requestregister_blueprintviews_bpcameras_api_bp
gallery_bpmap_bpadmin_bpmedia_bpr"   flaskr   r   r   r   before_requestcontext_processor)
appr   r#   r*   r9   r   r   r   r"   r   s
        @@@@@r   
create_apprJ      s   
X{;!!	C cC 	1 1 8$>*:&6"8$8$ 000 0 	i i 	  Jr   )__doc__r;   rF   r   pathsr   r   configr   dbr   assetsr	   viewsr
   r@   cameras_apirA   galleryrB   
map_routesrC   admin_routesrD   media_routesrE   security_enhancementsr   rJ    r   r   <module>rX      s?   
 
  (   ! # ! - % $ ( ( >5E 5r   