ó
    oÇÃjà   ã                   ó˜  • S r SSKJrJrJrJrJr  SSKJrJ	r	  SSK
Jr  SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSKJrJrJr  SS	KJr  \" 5       rS
S0rSrSrS!S\S\4S jjr \RC                  S\S9\" \5      4S\S\4S jj5       r"\RG                  S5      \" S5      \" \5      4S\S\S\4S jj5       r$S"S\S\S\S\4S jjr%\RC                  S\S9\" \5      \" \5      4S\S\S\RL                  4S jj5       r'\RG                  S5      \" S5      \" S5      \" \5      \" \5      4S\S\S\S\S\RL                  4
S  jj5       r(g)#u!  2FA mentÅ‘kÃ³dok (v34): belÃ©pÃ©s mentÅ‘kÃ³ddal, Ã©s a sajÃ¡t kÃ©szlet kezelÃ©se. LeÃ­rÃ¡s: docs/KETLEPCSOS_HITELESITES.md ("MentÅ‘kÃ³dok" fejezet).

VÃ‰GPONTOK
    GET  /mfa/mentokod            a belÃ©pÃ©s mentÅ‘kÃ³dos vÃ¡ltozata (Ã¡tmeneti sÃ¼ti kell, mint a /mfa-hoz; csak megjelenÃ­t)
    POST /mfa/mentokod            a mentÅ‘kÃ³d ellenÅ‘rzÃ©se: siker -> teljes munkamenet (mint a 6 jegyÅ± kÃ³dnÃ¡l), a kÃ³d felhasznÃ¡lt, naplÃ³ + Ã©rtesÃ­tÅ‘ levÃ©l
    GET  /mfa/mentokodok          a SAJÃ�T kÃ©szlet Ã¡llapota (hÃ¡ny kÃ³d maradt) + "Ãºj kÃ©szlet" Å±rlap (bejelentkezett felhasznÃ¡lÃ³; csak megjelenÃ­t)
    POST /mfa/mentokodok/uj       Ãºj kÃ©szlet: a SAJÃ�T JELSZÃ“ Ã©s egy Ã‰RVÃ‰NYES HITELESÃ�TÅ� KÃ“D kell hozzÃ¡; a rÃ©gi kÃ©szlet Ã©rvÃ©nytelen; a kÃ³dok egyszer lÃ¡tszanak

BIZTONSÃ�G
    - A belÃ©pÃ©s ugyanazt a talÃ¡lgatÃ¡s-vÃ©delmet kapja, mint a 6 jegyÅ± kÃ³d (login_vedelem: a prÃ³bÃ¡lkozÃ¡st az ellenÅ‘rzÃ©s ELÅ�TT szÃ¡moljuk; a
      rendszeradminnÃ¡l idÅ‘zÃ­tett, nem vÃ©gleges tiltÃ¡s). A hibaÃ¼zenet nem Ã¡rulja el, melyik rÃ©sze volt rossz.
    - KÃ©szletet csak olyan felhasznÃ¡lÃ³ kÃ©rhet, akinek MEGERÅ�SÃ�TETT 2FA-ja van, Ã©s a kÃ©rÃ©s a jelszavÃ¡t Ã‰S egy friss hitelesÃ­tÅ‘ kÃ³dot is igÃ©nyli -
      egy ellopott munkamenet Ã¶nmagÃ¡ban nem elÃ©g (a tÃ¡madÃ³ nem tudna sajÃ¡t mentÅ‘kÃ³dot generÃ¡lni).
    - Az Ãºj kÃ©szlet oldala `Cache-Control: no-store` + `Referrer-Policy: no-referrer`; a kÃ³dok nem kerÃ¼lnek URL-be, naplÃ³ba, levÃ©lbe.
    - KÃ©rÃ©s-eredet vÃ©delem (Sec-Fetch-Site) a kÃ©szlet-kÃ©rÃ©sen, mint a tÃ¶bbi 2FA-mÅ±velet.
