o
    Gý¤h  ã                   @   s²   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d„ZdS )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                     sà   t ttj td¡tdd} t| ƒ t| ƒ t	| ƒ | j
dd„ ƒ}|  t¡ |  t¡ |  t¡ |  t¡ |  t¡ |  t¡ dd l‰ddlm‰m‰m‰ m‰ | j‡‡‡fdd	„ƒ}| j‡‡fd
d„ƒ}| j‡ ‡‡fdd„ƒ}| S )NÚ	templatesz/static)Útemplate_folderÚstatic_folderÚstatic_url_pathc                 S   s   t | ƒS )Nr
   )Úresp© r   ú(/var/www/html/app_modules/initializer.pyÚadd_security_headers)   s   z(create_app.<locals>.add_security_headersr   )ÚsessionÚrequestÚabortÚgc                      s&   dˆvrˆ  d¡ˆd< ˆ  d¡ˆ _d S )NÚ
csrf_tokené    é   )Útoken_urlsafeÚ	csp_noncer   )r   Úsecretsr   r   r   Úensure_csrf_token:   s   z%create_app.<locals>.ensure_csrf_tokenc                      s   ˆ  dd¡tˆ ddƒdœS )Nr   Ú r   )Ú
CSRF_TOKENÚ	CSP_NONCE)ÚgetÚgetattrr   )r   r   r   r   Úinject_csrf_tokenB   s   z%create_app.<locals>.inject_csrf_tokenc                     sb   ˆj dv r-ˆjdv rd S ˆj d¡pˆj d¡pˆj d¡} | r'| ˆ d¡kr/ˆ dƒ d S d S d S )N)ÚPOSTÚPUTÚPATCHÚDELETE>   úviews.login_rootúviews.login_loginúviews.login_post_aliaszX-CSRF-Tokenr   i“  )ÚmethodÚendpointÚheadersr#   ÚformÚargs)Útoken)r   r   r   r   r   Úcsrf_protectG   s   

$úz create_app.<locals>.csrf_protect)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%   r3   r   )r   r   r   r   r   r   Ú
create_app   s4   ü






	rD   )Ú__doc__r5   r@   r   Úpathsr   r   Úconfigr   Údbr   Úassetsr   Úviewsr	   r:   Úcameras_apir;   Úgalleryr<   Ú
map_routesr=   Úadmin_routesr>   Úmedia_routesr?   Úsecurity_enhancementsr   rD   r   r   r   r   Ú<module>   s    