§
    XÅjb  ã                   ó¢   — U d dl Z d dlmZ d dlmZ  ee¦  «        Zdae j        dz  e	d<   de j        fd„Z
dedefd„Zdedefd	„Zdeddfd
„ZdS )é    N)Úsettings)Ú
get_loggerÚ_redis_clientÚreturnc                  óú   — t           €nt          j        r!t          j        t          j        d¬¦  «        a nAt          j        t          j        t          j        t          j        t          j	        d¬¦  «        a t           S )NT)Údecode_responses)ÚhostÚportÚdbÚpasswordr   )
r   r   Ú	REDIS_URLÚredisÚfrom_urlÚRedisÚ
REDIS_HOSTÚ
REDIS_PORTÚREDIS_DBÚREDIS_PASSWORD© ó    ú?/lsinfo/ai/hellotax_ai/base_platform/app/core/login_security.pyÚget_redis_clientr      sf   € åÐÝÔð 		Ý!œN­8Ô+=ÐPTÐUÑUÔUˆMˆMå!œKÝÔ(ÝÔ(ÝÔ$Ý!Ô0Ø!%ðñ ô ˆMõ Ðr   Úemailc                 óL  — 	 t          ¦   «         }d| › }|                     |¦  «        }|dk    r|                     |d¦  «         t                               d|› | ¬¦  «         |S # t
          $ r2}t                               d|› ¦  «         t          d¦  «        d ‚d }~ww xY w)Núfailed_login:é   i„  z(Failed login attempt recorded: attempts=©Ú
user_emailz.Redis unavailable for recording failed login: ú:Login security system unavailable. Please try again later.)r   ÚincrÚexpireÚloggerÚwarningÚ	ExceptionÚerrorÚRuntimeError)r   ÚclientÚkeyÚattemptsÚes        r   Úrecord_failed_loginr+      sÃ   € ð
cÝ!Ñ#Ô#ˆØ%˜eÐ%Ð%ˆØ—;’;˜sÑ#Ô#ˆØqŠ=ˆ=ØMŠM˜#˜sÑ#Ô#Ð#ÝŠÐLÀ(ÐLÐLÐY^ˆÑ_Ô_Ð_ØˆøÝð cð cð cÝŠÐIÀaÐIÐIÑJÔJÐJÝÐWÑXÔXÐ^bÐbøøøøðcøøøs   ‚A$A' Á'
B#Á1-BÂB#c                 óF  — 	 t          ¦   «         }d| › }|                     |¦  «        }|€dS t          |¦  «        dk    }|rt                               d|› | ¬¦  «         |S # t
          $ r2}t                               d|› ¦  «         t          d¦  «        d ‚d }~ww xY w)Nr   Fé   z'Account locked due to failed attempts: r   z*Redis unavailable for account lock check: r   )r   ÚgetÚintr"   r#   r$   r%   r&   )r   r'   r(   r)   Úlockedr*   s         r   Úis_account_lockedr1   )   sÈ   € ðcÝ!Ñ#Ô#ˆØ%˜eÐ%Ð%ˆØ—:’:˜c‘?”?ˆØÐØ5ÝX‘” !Ò#ˆØð 	cÝNŠNÐOÀXÐOÐOÐ\aˆNÑbÔbÐbØˆøÝð cð cð cÝŠÐEÀ!ÐEÐEÑFÔFÐFÝÐWÑXÔXÐ^bÐbøøøøðcøøøs   ‚*A$ ®5A$ Á$
B Á.-BÂB c                 óú   — 	 t          ¦   «         }d| › }|                     |¦  «         t                               d| ¬¦  «         d S # t          $ r(}t                               d|› ¦  «         Y d }~d S d }~ww xY w)Nr   zFailed login attempts resetr   z1Redis unavailable for resetting failed attempts: )r   Údeleter"   Úinfor$   r%   )r   r'   r(   r*   s       r   Úreset_failed_attemptsr5   9   sŸ   € ðNÝ!Ñ#Ô#ˆØ%˜eÐ%Ð%ˆØŠcÑÔÐÝŠÐ1¸eˆÑDÔDÐDÐDÐDøÝð Nð Nð NÝŠÐLÈÐLÐLÑMÔMÐMÐMÐMÐMÐMÐMÐMøøøøðNøøøs   ‚AA Á
A:ÁA5Á5A:)r   Ú
app.configr   Úcommon_loggingr   Ú__name__r"   r   r   Ú__annotations__r   Ústrr/   r+   Úboolr1   r5   r   r   r   ú<module>r<      sû   ðà €€€€à Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à	ˆHÑ	Ô	€Ø$(€ˆuŒ{˜TÑ!Ð (Ð (Ñ (ð˜%œ+ð ð ð ð ð c˜sð c sð cð cð cð cðc˜Sð c Tð cð cð cð cð N ð N¨ð Nð Nð Nð Nð Nð Nr   