ó
    7ÇÃj±"  ã                   óÔ  • S r SSKrSSKrSSKrSSKrSSKrSSKJrJr  SSKJ	r	J
r
  SSKJrJrJrJr  SSKJr  SSKrSSKJr  SrSrS	rS
r\R2                  " S\-   S-   \" \5      -   S-   5      rS\4S jrS\
\   4S jrS\S\S\4S jrS\S\4S jr S\S\S\	\   4S jr!S\S\S\4S jr"S\S\S\#4S jr$S\S\RJ                  S\#4S jr&S\S\SS4S jr'S\S\S\S\S\SS4S jr(g) ui  MentÅ‘kÃ³dok a kÃ©tlÃ©pcsÅ‘s hitelesÃ­tÃ©shez (v34) - egyszer hasznÃ¡lhatÃ³ tartalÃ©k belÃ©pÅ‘ kÃ³dok, ha a telefon nem Ã©rhetÅ‘ el.

MI EZ?
    A felhasznÃ¡lÃ³ a 2FA beÃ¡llÃ­tÃ¡sakor (Ã©s bÃ¡rmikor kÃ©sÅ‘bb, a /mfa/mentokodok oldalon) 10 db mentÅ‘kÃ³dot kap, EGYSZER lÃ¡tja Å‘ket
    (kinyomtathatja / jelszÃ³kezelÅ‘be teheti). Ha nincs nÃ¡la a telefon, belÃ©pÃ©skor a 6 jegyÅ± kÃ³d helyett egy mentÅ‘kÃ³dot Ã­rhat be
    (/mfa/mentokod). Minden kÃ³d CSAK EGYSZER hasznÃ¡lhatÃ³. LeÃ­rÃ¡s MiklÃ³snak: docs/KETLEPCSOS_HITELESITES.md, "MentÅ‘kÃ³dok" fejezet.

FORMÃ�TUM
    10 karakter, 32 betÅ±s Ã¡bÃ©cÃ©bÅ‘l, amelyben nincs az Ã¶sszetÃ©veszthetÅ‘ I, O, 0, 1 - kijelzÃ©skor "ABCDE-FGHJK" (50 bit entrÃ³pia).
    BeÃ­rÃ¡skor a kis/nagybetÅ±, a szÃ³kÃ¶z Ã©s a kÃ¶tÅ‘jel nem szÃ¡mÃ­t.

TÃ�ROLÃ�S (biztonsÃ¡g)
    Az adatbÃ¡zisban SOHA nincs nyers kÃ³d: csak HMAC-SHA256 lenyomat (kulcs: SECRET_KEY, a kÃ³dhoz a felhasznÃ¡lÃ³ azonosÃ­tÃ³ja is hozzÃ¡ van kÃ¶tve,
    Ã­gy kÃ©t felhasznÃ¡lÃ³ azonos kÃ³dja is mÃ¡s lenyomatot ad). Egy adatbÃ¡zis-mentÃ©s kiszivÃ¡rgÃ¡sa Ã­gy Ã¶nmagÃ¡ban nem ad hasznÃ¡lhatÃ³ kÃ³dot.
    (Ha a SECRET_KEY megvÃ¡ltozik, a meglÃ©vÅ‘ mentÅ‘kÃ³dok Ã©rvÃ©nytelenek - ugyanaz, mint a TOTP-titkoknÃ¡l; Ãºj kÃ©szletet kell kÃ©rni.)
    A kÃ³d 50 bites Ã©s a prÃ³bÃ¡lkozÃ¡sokat ugyanaz a talÃ¡lgatÃ¡s-vÃ©delem szÃ¡molja, mint a 6 jegyÅ± kÃ³dnÃ¡l (login_vedelem), ezÃ©rt a
    gyors hash elegendÅ‘ (nem kell lassÃº jelszÃ³-hash).

EGYSZER HASZNÃ�LHATÃ“ - ATOMIAN
    A felhasznÃ¡lÃ¡s `UPDATE ... SET felhasznalva_at WHERE id=? AND felhasznalva_at IS NULL`: ha kÃ©t kÃ©rÃ©s egyszerre ugyanazt a kÃ³dot kÃ¼ldi,
    csak az egyik talÃ¡l (rowcount == 1), a mÃ¡sik elutasÃ­tva.

