
    hV                        d Z ddlZddlmZmZ ddlmZmZmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZmZmZmZmZ dd	lmZ dd
lmZmZ  ede      Zej=                  dddgd      ej=                  dddgd      d               Zej=                  ddg      d        Z ej=                  ddg      d        Z!ej=                  d      ed               Z"ej=                  dddg      ed               Z#y)aB  
views.py

Purpose:
  User-facing HTML pages that are not pure APIs: login/logout, selection page,
  add camera page. This blueprint wires routes and uses shared services.

Routes:
  - GET/POST /, /login: login
  - GET /logout: logout
  - GET /select: main selection page shell
  - GET/POST /dodaj-kameru: add camera form
    N)datetime	timedelta)	Blueprintrender_templaterequestredirecturl_forsessionflashmake_response   )get_db)login_required)is_login_allowedis_ip_allowedrecord_login_failurerecord_login_successrecord_ip_failure)secure_password_check)log_auth_eventget_request_ipviews/GETPOST
login_root)methodsendpointz/loginlogin_loginc                  V   dd l } t        j                  dk(  rt        j                  j	                  dd      j                         j                         }t        j                  j	                  dd      }t        t              xs d}t        ||      \  }}t        |      \  }}|r|sat        dd       	 t        |       	 t        d||	       t        t        d
            }t!        t#        ||            |j$                  d<   |dfS t'               }	|	j)                  d|f      }
|
j+                         }t-        |||      rSt/        j0                          |d   t.        d<   t3        ||       	 t        d||d   |       t5        t7        d            S 	 t9        ||       	 t        d||	       t        dd       t5        t7        d            S t        d
      S # t        $ r Y )w xY w# t        $ r Y *w xY w# t        $ r Y w xY w# t        $ r Y tw xY w# t        $ r Y tw xY w)Nr   r   username passwordu/   Previše pokušaja. Pokušajte ponovno kasnije.errorlogin_rate_limited)r!   ipz
login.htmlzRetry-Afteri  z-SELECT * FROM users WHERE LOWER(username) = ?iduser_idlogin_success)r!   r(   r&   views.select_pagelogin_failureu&   Pogrešno korisničko ime ili lozinka.zviews.login_root)bcryptr   methodformgetstriplowerr   r   r   r   r   	Exceptionr   r   r   strmaxheadersr   executefetchoner   r
   clearr   r   r	   r   )r,   r!   r#   	client_ipallowed_userretry_after_user
allowed_ipretry_after_iprespdbcurusers               DC:\Users\algun\Documents\ceba web\Ceba - Github\app_modules\views.pyloginrC      s    ~~<<##J399;AAC<<##J3"7+1r	)9(I)N&&%29%="
N:CWM!),3h9U !!>?D*-c2BN.S*TDLL'9XjjH8+V||~ 8T:MMO!%dGI 954PT:Zcd G$7899	 95	?X)L 	6@ 2344<((G         		  		sZ   6G G. 1G> H %H 	G+*G+.	G;:G;>	H
	H
	HH	H('H(z/auth/login)r   c                      t               S )N)rC        rB   login_post_aliasrG   S   s	    7NrF   z/logoutc                  D    t        j                  dd        t        d      S )Nr(   r   )r
   popr   rE   rF   rB   logoutrJ   X   s    KK	4 C=rF   z/selectc                      t        d      S )Nzselect.html)r   rE   rF   rB   select_pagerL   ^   s     =))rF   z/dodaj-kameruc                     t         j                  dk(  rt         j                  j                  d      xs dj	                         } t         j                  j                  d      xs dj	                         }| j                         rt        |       dk7  r t        dd       t        t        d            S |s t        d	d       t        t        d            S t               }d
d l}	 |j                  dt        d   | |f       |j                          t        dd       t        t        d            S t!        d      S # |j                  $ r t        dd       Y <w xY w)Nr   	camera_idr"   camera_name   u*   Broj kamere mora imati točno 12 znamenki.r$   zviews.add_camera_redesignzIme kamere je obavezno.r   zPINSERT OR IGNORE INTO cameras (user_id, camera_id, camera_name) VALUES (?, ?, ?)r(   zKamera je dodana.successu(   Dogodila se greška. Pokušajte ponovno.r*   zadd_camera.html)r   r-   r.   r/   r0   isdigitlenr   r   r	   r   sqlite3r6   r
   commitErrorr   )rN   rO   r?   rT   s       rB   add_camera_redesignrW   e   s+    ~~\\%%k28b??A	||''6<"CCE  "c)n&:>HG$?@AA+W5G$?@AAX	GJJb#Y< IIK%y1  3455,-- }} 	G<gF	Gs   &8D= =EE)$__doc__rer   r   flaskr   r   r   r   r	   r
   r   r   r?   r   securityr   
rate_limitr   r   r   r   r   security_enhancementsr   auditr   r   __name__bprouterC   rG   rJ   rL   rW   rE   rF   rB   <module>rb      s   
 ( g g g  $ v v 8 1 w! #v>(UFOmD1) E ?1)j -&* + )fX& '
 )*  *
 /E6?3.  4.rF   