é    )Ú	APIRouterÚRequestÚDependsÚFormÚstatus)ÚHTMLResponseÚRedirectResponse)ÚSessionN)Úget_db)Úmfa)Úget_client_ipÚget_current_userÚverify_password)Ú	templateszCache-Controlzno-storeu)   HibÃ¡s vagy mÃ¡r felhasznÃ¡lt mentÅ‘kÃ³d.u&   HibÃ¡s jelszÃ³ vagy hitelesÃ­tÅ‘ kÃ³d.ÚrequestÚhibac                 óR   • [         R                  " U SUR                  US.[        S9$ )Nzmfa_mentokod_belepes.html)Úemailr   )r   ÚnameÚcontextÚheaders)r   ÚTemplateResponser   Ú	_FEJLECEK)r   Úuserr   s      Ú(/var/www/website/routers/mfa_mentokod.pyÚ_belepes_oldalr   &   s)   € Ü×%Ò%ØÐ9ØŸ*™*¨dÑ3¼Yñð ó    z/mfa/mentokod)Úresponse_classÚdbc                 ó|   • [         R                  " X5      nU(       d  [         R                  " 5       $ [        X5      $ ©N)Ú
mfa_routerÚ!_felhasznalo_az_atmeneti_tokenbolÚ_vissza_a_belepeshezr   )r   r   r   s      r   Úmentokod_belepes_oldalr%   -   s/   € ä×7Ò7¸ÓD€DÞÜ×.Ò.Ó0Ð0Ü˜'Ó(Ð(r   Ú Úmentokodc                 óT  • [         R                  " X5      nU(       d  [         R                  " 5       $ [        U 5      nUR                  n[
        R                  " X$U5      (       a  [        X[
        R                  5      $ [        R                  " X#5      [        R                  :w  a  [         R                  " 5       $ UR                  UR                  pv[
        R                  " X$XS5      b  [        X[
        R                  5      $ UR                  [         R"                  U5      n[$        R&                  " X#U5      (       d>  UR)                  5         [        XR                  [         R"                  U5      [*        5      $ UR-                  5         [$        R.                  " X&5      n[
        R0                  " X$U5        UR3                  [         R4                  " XvSSSU SU S3S95        UR-                  5         [$        R6                  " X&USU5        [         R8                  " X%U5      $ )Nu   BejelentkezÃ©sÚ-u&   Sikeres bejelentkezÃ©s mentÅ‘kÃ³ddal (u    ); felhasznÃ¡latlan mentÅ‘kÃ³d: z db©Ú
company_idÚuser_idÚ
field_nameÚ	old_valueÚ	new_valueÚ	hasznalat)r"   r#   r$   r   r   Úlogin_vedelemÚtiltva_er   ÚTILTOTT_UZENETÚ	mfa_utilsÚallapotÚALLAPOT_KESZÚidr+   Úsikertelen_rogziteseÚgetÚmodelsÚUserÚmentokod_utilsÚfelhasznalasÚrollbackÚHIBAS_MENTOKOD_UZENETÚcommitÚ	hatralevoÚsikeres_torleseÚaddÚAuditLogÚertesito_levelÚ_teljes_belepes)	r   r'   r   r   Ú	client_ipr   r,   r+   Úmaradts	            r   Úmentokod_belepesrI   5   sœ  € ä×7Ò7¸ÓD€DÞÜ×.Ò.Ó0Ð0ä˜gÓ&€IØ�J‰J€Eä×Ò˜b¨U×3Ñ3Ü˜g¬]×-IÑ-IÓJÐJô ×Ò˜Ó"¤i×&<Ñ&<Ó<Ü×.Ò.Ó0Ð0ð Ÿ'™' 4§?¡?ˆZÜ×)Ò)¨"¸ÓEÑQÜ˜g¬]×-IÑ-IÓJÐJà�6‰6”&—+‘+˜wÓ'€DÜ×&Ò& r°×:Ñ:Ø
�‰ŒÜ˜g§v¡v¬f¯k©k¸7Ó'CÔEZÓ[Ð[Ø‡I�I„Kä×%Ò% bÓ2€FÜ×!Ò! "°Ô7Ø‡F�FŒ6�?Š?ØÐ;KÐWZØ:¸9¸+ÐEeÐflÐemÐmpÐqñô ð ‡I�I„KÜ×!Ò! "¨y¸+ÀvÔNÜ×%Ò% b°Ó;Ð;r   Úokc           	      ó€   • [         R                  " XR                  [        R                  " XR
                  5      X4SS9$ )Nú/valassz-modult)r   rH   r   rJ   Útovabb)r"   Úmentokod_oldalr   r<   rA   r7   )r   r   r   r   rJ   s        r   Ú_kezelo_oldalrO   ]   s3   € Ü×$Ò$Ø—z‘z¬.×*BÒ*BÀ2ÇwÁwÓ*OÐVZÐj{ñð r   z/mfa/mentokodokÚcurrent_userc                 ó€   • [         R                  " U5      (       d  [        S[        R                  S9$ [        XU5      $ )u‚   A sajÃ¡t mentÅ‘kÃ³d-kÃ©szlet Ã¡llapota (a kÃ³dokat NEM mutatja: azok csak a kÃ©szÃ­tÃ©skor lÃ¡tszanak). Csak megjelenÃ­t, nem Ã­r.rL   ©ÚurlÚstatus_code)r4   Úbeallitva_er	   r   ÚHTTP_303_SEE_OTHERrO   )r   r   rP   s      r   Úmentokodok_oldalrW   c   s6   € ô × Ò  ×.Ñ.ÜÐ$5Ä6×C\ÑC\Ñ]Ð]Ü˜ lÓ3Ð3r   z/mfa/mentokodok/ujÚjelszoÚkodc                 ón  • [         R                  " U5      (       d  [        S[        R                  S9$ [
        R                  " U 5      (       a  [        XUSS9$ [        U 5      nUR                  UR                  UR                  p‡n[        R                  " X5U5      (       a  [        XU[        R                  S9$ [        R                  " X5X„5      b7  [        XUR!                  ["        R$                  U5      [        R                  S9$ UR!                  ["        R$                  U5      n	U(       a  ['        XR(                  5      (       d=  UR+                  5         [        XUR!                  ["        R$                  U5      [,        S9$ [         R.                  " X9U5      (       dC  UR+                  5         [        XUR!                  ["        R$                  U5      [,        S-   S-   S9$ [0        R2                  " X65      n
UR5                  ["        R6                  " XvSSS	[0        R8                   S
U S3S95        UR;                  5         [        R<                  " X5U5        [0        R>                  " X6US[A        U
5      5        [
        RB                  " XU
[A        U
5      [
        RD                  " XŠ5      S9$ )u+  Ãšj mentÅ‘kÃ³d-kÃ©szlet a SAJÃ�T fiÃ³khoz. Kell hozzÃ¡ a jelszÃ³ Ã‰S egy Ã©rvÃ©nyes hitelesÃ­tÅ‘ kÃ³d (utÃ³bbi egyszer hasznÃ¡lhatÃ³: ha a felhasznÃ¡lÃ³ az
imÃ©nt lÃ©pett be ugyanazzal, meg kell vÃ¡rnia a kÃ¶vetkezÅ‘ kÃ³dot). A rÃ©gi kÃ©szlet (hasznÃ¡lt Ã©s hasznÃ¡latlan kÃ³dok) Ã©rvÃ©nytelen lesz.rL   rR   u,   A kÃ©rÃ©s nem errÅ‘l az oldalrÃ³l Ã©rkezett.)r   Ú uk   (A telefonod ideje legyen pontos; ha az elÅ‘bb lÃ©ptÃ©l be ugyanazzal a kÃ³ddal, vÃ¡rd meg a kÃ¶vetkezÅ‘t.)u*   KÃ©tlÃ©pcsÅ‘s hitelesÃ­tÃ©s - mentÅ‘kÃ³dokr)   u    Ãšj mentÅ‘kÃ³d-kÃ©szlet kÃ©rve (u$    db, a korÃ¡bbiak Ã©rvÃ©nytelenek) (Ú)r*   Ú	generalas)r   ÚkodokrH   Ú
kod_szoveg)#r4   rU   r	   r   rV   r"   Ú_idegen_eredetrO   r   r7   r+   r   r1   r2   r3   r8   r9   r:   r;   r   Úhashed_passwordr>   ÚHIBAS_JELSZO_UZENETÚkod_ellenorzese_es_rogziteser<   Ú
uj_keszletrC   rD   ÚDARABr@   rB   rE   ÚlenrN   Úmentokod_szoveg)r   rX   rY   r   rP   rG   r,   r+   r   r   r^   s              r   Úmentokodok_ujrh   k   s   € ô × Ò  ×.Ñ.ÜÐ$5Ä6×C\ÑC\Ñ]Ð]Ü× Ò  ×)Ñ)Ü˜W¨,Ð=kÑlÐlä˜gÓ&€IØ!-§¡°,×2IÑ2IÈ<×K]ÑK]˜€Gä×Ò˜b¨U×3Ñ3Ü˜W¨,¼]×=YÑ=YÑZÐZä×)Ò)¨"¸ÓMÑYÜ˜W¨"¯&©&´·±¸gÓ*FÌ]×MiÑMiÑjÐjà�6‰6”&—+‘+˜wÓ'€DÞœ¨×1EÑ1E×FÑFØ
�‰ŒÜ˜W¨"¯&©&´·±¸gÓ*FÔM`ÑaÐaÜ×1Ò1°"¸C×@Ñ@Ø
�‰ŒÜ˜W¨"¯&©&´·±¸gÓ*FÔM`ÐcfÑMfð  jWñ  NWñ  Xð  	Xô ×%Ò% bÓ2€EØ‡F�FŒ6�?Š?ØÐ;gÐsvØ4´^×5IÑ5IÐ4JÐJnÐoxÐnyÐyzÐ{ñô ð ‡I�I„KÜ×!Ò! "°Ô7Ü×!Ò! "¨y¸+ÄsÈ5ÃzÔRÜ×$Ò$Ø E´#°e³*Ì×IcÒIcÐdiÓIqñð r   r!   )NN))Ú__doc__Úfastapir   r   r   r   r   Úfastapi.responsesr   r	   Úsqlalchemy.ormr
   r1   r<   r4   r:   Údatabaser   Úroutersr   r"   Úsecurityr   r   r   Útemplates_envr   Úrouterr   r?   rb   Ústrr   r9   r%   ÚpostrI   rO   r;   rW   rh   © r   r   Ú<module>ru      s¹  ðñ÷  >Õ =ß <Ý "ã Û Û Û Ý Ý %ß EÑ EÝ #á	‹€à˜jÐ)€	ØCÐ Ø>Ð ñ˜Gð °õ ð ‡�ˆO¨L€Ð9Ù;BÀ6»?ñ ) Gð )°ô )ó :ð)ð ‡�ˆ_ÓÙ7;¸B³xÉwÐW]Ëñ #<˜gð #<°ð #<ÀWô #<ó ð#<ñN˜7ð ¨ð ¸Sð ÈSõ ð ‡�Ð¨l€Ð;Ù5<¸V³_ÑbiÐjzÓb{ñ 4˜gð 4¨7ð 4ÐTZ×T_ÑT_ô 4ó <ð4ð ‡�Ð!Ó"ñ �r“(Ù�B‹xÙ˜&“/Ù 'Ð(8Ó 9ñ*Øð*àð*ð 
ð*ð 	ð	*ð
 —+‘+ô*ó #ñ*r   