Egyik fÃ¼ggvÃ©ny sem commitol (a hÃ­vÃ³ commitol, a naplÃ³bejegyzÃ©ssel egy tranzakciÃ³ban), kivÃ©ve az `ertesito_level`, ami a beÃ¡llÃ­tÃ¡s Ã©rtesÃ­tÅ‘jÃ©vel
azonos mÃ³don Ã¶nÃ¡llÃ³an kezeli a sajÃ¡t hibÃ¡it.
é    N)ÚdatetimeÚtimezone)ÚListÚOptional)ÚdeleteÚfuncÚselectÚupdate)ÚSession)Ú
SECRET_KEYé
   Ú ABCDEFGHJKLMNPQRSTUVWXYZ23456789é   Ú[z]{Ú}Úreturnc                  ód   • [         R                  " [        R                  5      R	                  S S9$ )N)Útzinfo)r   Únowr   ÚutcÚreplace© ó    Ú"/var/www/website/mentokod_utils.pyÚ_mostr   /   s#   € Ü�<Š<œŸ™Ó%×-Ñ-°TÐ-Ð:Ð:r   c                 ó¶   • [        U [        5      (       d  g[        R                  " SSU 5      R	                  5       n[
        R                  U5      (       a  U$ S$ )uÈ   A beÃ­rt kÃ³d normalizÃ¡lt alakja (nagybetÅ±, szÃ³kÃ¶z Ã©s kÃ¶tÅ‘jel nÃ©lkÃ¼l), vagy None, ha nem lehet mentÅ‘kÃ³d
(rossz hossz / nem megengedett karakter) - ilyenkor adatbÃ¡zis-lekÃ©rdezÃ©s sem kell.Nz[\s\-_]Ú )Ú
isinstanceÚstrÚreÚsubÚupperÚ_MINTAÚ	fullmatch)ÚkodÚtisztas     r   Ú
normalizalr'   3   sJ   € ô �cœ3×ÑØÜ�VŠV�J  CÓ(×.Ñ.Ó0€FÜ×%Ñ% f×-Ñ-ˆ6Ð7°4Ð7r   Úuser_idÚnormalizaltc                 ó¼   • [         R                  " [        R                  " S5      SU  SU 3R                  S5      [        R
                  5      R                  5       $ )uS   A kÃ³d HMAC-SHA256 lenyomata (hex). A felhasznÃ¡lÃ³ azonosÃ­tÃ³ja a kÃ¶tÃ©s rÃ©sze.zutf-8z
