ó
    ê³ÄjžT  ã                   óZ  • S r SSKrSSKrSSKJr  SSKJrJrJr  SSKJ	r	J
r
  SSKrSSKrSSKrSSKJr  SSKJr  SrS	rS
rSrSrSrSrSr\ " S S5      5       rS\4S jrS\S\4S jrS\S\S\S\4S jrS\4S jr S\4S jr!S\"4S jr#S\S\	\   4S jr$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\
\   4S$ jr)S\S\S\
\   4S% jr*S1S&\
\   SS4S' jjr+S\4S( jr,S\"4S) jr-S\.4S* jr/S\4S+ jr0S\S\14S, jr2S\S\	\.   4S- jr3S.\S\4S/ jr4S\4S0 jr5g)2u<
  JelszÃ³-hÃ¡zirend (v36) - a cÃ©g Admin-ja a cÃ©g felhasznÃ¡lÃ³ira: kÃ¶telezÅ‘ jelszÃ³csere, a jelszÃ³ bonyolultsÃ¡ga, a jelszÃ³-elÅ‘zmÃ©ny.
LeÃ­rÃ¡s: docs/JELSZO_HAZIREND.md

MEGRENDELÅ�I SZABÃ�LYOK (v36)
    * MINDEN OPCIONÃ�LIS: a cÃ©g Admin-ja kapcsolja be; alapbÃ³l egyik szabÃ¡ly sincs Ã©rvÃ©nyben (a rÃ©gi mÅ±kÃ¶dÃ©s: legalÃ¡bb 6 karakter).
    * KÃ–TELEZÅ� JELSZÃ“CSERE: Ã©rvÃ©nyessÃ©g 30-180 nap (ERVENYESSEG_MIN_NAP / ERVENYESSEG_MAX_NAP). A lejÃ¡rat elÅ‘tt EMLEKEZTETO_NAP (7) nappal a felhasznÃ¡lÃ³
      Ã©rtesÃ­tÅ‘ levelet kap jelszÃ³vÃ¡ltoztatÃ³ hivatkozÃ¡ssal (a hivatkozÃ¡s a belÃ©pÃ©s utÃ¡n a Profilom jelszÃ³-kÃ¡rtyÃ¡jÃ¡ra visz; a link Ã¶nmagÃ¡ban NEM elÃ©g jelszÃ³t
      cserÃ©lni). LejÃ¡ratkor a felhasznÃ¡lÃ³ be tud lÃ©pni, de csak a Profilom oldalig jut (security.get_current_user), amÃ­g Ãºj jelszÃ³t nem vÃ¡laszt.
    * BONYOLULTSÃ�G: minimum hossz (6-32) + kÃ¶telezÅ‘ kisbetÅ± / nagybetÅ± / szÃ¡m / speciÃ¡lis karakter (kÃ¼lÃ¶n kapcsolÃ³k). A rendszer a cÃ©gadminnak jelzi, ha a beÃ¡llÃ­tÃ¡s
      gyenge (gyengesegek()).
    * ELÅ�ZMÃ‰NY: a legutÃ³bbi N jelszÃ³ (a jelenlegit is beleÃ©rtve) nem hasznÃ¡lhatÃ³ Ãºjra (0 = kikapcsolva, legfeljebb ELOZMENY_MAX).
    * A rendszeradminisztrÃ¡torra (Admin + company_id==1) a lejÃ¡rat nem vonatkozik (a kizÃ¡rÃ¡s elleni vÃ©delem); a bonyolultsÃ¡g Ã©s az elÅ‘zmÃ©ny a cÃ©g minden felhasznÃ¡lÃ³jÃ¡t Ã©rinti.

MÅ°KÃ–DÃ‰S
    1. A szabÃ¡lyok a `companies` tÃ¡blÃ¡n vannak (jelszo_*), a felhasznÃ¡lÃ³n a lejÃ¡rat (`jelszo_lejarat_at`) Ã©s az emlÃ©keztetÅ‘ jelzÅ‘je (`jelszo_emlekezteto_at`).
       A lejÃ¡rat elÅ‘re kiszÃ¡molt oszlop, hogy minden kÃ©rÃ©snÃ©l elÃ©g legyen EGY mezÅ‘ ellenÅ‘rzÃ©se (nincs cÃ©g-lekÃ©rdezÃ©s, amÃ­g nincs lejÃ¡rat-jelÃ¶lt).
    2. JelszÃ³ beÃ¡llÃ­tÃ¡sakor MINDEN vÃ©gpont (sajÃ¡t csere, cÃ©gadmin/rendszeradmin csere, aktivÃ¡lÃ¡s) hÃ­vja: `ellenorzes()` (bonyolultsÃ¡g + elÅ‘zmÃ©ny) a beÃ¡llÃ­tÃ¡s ELÅ�TT,
       Ã©s `uj_jelszo_utan()` UTÃ�NA (elÅ‘zmÃ©ny-mentÃ©s, Ãºj lejÃ¡rat). Egyik sem commitol.
    3. A szabÃ¡lyok mÃ³dosÃ­tÃ¡sakor (routers/jelszo_hazirend.py) az `alkalmaz()` ÃºjraszÃ¡molja a cÃ©g felhasznÃ¡lÃ³inak lejÃ¡ratÃ¡t, ha a lejÃ¡rati idÅ‘ megvÃ¡ltozott.
       Aki Ã­gy azonnal lejÃ¡rt volna, TURELMI_NAP (7) nap tÃ¼relmi idÅ‘t kap (senki nem zÃ¡rul ki a bekapcsolÃ¡s pillanatÃ¡ban, Ã©s az emlÃ©keztetÅ‘ is megÃ©rkezik).
    4. Az `emlekeztetok()` Ã³rÃ¡nkÃ©nt fut (main.py Ã¼temezÅ‘, vedett()): a kÃ¶vetkezÅ‘ EMLEKEZTETO_NAP napban lejÃ¡rÃ³ jelszavÃºaknak levelet kÃ¼ld (egyszer / lejÃ¡rati ciklus).
       A levÃ©l `rendszer` kategÃ³riÃ¡jÃº: a "SzabadsÃ¡gon vagyok" mÃ³d alatt is kimegy (biztonsÃ¡gi levÃ©l).