mentokod:uÚ:)ÚhmacÚnewr   ÚencodeÚhashlibÚsha256Ú	hexdigest)r(   r)   s     r   Úlenyomatr2   <   sO   € ä�8Š8”J×%Ò% gÓ.°*¸W¸IÀQÀ{ÀmÐ0T×0[Ñ0[Ð\cÓ0dÔfm×ftÑftÓu×Ñó  Bð  Br   c                 ó:   • U S[         S-   S-   U [         S-  S -   $ )u   KijelzÃ©sre: "ABCDE-FGHJK".Né   Ú-)ÚHOSSZ)r)   s    r   Úformazr7   A   s(   € à�{œ ™
Ð# cÑ)¨K¼À¹
¸Ð,DÑDÐDr   Údbc           	      ó
  • U R                  [        [        R                  5      R	                  [        R                  R
                  U:H  5      5        [        5       n/ n[        U5      [        :  a‘  SR                  S [        [        5       5       5      nUS U 5       ;   a  MG  UR                  [        U5      5        U R                  [        R                  " U[        X5      US95        [        U5      [        :  a  M‘  U$ )uñ   ÃšJ kÃ©szletet kÃ©szÃ­t (DARAB db), a felhasznÃ¡lÃ³ MINDEN korÃ¡bbi kÃ³djÃ¡t (hasznÃ¡ltat Ã©s hasznÃ¡latlant) tÃ¶rli. Visszaadja a kÃ³dokat kijelzÃ©sre
alkalmas alakban - EZ AZ EGYETLEN ALKALOM, amikor a nyers kÃ³dok lÃ©teznek. Nem commitol.r   c              3   óV   #   • U  H  n[         R                  " [        5      v •  M!     g 7f©N)ÚsecretsÚchoiceÚABECE)Ú.0Ú_s     r   Ú	<genexpr>Úuj_keszlet.<locals>.<genexpr>M   s   é € ÐD²|°!œŸš¤u×-Ð-²|ùs   ‚')c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr;   )r'   )r?   Úks     r   rA   rB   N   s   é € Ð2ªE q”Z —]�]ªEùs   ‚)r(   Úkod_hashÚletrehozva_at)Úexecuter   ÚmodelsÚMfaMentokodÚwherer(   r   ÚlenÚDARABÚjoinÚranger6   Úappendr7   Úaddr2   )r8   r(   ÚmostÚkodokÚnyerss        r   Ú
uj_keszletrT   F   s¾   € ð ‡J�JŒv”f×(Ñ(Ó)×/Ñ/´×0BÑ0B×0JÑ0JÈgÑ0UÓVÔWÜ‹7€DØ€EÜ
ˆe‹*”uÓ
Ø—‘ÑD´u¼U´|ÓDÓDˆØÑ2©EÓ2Ó2ÙØ�‰”V˜E“]Ô#Ø
�‰Œv×!Ò!¨'¼HÀWÓ<TÐdhÑiÔjô ˆe‹*”uÕ
ð €Lr   c                 óh  • U R                  [        [        R                  " 5       5      R	                  [
        R                  5      R                  [
        R                  R                  U:H  [
        R                  R                  R                  S5      5      5      R                  5       =(       d    S$ )uA   HÃ¡ny mÃ©g fel nem hasznÃ¡lt mentÅ‘kÃ³dja van a felhasznÃ¡lÃ³nak.Nr   )rG   r	   r   ÚcountÚselect_fromrH   rI   rJ   r(   Úfelhasznalva_atÚis_Úscalar©r8   r(   s     r   Ú	hatralevor\   U   sz   € à�:‰:ÜŒt�zŠz‹|Ó×(Ñ(¬×);Ñ);Ó<ß	‰Œv×!Ñ!×)Ñ)¨WÑ4´f×6HÑ6H×6XÑ6X×6\Ñ6\Ð]aÓ6bÓ	có÷ �fƒh÷ð ðr   c                 ó  • U R                  [        [        R                  " 5       5      R	                  [
        R                  5      R                  [
        R                  R                  U:H  5      5      R                  5       =(       d    SS:„  $ )uK   KÃ©szÃ¼lt-e valaha kÃ©szlet (akkor is igaz, ha minden kÃ³dot felhasznÃ¡lt).r   )
rG   r	   r   rV   rW   rH   rI   rJ   r(   rZ   r[   s     r   Úvan_keszletr^   ]   sz   € à�J‰J”vœdŸjšj›lÓ+×7Ñ7¼×8JÑ8JÓK×QÑQÔRX×RdÑRd×RlÑRlÐpwÑRwÓxÓy÷  Añ  Aó  C÷  Hð  GHð  LMñ  Mð  Mr   Úuserc           
      ó  • [        U5      nUc  gU R                  [        [        R                  R
                  5      R                  [        R                  R                  UR
                  :H  [        R                  R                  [        UR
                  U5      :H  [        R                  R                  R                  S5      5      5      R                  5       nUc  gU R                  [        [        R                  5      R                  [        R                  R
                  U:H  [        R                  R                  R                  S5      5      R                  [        5       S9R!                  SS95      nUR"                  S:H  $ )u¾   A beÃ­rt kÃ³d Ã©rvÃ©nyes, mÃ©g fel nem hasznÃ¡lt mentÅ‘kÃ³dja-e a felhasznÃ¡lÃ³nak; ha igen, ATOMIAN felhasznÃ¡ltnak jelÃ¶li. Nem commitol -
a hÃ­vÃ³nak siker utÃ¡n azonnal commitolnia kell.NF)rX   )Úsynchronize_sessioné   )r'   rG   r	   rH   rI   ÚidrJ   r(   rE   r2   rX   rY   rZ   r
   Úvaluesr   Úexecution_optionsÚrowcount)r8   r_   r%   r)   Úsor_idÚeredmenys         r   Úfelhasznalasri   b   s(  € ô ˜S“/€KØÑØØ�Z‰ZÜŒv×!Ñ!×$Ñ$Ó%ß	‰Œv×!Ñ!×)Ñ)¨T¯W©WÑ4Ü×!Ñ!×*Ñ*¬h°t·w±wÀÓ.LÑLÜ×!Ñ!×1Ñ1×5Ñ5°dÓ;ó
=ó÷
 �fƒhð ð �~ØØ�z‰zÜŒv×!Ñ!Ó"ß	‰Œv×!Ñ!×$Ñ$¨Ñ.´×0BÑ0B×0RÑ0R×0VÑ0VÐW[Ó0\Ó	]ß	‰¤£ˆÐ	(ß	Ñ	¨uÐ	Ð	5ó	€Hð ×Ñ Ñ!Ð!r   c                 ó¨   • U R                  [        [        R                  5      R	                  [        R                  R
                  U:H  5      5        g)ux   A felhasznÃ¡lÃ³ Ã¶sszes mentÅ‘kÃ³djÃ¡nak tÃ¶rlÃ©se (2FA-visszaÃ¡llÃ­tÃ¡skor / felhasznÃ¡lÃ³ tÃ¶rlÃ©sekor). Nem commitol.N)rG   r   rH   rI   rJ   r(   r[   s     r   Útorlesrk   y   s5   € à‡J�JŒv”f×(Ñ(Ó)×/Ñ/´×0BÑ0B×0JÑ0JÈgÑ0UÓVÕWr   Ú	client_ipÚesemenyÚmaradtc                 óº  •  SSK nSSKnU R                  [        R                  U5      nUb  UR
                  (       d  gS nUR                  UR                  5       5      n	US:X  a(  Sn
SnSnS[        U5       S	3U[        ::  a  S
OS-   S-   nOSn
SnSnSnSU" U5       SU" UR                  5       SU SU" U	5       SU" U5       SU S3nUR                  UR
                  /X®SUR                  UR                  U S9  U R                  5         g! [         a>  nU R!                  5         [#        S[%        U5      R&                   SU 35         SnAgSnAff = f)un  BiztonsÃ¡gi Ã©rtesÃ­tÅ‘ a felhasznÃ¡lÃ³nak: `esemeny` = "hasznalat" (mentÅ‘kÃ³ddal lÃ©ptek be) vagy "generalas" (Ãºj kÃ©szlet kÃ©szÃ¼lt).
Ha NEM Å‘ volt, ebbÅ‘l Ã©szreveszi. Nem akadÃ¡lyozhatja a belÃ©pÃ©st/generÃ¡lÃ¡st: hibÃ¡nÃ¡l csak a konzolra Ã­r. KategÃ³ria: "rendszer"
(a levÃ©l-feliratkozÃ¡sokkal nem kapcsolhatÃ³ ki). Commitol (a sajÃ¡t, Ã¶nÃ¡llÃ³ lÃ©pÃ©se).r   Nc                 óN   • [         R                  " U c  SSS9$ [        U 5      SS9$ )Nr   T)Úquote)ÚhtmlÚescaper   )Úxs    r   Ú<lambda>Ú ertesito_level.<locals>.<lambda>ˆ   s   € ”d—k’k¨©	 "ÀTÒJ´s¸1³vÀTÒJr   Ú	hasznalatu,   MentÅ‘kÃ³ddal lÃ©ptek be az EmeLOG fiÃ³kodbau   BelÃ©pÃ©s mentÅ‘kÃ³ddalu`   Az EmeLOG fiÃ³kodba <b>mentÅ‘kÃ³ddal</b> (a hitelesÃ­tÅ‘ alkalmazÃ¡s kÃ³dja helyett) lÃ©ptek be.u   <p>MÃ©g <b>u'   </b> felhasznÃ¡latlan mentÅ‘kÃ³dod van.uN    KevÃ©s maradt: generÃ¡lj Ãºj kÃ©szletet a fiÃ³kod menÃ¼jÃ©ben (MentÅ‘kÃ³dok)!r   z</p>u1   Ãšj mentÅ‘kÃ³dok kÃ©szÃ¼ltek az EmeLOG fiÃ³kodhozu   Ãšj mentÅ‘kÃ³dokua   Az EmeLOG fiÃ³kodhoz <b>Ãºj mentÅ‘kÃ³d-kÃ©szlet</b> kÃ©szÃ¼lt; a korÃ¡bbi kÃ³dok Ã©rvÃ©nytelenek.zJ<div style="font-family:Arial,sans-serif;max-width:560px;margin:auto"><h2>z</h2><p>Kedves z!</p><p>u   </p><p>IdÅ‘pont: <b>u   </b><br>IP-cÃ­m: <b>z</b></p>u„   <p style="color:#b02a37"><b>Ha nem te voltÃ¡l</b>, azonnal Ã©rtesÃ­tsd a rendszergazdÃ¡t - valaki ismerheti a jelszavadat!</p></div>Úrendszer)Ú	kategoriaÚ	prioritasÚ
company_idr8   uI   âš ï¸� A mentÅ‘kÃ³d Ã©rtesÃ­tÅ‘ levelÃ©t nem sikerÃ¼lt sorba Ã¡llÃ­tani: z: )Ú	email_sorÚlogin_vedelemÚgetrH   ÚUserÚemailÚhelyi_ido_szovegÚ	_utc_mostÚintÚFIGYELMEZTETO_KUSZOBÚusernameÚsorba_allitÚPRIORITAS_NORMALr{   ÚcommitÚ	ExceptionÚrollbackÚprintÚtypeÚ__name__)r8   r(   rl   rm   rn   r|   r}   r_   ÚerQ   ÚtargyÚfejlecÚszovegÚfigyelmeztetesÚtorzsÚexs                   r   Úertesito_levelr•   ~   s�  € ð!uÛÛØ�v‰v”f—k‘k 7Ó+ˆØ‰<˜tŸzŸzØÙJˆØ×-Ñ-¨m×.EÑ.EÓ.GÓHˆØ�kÓ!ØBˆEØ.ˆFØwˆFØ +¬C°«K¨=Ð8_Ð`Øu{ô  @Tó  vTÑ!qð  Z\ñ]ð `fñf‰Nð HˆEØ'ˆFØxˆFØˆNðÙ�V“9�+ð Ù˜4Ÿ=™=Ó)Ð*ð +Ø�ð Ù  ›w˜iÐ';¹A¸i»L¸>ÈØÐð UðUð 	ð 	×Ñ˜tŸz™z˜l¨EÀJÐZc×ZtÑZtØ)-¯©¸Rð 	ñ 	Aà
�	‰	�øÜó uØ
�‰ŒÜÐYÔZ^Ð_aÓZb×ZkÑZkÐYlÐlnÐoqÐnrÐs×tÑtûðuús   ‚<D ¿CD Ä
EÄ4EÅE))Ú__doc__r/   r,   rr   r    r<   r   r   Útypingr   r   Ú
sqlalchemyr   r   r	   r
   Úsqlalchemy.ormr   rH   Úconfigr   rL   r6   r>   r„   Úcompiler   r#   r   r'   rƒ   r2   r7   rT   r\   Úboolr^   r   ri   rk   r•   r   r   r   Ú<module>r�      s„  ðñó2 Û Û Û 	Û ß 'ß !ç 3Ó 3Ý "ã Ý à
€Ø
€Ø*€ØÐ Ø	�Š�D˜5‘L 5Ñ(©3¨u«:Ñ5¸Ñ<Ó	=€ð;ˆxô ;ð8�x ‘}ô 8ðB�cð B¨ð B°ô Bð
E˜ð E ô Eð
�7ð  Sð ¨T°#©Yô ð�'ð  Cð ¨Cô ðM�Gð M cð M¨dô Mð
"�Wð " F§K¡Kð "¸ô "ð.Xˆwð X ð X¨ô Xð
%u�wð %u¨ð %u¸ð %uÀsð %uÐTWð %uÐ\`õ %ur   