é    N)Ú	dataclass)ÚdatetimeÚ	timedeltaÚtimezone)ÚListÚOptional)ÚSessionLocal)ÚHELYI_TZé   é    é   é´   é   é
   )z/profilz/sajat-jelszo-cserec                   óÆ   • \ rS rSr% Sr\\   \S'   \r	\\S'   Sr
\\S'   Sr\\S'   Sr\\S'   Sr\\S	'   S
r\\S'   \S\4S j5       r\S\4S j5       r\S\4S j5       rSrg)Ú	Szabalyoké.   NÚervenyesseg_napÚ	min_hosszFÚkisbetuÚnagybetuÚszamÚ	specialisr   Úelozmeny_dbÚreturnc                 ó   • U R                   S L$ ©N)r   ©Úselfs    Ú#/var/www/website/jelszo_hazirend.pyÚlejarat_aktivÚSzabalyok.lejarat_aktiv8   s   € à×#Ñ#¨4Ð/Ð/ó    c                 óÀ   • U R                   [        :„  =(       dE    U R                  =(       d2    U R                  =(       d    U R                  =(       d    U R
                  $ r   )r   ÚALAP_MIN_HOSSZr   r   r   r   r   s    r    Úbonyolultsag_aktivÚSzabalyok.bonyolultsag_aktiv<   s;   € à�~‰~¤Ñ.×n°$·,±,×nÀ$Ç-Á-×nÐSW×S\ÑS\×nÐ`d×`nÑ`nÐnr#   c                 ól   • U R                   =(       d"    U R                  =(       d    U R                  S:„  $ )Nr   )r!   r&   r   r   s    r    Úbarmi_aktivÚSzabalyok.barmi_aktiv@   s*   € à×!Ñ!×T T×%<Ñ%<×TÀ×@PÑ@PÐSTÑ@TÐTr#   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   ÚintÚ__annotations__r%   r   r   Úboolr   r   r   r   Úpropertyr!   r&   r)   Ú__static_attributes__r+   r#   r    r   r   .   s¡   ‡ à%)€O�X˜c‘]Ó)Ø#€IˆsÓ#Ø€GˆTÓØ€HˆdÓØ€Dˆ$ÓØ€IˆtÓØ€K�Óàð0˜tó 0ó ð0ð ðo Dó oó ðoð ðU˜Tó Uó óUr#   r   r   c                  ód   • [         R                  " [        R                  5      R	                  S S9$ )N©Útzinfo)r   Únowr   ÚutcÚreplacer+   r#   r    Ú	_utc_mostr;   E   s#   € Ü�<Š<œŸ™Ó%×-Ñ-°TÐ-Ð:Ð:r#   Úutc_naivc                 ó€   • U R                  [        R                  S9R                  [        5      R                  S5      $ )Nr6   z%Y-%m-%d)r:   r   r9   Ú
astimezoner
   Ústrftime)r<   s    r    Ú_helyi_datumr@   I   s0   € Ø×Ñ¤8§<¡<ÐÐ0×;Ñ;¼HÓE×NÑNÈzÓZÐZr#   ÚalsoÚfelsoÚalapc                 ót   •  [        U 5      n[        U[	        X$5      5      $ ! [        [        4 a    Us $ f = fr   )r0   Ú	TypeErrorÚ
ValueErrorÚmaxÚmin)ÚertekrA   rB   rC   Úns        r    Ú_egeszrK   M   s>   € ðÜ�‹Jˆô ˆt”S˜“]Ó#Ð#øô ”zÐ"ó ØŠðús   ‚" ¢7¶7c                 óª  • U c
  [        5       $ [        U SS5      n[        Uc  SO[        U[        [        [        5      [        [        U SS5      [
        [        [
        5      [        [        U SS5      5      [        [        U SS5      5      [        [        U SS5      5      [        [        U SS5      5      [        [        U S	S5      S
[        S
5      S9$ )u¡   A cÃ©g (models.Company vagy None) jelszÃ³-szabÃ¡lyai. A tÃ¡rolt Ã©rtÃ©kek vÃ©dekezÅ‘ mÃ³don szÅ±kÃ­tve (egy kÃ©zzel elÃ¡llÃ­tott Ã©rtÃ©k se tÃ¶rje a belÃ©pÃ©st).NÚjelszo_ervenyesseg_napÚjelszo_min_hosszÚjelszo_kell_kisbetuFÚjelszo_kell_nagybetuÚjelszo_kell_szamÚjelszo_kell_specialisÚjelszo_elozmeny_dbr   )r   r   r   r   r   r   r   )	r   ÚgetattrrK   ÚERVENYESSEG_MIN_NAPÚERVENYESSEG_MAX_NAPr%   ÚMAX_MIN_HOSSZr2   ÚELOZMENY_MAX)ÚcegÚnaps     r    Ú	szabalyokr[   X   s½   € à
�{Ü‹{ÐÜ
�#Ð/°Ó
6€CÜØ #¡™´¸Ô=PÔReÔgzÓ1{Üœ Ð&8¸$Ó?ÄÔQ^Ô`nÓoÜ”W˜SÐ"7¸Ó?Ó@Ü”g˜cÐ#9¸5ÓAÓBÜ”'˜#Ð1°5Ó9Ó:Ü”w˜sÐ$;¸UÓCÓDÜœ7 3Ð(<¸dÓCÀQÌÐVWÓXñð r#   c                 ón   • [        U(       a$  U R                  [        R                  U5      5      $ S 5      $ r   )r[   ÚgetÚmodelsÚCompany)ÚdbÚ
company_ids     r    Úszabalyok_cegrerb   h   s&   € Ü¾:�R—V‘VœFŸN™N¨JÓ7ÓPÐPÈ4ÓPÐPr#   c                 óL   • U R                   S:H  =(       a    U R                  S:H  $ )NÚAdminé   )Úrolera   )Úusers    r    Ú_rendszeradminrh   l   s   € Ø�9‰9˜Ñ×8 D§O¡O°qÑ$8Ð8r#   Úszabc                 ó8  • SU R                    S3/nU R                  (       a  UR                  S5        U R                  (       a  UR                  S5        U R                  (       a  UR                  S5        U R
                  (       a  UR                  S5        U$ )uC   A kÃ¶vetelmÃ©nyek emberi szÃ¶vege (Å±rlapok sÃºgÃ³ja, hibaÃ¼zenet).õ
   legalÃ¡bb z	 karakteru   kisbetÅ±u	   nagybetÅ±u   szÃ¡mu%   speciÃ¡lis karakter (pl. ! ? # % - _))r   r   Úappendr   r   r   )ri   Úlistas     r    Úkovetelmenyekrn   p   sj   € à˜$Ÿ.™.Ð)¨Ð3Ð4€EØ‡|‡|Ø�‰�ZÔ Ø‡}‡}Ø�‰�[Ô!Ø‡y‡yØ�‰�WÔØ‡~‡~Ø�‰Ð<Ô=Ø€Lr#   c                 ó6   • SR                  [        U 5      5      $ )Nú, )Újoinrn   )ri   s    r    Úkovetelmeny_szovegrr   ~   s   € Ø�9‰9”] 4Ó(Ó)Ð)r#   Úcc                 ód   • U R                  5       (       + =(       a    U R                  5       (       + $ r   )ÚisalnumÚisspace)rs   s    r    Ú_specialis_erw   …   s   € Ø�y‰y‹{Œ?×. 1§9¡9£;œÐ.r#   Újelszoc                 óX  • U=(       d    Sn/ n[        U5      U R                  :  a  UR                  SU R                   S35        U R                  (       a(  [	        S U 5       5      (       d  UR                  S5        U R
                  (       a(  [	        S U 5       5      (       d  UR                  S5        U R                  (       a(  [	        S U 5       5      (       d  UR                  S	5        U R                  (       a(  [	        S
 U 5       5      (       d  UR                  S5        U$ )uJ   A jelszÃ³ melyik bonyolultsÃ¡gi szabÃ¡lyt sÃ©rti (Ã¼res lista = megfelel).Ú rk   u    karakter hosszÃº legyenc              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr   )Úislower©Ú.0rs   s     r    Ú	<genexpr>Ú%bonyolultsag_hibai.<locals>.<genexpr>�   s   é € Ð<²V°§	¡	§ ²Vùó   ‚u   tartalmazzon kisbetÅ±tc              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr   )Úisupperr}   s     r    r   r€   ‘   s   é € Ð =²f°§¡§ ²fùr�   u   tartalmazzon nagybetÅ±tc              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr   )Úisdigitr}   s     r    r   r€   “   s   é € Ð9²&¨QŸY™YŸ[˜[²&ùr�   u   tartalmazzon szÃ¡motc              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   )rw   r}   s     r    r   r€   •   s   é € Ð!Bº6°a¤,¨q§/ /º6ùs   ‚u3   tartalmazzon speciÃ¡lis karaktert (pl. ! ? # % - _))Úlenr   rl   r   Úanyr   r   r   )ri   rx   Úhibaks      r    Úbonyolultsag_hibairŠ   ‰   sÐ   € à�\�r€FØ€EÜ
ˆ6ƒ{�T—^‘^Ó#Ø�‰�z $§.¡.Ð!1Ð1IÐJÔKØ‡|‡|œCÑ<±VÓ<×<Ñ<Ø�‰Ð-Ô.Ø‡}‡}œSÑ =±fÓ =×=Ñ=Ø�‰Ð.Ô/Ø‡y‡yœÑ9±&Ó9×9Ñ9Ø�‰Ð+Ô,Ø‡~‡~œcÑ!B¹6Ó!B×BÑBØ�‰ÐJÔKØ€Lr#   c                 ó^  • SSK Jn  UR                  /nUR                  S:¼  aÒ  U R	                  [
        R                  R                  5      R                  [
        R                  R                  UR                  :H  5      R                  [
        R                  R                  R                  5       5      R                  UR                  S-
  5      R                  5       nXV Vs/ s H  u  owPM     sn-  nU H  n U(       a  U" X75      (       a    gM  M     gs  snf ! [         a     M3  f = f)u¤   Igaz, ha a jelszÃ³ a felhasznÃ¡lÃ³ legutÃ³bbi `elozmeny_db` jelszava kÃ¶zÃ¶tt van (a jelenlegi is beleszÃ¡mÃ­t). bcrypt: legfeljebb ELOZMENY_MAX Ã¶sszehasonlÃ­tÃ¡s.r   )Úverify_passwordé   re   TF)ÚsecurityrŒ   Úhashed_passwordr   Úqueryr^   ÚJelszoElozmenyÚfilterÚuser_idÚidÚorder_byÚdescÚlimitÚallÚ	Exception)r`   rg   ri   rx   rŒ   ÚhashekÚsorokÚhs           r    Ú	_volt_marr�   š   sý   € å(Ø×"Ñ"Ð#€FØ×Ñ˜1ÓØ—‘œ&×/Ñ/×?Ñ?Ó@×GÑGÌ×H]ÑH]×HeÑHeÐim×ipÑipÑHpÓqß‘(œ6×0Ñ0×3Ñ3×8Ñ8Ó:Ó;¿E¹EÀ$×BRÑBRÐUVÑBVÓ<W×X[ÑX[ÓX]ð 	à Ó'¢™˜!’1¡Ñ'Ñ'ˆÛˆð	Þ‘_ V×/Ñ/Ùñ 0‰qñ ð ùò (øô
 ó 	Úð	ús   Ã$DÃ<DÄ
D,Ä+D,c                 ó"  • [        XR                  5      n[        X25      nU(       a  SSR                  U5      -   S-   $ UR                  S:¼  aA  UR
                  SLa2  [        XX25      (       a!  UR                  S:X  a  gSUR                   S3$ g	)
u  A cÃ©g jelszÃ³-hÃ¡zirendjÃ©nek ellenÅ‘rzÃ©se a felhasznÃ¡lÃ³ ÃšJ jelszavÃ¡ra. None = megfelel; kÃ¼lÃ¶nben a felhasznÃ¡lÃ³nak szÃ³lÃ³ hibaÃ¼zenet.
A rÃ©gi, mindig Ã©rvÃ©nyes ellenÅ‘rzÃ©sek (security.jelszo_eleg_eros_e / jelszo_tul_hosszu_e) a HÃ�VÃ“ dolga. Nem mÃ³dosÃ­t, nem commitol.u=   Az Ãºj jelszÃ³ nem felel meg a cÃ©g jelszÃ³-hÃ¡zirendjÃ©nek: rp   Ú.re   Fu+   Az Ãºj jelszÃ³ nem egyezhet a jelenlegivel.u5   Ezt a jelszÃ³t nemrÃ©g mÃ¡r hasznÃ¡ltad - az utolsÃ³ u    jelszÃ³ nem ismÃ©telhetÅ‘.N)rb   ra   rŠ   rq   r   Ú	aktivalvar�   )r`   rg   rx   ri   r‰   s        r    Ú
ellenorzesr¡   «   sŽ   € ô ˜2Ÿ™Ó/€DÜ˜tÓ,€EÞØNÐQU×QZÑQZÐ[`ÓQaÑaÐdgÑgÐgà×Ñ˜1Ó §¡°uÒ!<ÄÈ2ÐUY×AbÑAbØ×Ñ˜qÓ Ø@ØFÀt×GWÑGWÐFXÐXsÐtÐtØr#   c                 ó�   • U R                   (       a  [        U5      (       d  UR                  SL a  g U[        U R                  S9-   $ )NF©Údays)r!   rh   r    r   r   )ri   rg   rC   s      r    Úlejarat_szamitasar¥   ½   s9   € Ø××¤°×!5Ñ!5¸¿¹È5Ò9PØØ”) ×!5Ñ!5Ñ6Ñ6Ð6r#   Ú	regi_hashc                 ó†  • [        XR                  5      n[        5       nU(       Ga}  UR                  S:¼  Gal  U R	                  [
        R                  " UR                  X$S95        U R                  5         U R                  [
        R                  R                  5      R                  [
        R                  R                  UR                  :H  5      R                  [
        R                  R                  R                  5       5      R                  [        5      R!                  5       nU(       at  U R                  [
        R                  5      R                  [
        R                  R                  R#                  U Vs/ s H  u  ofPM     sn5      5      R%                  SS9  ['        X1U5      Ul        SUl        gs  snf )u)  A felhasznÃ¡lÃ³ jelszavÃ¡nak beÃ¡llÃ­tÃ¡sa UTÃ�N hÃ­vandÃ³ (a hÃ­vÃ³ mÃ¡r beÃ­rta a hashed_password-Ã¶t Ã©s a jelszo_valtozott_at-ot).
ElÅ‘zmÃ©ny: a rÃ©gi lenyomatot eltesszi (ha a cÃ©gnÃ©l van elÅ‘zmÃ©ny-szabÃ¡ly; aktivÃ¡lÃ¡skor regi_hash=None). Ãšj lejÃ¡rat: most + Ã©rvÃ©nyessÃ©g.
NEM commitol.r�   )r“   r�   Úletrehozva_atF)Úsynchronize_sessionN)rb   ra   r;   r   Úaddr^   r‘   r”   Úflushr�   r’   r“   r•   r–   ÚoffsetrX   r˜   Úin_Údeleter¥   Újelszo_lejarat_atÚjelszo_emlekezteto_at)r`   rg   r¦   ri   ÚmostÚregiÚis          r    Úuj_jelszo_utanr´   Ã   sB  € ô ˜2Ÿ™Ó/€DÜ‹;€Dß�T×%Ñ%¨Ô*Ø
�‰Œv×$Ò$¨T¯W©WÀiÑdÔeØ
�‰Œ
Ø—‘œ×.Ñ.×1Ñ1Ó2×9Ñ9¼&×:OÑ:O×:WÑ:WÐ[_×[bÑ[bÑ:bÓcß‘œ&×/Ñ/×2Ñ2×7Ñ7Ó9Ó:¿6¹6Ä,Ó;O×PSÑPSÓPUð 	æØ�H‰H”V×*Ñ*Ó+×2Ñ2´6×3HÑ3H×3KÑ3K×3OÑ3OÑ_cÓPdÒ_cÑW[ÐXYÒQRÑ_cÑPdÓ3eÓf×mÑmð  CHÐmñ  IÜ.¨t¸4Ó@€DÔØ!%€DÕùò Qes   Æ F>c                 ó<  • [        U5      n[        5       nSnU R                  [        R                  5      R                  [        R                  R                  UR                  :H  5      R                  5        HŸ  nUR                  nUb9  UR                  b,  UR                  [        R                  5      R                  SS9n[        X%U=(       d    U5      nUb  Xs::  a  U[!        ["        S9-   nUR$                  U:w  a  SUl        Xul        Uc  Mš  US-  nM¡     U$ )uï  A cÃ©g (mÃ³dosÃ­tott) lejÃ¡rati szabÃ¡lyÃ¡nak alkalmazÃ¡sa a cÃ©g minden felhasznÃ¡lÃ³jÃ¡ra: ÃºjraszÃ¡molja a lejÃ¡ratot. A kiindulÃ¡s a felhasznÃ¡lÃ³ utolsÃ³ jelszÃ³cserÃ©je
(jelszo_valtozott_at; ha sosem volt: most). Aki a szÃ¡mÃ­tÃ¡s szerint mÃ¡r lejÃ¡rt, TURELMI_NAP tÃ¼relmi idÅ‘t kap. Kikapcsolt szabÃ¡lynÃ¡l a lejÃ¡ratok tÃ¶rlÅ‘dnek.
Az emlÃ©keztetÅ‘ jelzÅ‘je tÃ¶rlÅ‘dik, ha a lejÃ¡rat megvÃ¡ltozott. VisszatÃ©r: az Ã©rintett (lejÃ¡rattal rendelkezÅ‘) felhasznÃ¡lÃ³k szÃ¡ma. NEM commitol.r   Nr6   r£   re   )r[   r;   r�   r^   ÚUserr’   ra   r”   r˜   Újelszo_valtozott_atr7   r>   r   r9   r:   r¥   r   ÚTURELMI_NAPr¯   r°   )r`   rY   ri   r±   ÚerintettÚurC   Úujs           r    Úalkalmazr¼   Ô   së   € ô �S‹>€DÜ‹;€DØ€HØ�X‰X”f—k‘kÓ"×)Ñ)¬&¯+©+×*@Ñ*@ÀCÇFÁFÑ*JÓK×OÑOÖQˆØ×$Ñ$ˆØÑ §¡Ñ 7Ø—?‘?¤8§<¡<Ó0×8Ñ8ÀÐ8ÐEˆDÜ˜t¨¯°Ó5ˆØ‰>˜b›jØœ	¤{Ñ3Ñ3ˆBØ×Ñ "Ó$Ø&*ˆAÔ#Ø ÔØ‹>Ø˜‰MŠHñ Rð €Or#   c                 óÌ   • UR                   b  UR                   [        5       :”  a  g[        U5      (       d  UR                  SL a  g[	        XR
                  5      R                  $ )u6  Igaz, ha a felhasznÃ¡lÃ³nak most KÃ–TELEZÅ� jelszÃ³t cserÃ©lnie (a jelszava lejÃ¡rt). A security.get_current_user() hÃ­vja, de csak akkor, ha a
`jelszo_lejarat_at` ki van tÃ¶ltve. VÃ©dekezÅ‘: ha a cÃ©g szabÃ¡lya kÃ¶zben megszÅ±nt / a felhasznÃ¡lÃ³ rendszeradmin lett vagy mÃ¡s cÃ©gbe kerÃ¼lt, nem kÃ©nyszerÃ­t.F)r¯   r;   rh   r    rb   ra   r!   ©r`   rg   s     r    Úkenyszeritett_csere_er¿   í   sP   € ð ×ÑÑ%¨×)?Ñ)?Ä)Ã+Ó)MØÜ�d×Ñ˜tŸ~™~°Ò6ØÜ˜2Ÿ™Ó/×=Ñ=Ð=r#   c                 ó  • [        XR                  5      n[        5       nUR                  (       a  [	        U5      (       d  UR
                  OSnSnUb3  [        S[        R                  " XC-
  R                  5       S-  5      5      nU[        U5      UR                  UR                  U(       a  [        U5      OSUUSL=(       a    XC:*  USL=(       a"    X4s=:  =(       a    U[        [        S9-   :*  Os  UR                   S.	$ )u/   A Profilom oldal jelszÃ³-kÃ¡rtyÃ¡jÃ¡nak adatai.Nr   é€Q r£   )	r[   rr   r&   r   Úlejarat_datumÚhatralevo_napÚlejartÚkozelegr   )rb   ra   r;   r!   rh   r¯   rG   ÚmathÚceilÚtotal_secondsrr   r&   r   r@   r   ÚEMLEKEZTETO_NAPr   )r`   rg   ri   r±   ÚlejaratÚ	hatralevos         r    ÚallapotrÌ   ÷   s×   € ä˜2Ÿ™Ó/€DÜ‹;€DØ)-×);×);ÄNÐSW×DXÑDXˆd×$Ò$Ð_c€GØ€IØÑÜ˜œ4Ÿ9š9 g¡n×%CÑ%CÓ%EÈÑ%MÓNÓOˆ	àÜ0°Ó6Ø"×5Ñ5Ø×'Ñ'Þ29œ gÔ.¸tØ"Ø Ð%×9¨'©/Ø $Ð&×c¨4×+cÓ+c¸TÄIÔSbÑDcÑ=cÔ+cØ—^‘^ñ
ð 
r#   c                 óö   •  UR                   b[  UR                   [        5       [        [        S9-   ::  a5  [	        XR
                  5      R                  (       a  [        U5      (       d  gg! [         a     gf = f)uC  Hova menjen a felhasznÃ¡lÃ³ a sikeres belÃ©pÃ©s utÃ¡n. AlapbÃ³l a modulvÃ¡lasztÃ³; ha a jelszava a kÃ¶vetkezÅ‘ EMLEKEZTETO_NAP napban lejÃ¡r, a Profilom
jelszÃ³-kÃ¡rtyÃ¡ja (az emlÃ©keztetÅ‘ levÃ©l hivatkozÃ¡sa ide Ã©rkezik: levÃ©l -> belÃ©pÃ©s -> jelszÃ³csere). A lejÃ¡rt jelszÃ³t a get_current_user Ãºgyis ide irÃ¡nyÃ­tja.r£   z/profil?jelszo=kozeleg#jelszoz/valassz-modult)	r¯   r;   r   rÉ   rb   ra   r!   rh   r™   r¾   s     r    Úbelepes_utani_celrÎ     sj   € ðØ×!Ñ!Ñ-°$×2HÑ2HÌIËKÔZcÔixÑZyÑLyÓ2yÜ# B¯©Ó8×F×FÌ~Ð^b×OcÑOcØ2ð øô ó ØØðús   ‚A'A+ Á+
A8Á7A8c                 ó  • SnU R                   (       a  US-  nU R                  (       a  US-  nU R                  (       a  US-  nU R                  (       a  US-  nUS:X  a  SnU R                  [
        R                  " U5      -  $ )u  A hÃ¡zirendnek MEGFELELÅ� legrosszabb jelszÃ³ becsÃ¼lt erÅ‘ssÃ©ge bitben: hossz x log2(a megengedett karakterkÃ©szlet). Ha nincs karakterfajta elÅ‘Ã­rva,
a legrosszabb eset a csupa szÃ¡mjegy (10 elemÅ± kÃ©szlet). Durva, de a cÃ©gadmin szÃ¡mÃ¡ra Ã©rthetÅ‘ becslÃ©s (nem szÃ³tÃ¡r-alapÃº).r   é   r   é!   )r   r   r   r   r   rÆ   Úlog2)ri   Úkeszlets     r    Úbecsult_bitrÔ     sm   € ð €GØ‡|‡|Ø�2‰ˆØ‡}‡}Ø�2‰ˆØ‡y‡yØ�2‰ˆØ‡~‡~Ø�2‰ˆØ�!ƒ|ØˆØ�>‰>œDŸIšI gÓ.Ñ.Ð.r#   c                 óæ  • [        U R                  U R                  U R                  U R                  /5      n[        U 5      n/ nU R                  S:  a#  UR                  SSU R                   S3S.5        O2U R                  S:  a"  UR                  SSU R                   S	3S.5        US
:  a8  U R                  S:  a(  UR                  US:X  a  SOSUS:X  a  SOSU S3S.5        US:  a"  UR                  SS[        U5       S3S.5        O'US:  a!  UR                  SS[        U5       S3S.5        U R                  S:X  a*  UR                  U R                  (       a  SSS.OSSS.5        U$ )u‚   A beÃ¡llÃ­tÃ¡s gyenge pontjai a cÃ©gadminnak: [{"szint": "danger"|"warning", "szoveg": ...}]. Ãœres lista = nincs figyelmeztetÃ©s.é   Údangeru   A minimum hossz mindÃ¶ssze u‡    karakter - ilyen rÃ¶vid jelszÃ³t kÃ¶nnyen kitalÃ¡lnak vagy vÃ©gigprÃ³bÃ¡lnak. LegalÃ¡bb 8, ideÃ¡lisan 12 karaktert Ã©rdemes elÅ‘Ã­rni.)ÚszintÚszovegé   ÚwarningzA minimum hossz un    karakter. LegalÃ¡bb 12 karakter biztonsÃ¡gosabb (a hosszabb jelszÃ³ tÃ¶bbet Ã©r, mint egy rÃ¶vid, bonyolult).é   é   r   uj   Nincs karakterfajta elÅ‘Ã­rva - a rendszer a csupa kisbetÅ±s vagy csupa szÃ¡mjegyes jelszÃ³t is elfogadja.zCsak uŸ    karakterfajta van elÅ‘Ã­rva. LegalÃ¡bb hÃ¡rom fajta (kisbetÅ±, nagybetÅ±, szÃ¡m, speciÃ¡lis karakter) ajÃ¡nlott, hacsak nem Ã­rsz elÅ‘ legalÃ¡bb 14 karaktert.é(   uH   A hÃ¡zirendnek megfelelÅ‘ legrosszabb jelszÃ³ becsÃ¼lt erÅ‘ssÃ©ge csak ~u,    bit - gyenge (ajÃ¡nlott: legalÃ¡bb 60 bit).é<   uC   A hÃ¡zirendnek megfelelÅ‘ legrosszabb jelszÃ³ becsÃ¼lt erÅ‘ssÃ©ge ~u.    bit - kÃ¶zepes (ajÃ¡nlott: legalÃ¡bb 60 bit).u’   Nincs jelszÃ³-elÅ‘zmÃ©ny megadva: a felhasznÃ¡lÃ³ a lejÃ¡ratkor visszavÃ¡lthat a rÃ©gi jelszavÃ¡ra (a kÃ¶telezÅ‘ jelszÃ³csere Ã­gy nem sokat Ã©r).uZ   Nincs jelszÃ³-elÅ‘zmÃ©ny megadva: a felhasznÃ¡lÃ³ a rÃ©gi jelszavÃ¡t Ãºjra beÃ¡llÃ­thatja.)Úsumr   r   r   r   rÔ   r   rl   r0   r   r!   )ri   ÚfajtakÚbitrm   s       r    Úgyengesegekrã   ,  sá  € ä�$—,‘, §¡¨t¯y©y¸$¿.¹.ÐIÓJ€FÜ
�dÓ
€CØ€EØ‡~�~˜ÓØ�‰˜xÐ5PÐQU×Q_ÑQ_ÐP`ð  ahð  4iñ  jõ  	kØ	�‰˜"Ó	Ø�‰˜yÐ6FÀtÇ~Á~ÐFVð  WEð  5Fñ  Gô  	HØ�ƒz�d—n‘n rÓ)Ø�‰¨6°Q«;™x¸Ið RXð  \]ó  R]ñ  "NØ#(¨¨ð  1Pð  "QñSô 	Tð ˆRƒxØ�‰˜xÐ5}ô  Bð  CFó  Gð  ~Hð  Htð  4uñ  võ  	wØ	ˆr‹Ø�‰˜yÐ6yÔz}ð  Bó  {Cð  zDð  Drð  5sñ  tô  	uØ×Ñ˜1ÓØ�‰Ø×*×*ð  )ð  5Iò  Jà(ð  5Qñ  Rô	Sð €Lr#   rÊ   c                 óª  • S n[        U5      n[        S[        R                  " U[	        5       -
  R                  5       S-  5      5      n[        R                  " U 5      R                  R                  S5      S-   nSU" UR                  5       SU" UR                  5       SU" [        U5      5       S	U S
U" U5       SU" [        U5      5       S3UR                  S:¼  a  SUR                   S3OUR                  S:X  a  SOS-   SU" U5       S3-   n[        R                   " UR"                  /SUS[        R$                  UR&                  U S9$ )Nc                 óN   • [         R                  " U c  SSS9$ [        U 5      SS9$ )Nrz   T)Úquote)ÚhtmlÚescapeÚstr)Úxs    r    Ú<lambda>Ú$_emlekezteto_level.<locals>.<lambda>H  s   € ”$—+’+ A¡I˜bÀÒF´3°q³6ÀÒFr#   re   rÁ   Ú/z/profil#jelszouu   <div style="font-family:Arial,sans-serif;max-width:560px;margin:auto"><h2>Hamarosan lejÃ¡r a jelszavad</h2><p>Kedves z!</p><p>A(z) <b>u8   </b> jelszÃ³-hÃ¡zirendje szerint az EmeLOG jelszavad <b>u   </b> napjÃ¡n lejÃ¡r (<b>u®    nap mÃºlva</b>). A lejÃ¡rat utÃ¡n belÃ©pÃ©skor csak a jelszÃ³csere oldalig jutsz, amÃ­g Ãºj jelszÃ³t nem vÃ¡lasztasz.</p><p style="text-align:center;margin:28px 0"><a href="u=  " style="background-color:#0d6efd;color:#fff;padding:12px 24px;text-decoration:none;border-radius:5px;font-weight:bold">JelszÃ³ mÃ³dosÃ­tÃ¡sa</a></p><p>A gombra kattintva be kell lÃ©pned, majd a Profilom oldal <i>JelszÃ³ mÃ³dosÃ­tÃ¡sa</i> rÃ©szÃ©n vÃ¡laszthatsz Ãºj jelszÃ³t. Az Ãºj jelszÃ³val szemben kÃ¶vetelmÃ©ny: rŸ   r�   u    Az utolsÃ³ u#    jelszavad nem hasznÃ¡lhatÃ³ Ãºjra.u,    Az Ãºj jelszÃ³ nem egyezhet a jelenlegivel.rz   um   </p><p>Ha a gomb nem mÅ±kÃ¶dik, mÃ¡sold a bÃ¶ngÃ©szÅ‘dbe ezt a cÃ­met:<br><span style="word-break:break-all">uŠ   </span></p><p style="color:#666;font-size:12px">Ez egy automatikus Ã©rtesÃ­tÃ©s. A jelszavadat a levÃ©lben soha nem kÃ©rjÃ¼k el.</p></div>u$   Hamarosan lejÃ¡r az EmeLOG jelszavadÚrendszer)Ú	kategoriaÚ	prioritasra   r`   )r[   rG   rÆ   rÇ   r;   rÈ   Úemail_beallitasokÚbetoltÚalkalmazas_url_vagy_alapÚrstripÚusernameÚnevr@   rr   r   Ú	email_sorÚsorba_allitÚemailÚPRIORITAS_NORMALra   )	r`   rg   rY   rÊ   Úeri   rZ   ÚlinkÚtorzss	            r    Ú_emlekezteto_levelrþ   G  s~  € ÙF€AÜ�S‹>€DÜ
ˆa”—’˜G¤i£kÑ1×@Ñ@ÓBÀUÑJÓKÓ
L€CÜ×#Ò# BÓ'×@Ñ@×GÑGÈÓLÐO_Ñ_€Dð	á�t—}‘}Ó%Ð&ð 'Ù˜Ÿ™“j�\Ð!YÑZ[Ô\hÐipÓ\qÓZrÐYsð tØˆeð á�t“W�Ið 4á45Ô6HÈÓ6NÓ4OÐ3PÐPQð	Sð TX×ScÑScÐghÓShˆ\˜$×*Ñ*Ð+Ð+NÑOØ>B×>NÑ>NÐRSÓ>SÑ:ÐY[ñ
	^ðavÙvwÐx|Óv}Ðu~ð LðaLñ	Lð 
ô × Ò  $§*¡* Ð/UÐW\ÐhrÜ+4×+EÑ+EÐRV×RaÑRaÐfhñjð jr#   c            
      ó’  • Sn  [        5       n [        5       n[        R                  nUR                  U5      R                  UR                  R                  S5      UR                  U:„  UR                  U[        [        S9-   :*  UR                  R                  S5      UR                   R                  S5      5      R#                  5       nU H¶  nUR$                  SL d  ['        U5      (       a  M$  UR(                  (       a*  UR+                  [        R,                  UR(                  5      OSnUb)  UR                   SL d  [/        U5      R0                  (       d  M�  [3        XXvR                  5      S:¼  d  M«  X6l        U S-  n M¸     UR5                  5         UR9                  5         U $ ! [         a.  n[        S[        U5      R                   SU 35         SnAgSnAff = f! [         a@  nUR7                  5         Sn [        S	[        U5      R                   SU 35         SnAN’SnAff = f! UR9                  5         f = f)
u>  Az Ã¼temezett (Ã³rÃ¡nkÃ©nti) feladat: aki a kÃ¶vetkezÅ‘ EMLEKEZTETO_NAP napban lejÃ¡rÃ³ jelszÃ³val rendelkezik, Ã©s mÃ©g nem kapott emlÃ©keztetÅ‘t erre a lejÃ¡ratra,
levelet kap. VisszatÃ©r: a sorba Ã¡llÃ­tott levelek szÃ¡ma. Hiba nem dobÃ³dik tovÃ¡bb (az Ã¼temezÅ‘t nem ejtheti el); a kÃ¶vetkezÅ‘ Ã³ra Ãºjra prÃ³bÃ¡l.r   uG   â�Œ A jelszÃ³-lejÃ¡rati emlÃ©keztetÅ‘k: az adatbÃ¡zis nem Ã©rhetÅ‘ el: z: Nr£   TFre   uE   â�Œ A jelszÃ³-lejÃ¡rati emlÃ©keztetÅ‘k sorba Ã¡llÃ­tÃ¡sa sikertelen: )r	   r™   ÚprintÚtyper,   r;   r^   r¶   r�   r’   r¯   Úisnotr   rÉ   r°   Úis_Úaktivr˜   r    rh   ra   r]   r_   r[   r!   rþ   ÚcommitÚrollbackÚclose)Úkuldver`   Úexr±   ÚUÚjeloltekrº   rY   s           r    Úemlekeztetokr  _  sñ  € ð €FðÜ‹^ˆðÜ‹{ˆÜ�K‰KˆØ—8‘8˜A“;×%Ñ%Ø×Ñ×%Ñ% dÓ+¨Q×-@Ñ-@À4Ñ-GÈ×I\ÑI\Ð`dÔgpô  wFñ  hGñ  aGñ  JGØ×#Ñ#×'Ñ'¨Ó-¨q¯w©w¯{©{¸4Ó/@óBçBEÁ#Ã%ð 	ó ˆAØ�{‰{˜eÒ#¤~°a×'8Ñ'8ÙØ:;¿,¿,�"—&‘&œŸ™¨¯©Ô6ÈDˆCØ‰{˜cŸi™i¨5Ò0¼	À#»×8T×8TÙÜ! "¨×.AÑ.AÓBÀaÕGØ*.Ô'Ø˜!‘’ñ ð 	�	‰	Œð 	�‰Œ
Ø€Møô3 ó ÜÐWÔX\Ð]_ÓX`×XiÑXiÐWjÐjlÐmoÐlpÐqÔrÜûðûô& ó qØ
�‰ŒØˆÜÐUÔVZÐ[]ÓV^×VgÑVgÐUhÐhjÐkmÐjnÐo×pÑpûðqûð
 	�‰�
úsG   „
F, �E(G' Å;G' Æ,
G$Æ6$GÇG$Ç'
H1Ç16H,È'H4 È,H1È1H4 È4Ir   )6Ú__doc__rç   rÆ   Údataclassesr   r   r   r   Útypingr   r   rñ   r÷   r^   Údatabaser	   Útemplates_envr
   r%   rW   rU   rV   rÉ   r¸   rX   ÚJELSZO_LEJARAT_KIVETELr   r;   ré   r@   r0   rK   r[   rb   r2   rh   rn   rr   rw   rŠ   r�   r¡   r¥   r´   r¼   r¿   ÚdictrÌ   rÎ   ÚfloatrÔ   rã   rþ   r  r+   r#   r    Ú<module>r     s  ðñó. Û Ý !ß 2Ñ 2ß !ã Û Û Ý !Ý "à€Ø€ØÐ ØÐ Ø€Ø€Ø€Ø;Ð ð ÷Uð Uó ðUð,;�8ô ;ð[˜8ð [¨ô [ð$˜ð $ Cð $¨sð $°sô $ð�iô ð Q yô Qð9˜Dô 9ð˜	ð  d¨3¡iô ð*˜Yð *¨3ô *ð/�Cð /˜Dô /ð˜Yð °ð ¸¸S¹	ô ð"˜ið °ð ¸ô ð" ð ¨°#©ô ð$7˜Ið 7°8ð 7ÀÈÑ@Rô 7ñ&¨°©ð &Àõ &ð"˜ô ð2> tô >ð˜ô ð*	 3ô 	ð/�ið / Eô /ð"�ið  D¨¡Jô ð6j¨xð j¸Cô jð0�cõ r#   