§
    Ùu¦jÙ'  ã                  óþ   — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ d
ZdZ G d„ de¦  «        Ze
 G d„ d¦  «        ¦   «         Z G d„ d¦  «        ZdS )uÇ  
Poe2VisualTool Commercial License Engine
XÃ¡c thá»±c báº£n quyá»�n máº­t mÃ£ há»�c HMAC-SHA256, khÃ³a mÃ¡y theo HWID vÃ  quáº£n lÃ½ thá»�i háº¡n sá»­ dá»¥ng.
Há»— trá»£:
  - Giáº¥y phÃ©p VÄ©nh viá»…n (LIFETIME)
  - ThuÃª bao theo thá»�i háº¡n (SUBSCRIPTION 30d, 90d, 365d)
  - Cháº¿ Ä‘á»™ dÃ¹ng thá»­ (TRIAL 24h / 3 ngÃ y)
  - Ä�á»‹nh dáº¡ng Product Key chuáº©n cÃ´ng nghiá»‡p: PVTK-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
Báº£n quyá»�n 2026 Poe2VisualTool.
é    )ÚannotationsN)Ú	dataclass)ÚdatetimeÚtimezone)ÚEnum)ÚPath)ÚOptionalÚTuple)Úget_machine_hwidz7Poe2VisualTool-2026-Commercial-Master-Secret-Ed4f81c9a0é   c                  ó   — e Zd ZdZdZdZdZdS )ÚLicenseTierÚINVALIDÚTRIALÚSUBSCRIPTIONÚLIFETIMEN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   © ó    ú<C:\Projects\Poe2VisualTool\src\commercial\license_manager.pyr   r   #   s"   € € € € € Ø€GØ€EØ!€LØ€H€H€Hr   r   c                  ód   — e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   dZded<   dS )ÚLicenseInfoÚboolÚis_validr   ÚtierÚstrÚhwidzOptional[datetime]Ú	issued_atÚ
expires_atÚintÚ	days_leftÚmessageÚ Úraw_keyN)r   r   r   Ú__annotations__r&   r   r   r   r   r   *   sk   € € € € € € à€N€N�NØÐÐÑØ€I€I�IØ!Ð!Ð!Ñ!Ø"Ð"Ð"Ñ"Ø€N€N�NØ€L€L�LØ€GÐÐÐÑÐÐr   r   c                  ód   — e Zd ZdZ	 	 	 ddd„Ze	 	 ddd„¦   «         Zdd„Zd d„Zd!d„Z	e
fd"d„ZdS )#ÚLicenseManageruS   
    TrÃ¬nh quáº£n lÃ½ giáº¥y phÃ©p báº£n quyá»�n pháº§n má»�m Poe2VisualTool.
    NÚlicense_file_pathúOptional[Path | str]Úcustom_hwidúOptional[str]Ú
secret_keyc                ó„  — |pt           | _        |pt          ¦   «         | _        |r(t	          |¦  «                             ¦   «         | _        d S t          j         	                    d¦  «        }|rt	          |¦  «        dz  }n4t	          t          ¦  «                             ¦   «         j        d         dz  }|dz  | _        d S )NÚAPPDATAÚPoe2VisualToolé   Úconfigzlicense.dat)ÚMASTER_LICENSE_SECRETr.   r   r   r   ÚresolveÚlicense_fileÚosÚenvironÚgetÚ__file__Úparents)Úselfr*   r,   r.   ÚappdataÚdir_paths         r   Ú__init__zLicenseManager.__init__;   s·   € ð %Ð=Õ(=ˆŒØÐ5Õ#3Ñ#5Ô#5ˆŒ	àð 		9Ý $Ð%6Ñ 7Ô 7× ?Ò ?Ñ AÔ AˆDÔÐÐõ ”j—n’n YÑ/Ô/ˆGØð JÝ ™=œ=Ð+;Ñ;��å¥™>œ>×1Ò1Ñ3Ô3Ô;¸AÔ>ÀÑI�Ø (¨=Ñ 8ˆDÔÐÐr   r   Útarget_hwidr   r   r   Úduration_daysr"   Úreturnc                ó`  ‡— |pt           }t          t          j        ¦   «         ¦  «        }|t          j        k    rd}d}n;|t          j        k    r||dk    r|nddz  z   }d}n|t          d|¦  «        dz  z   }d}|                     dd¦  «                             d	d¦  «                             ¦   «         }	t          |	¦  «        d
k     r|	 
                    d
d¦  «        }	|	dd
…         }	|d›}
|› |
› |	› �}t          j        |                     d¦  «        |                     d¦  «        t          j        ¦  «                             ¦   «                              ¦   «         dd…         }|› |› �Šˆfd„t#          dt          ‰¦  «        d¦  «        D ¦   «         }dd	                     |¦  «        › �S )u_   
        Sinh Product Key há»£p lá»‡ cho má»™t mÃ¡y Ä‘Ã­ch (DÃ nh cho Admin / Keygen).
        r   ÚLé   é€Q ÚTÚSúPVT-r%   ú-é   Ú0NÚ08Xúutf-8é
   c                ó*   •— g | ]}‰||d z   …         ‘ŒS )é   r   )Ú.0Úir&   s     €r   ú
<listcomp>z7LicenseManager.generate_product_key.<locals>.<listcomp>|   s&   ø€ ÐHÐHÐH¨�'˜!˜a !™e˜)Ô$ÐHÐHÐHr   rQ   úPVTK-)r4   r"   Útimer   r   r   ÚmaxÚreplaceÚupperÚlenÚljustÚhmacÚnewÚencodeÚhashlibÚsha256Ú	hexdigestÚrangeÚjoin)Úclsr@   r   rA   r.   ÚsecretÚnowÚexpÚ	tier_charÚ
clean_hwidÚexp_hexÚbodyÚsigÚchunksr&   s                 @r   Úgenerate_product_keyz#LicenseManager.generate_product_keyS   s½  ø€ ð Ð4Õ4ˆÝ•$”)‘+”+ÑÔˆà•;Ô'Ò'Ð'ØˆCØˆIˆIØ•[Ô&Ò&Ð&Ø¨-¸!Ò*;Ð*;˜˜ÀÀeÑKÑKˆCØˆIˆIà�˜A˜}Ñ-Ô-°Ñ5Ñ5ˆCØˆIð !×(Ò(¨°Ñ4Ô4×<Ò<¸SÀ"ÑEÔE×KÒKÑMÔMˆ
Ýˆz‰?Œ?˜RÒÐØ#×)Ò)¨"¨cÑ2Ô2ˆJØ   ”_ˆ
ð �,�,ˆØÐ2˜WÐ2 jÐ2Ð2ˆõ Œh�v—}’} WÑ-Ô-¨t¯{ª{¸7Ñ/CÔ/CÅWÄ^ÑTÔT×^Ò^Ñ`Ô`×fÒfÑhÔhÐilÐjlÐilÔmˆð �.˜3�.�.ˆð IÐHÐHÐH­e°Aµs¸7±|´|ÀQÑ.GÔ.GÐHÑHÔHˆØ)�s—x’x Ñ'Ô'Ð)Ð)Ð)r   Úkey_strú"Tuple[bool, LicenseTier, int, str]c                óØ  — |sdt           j        ddfS |                     ¦   «                              ¦   «                              dd¦  «                             dd¦  «        }t          |¦  «        dk    rdt           j        ddfS |d	d
…         }|d
d	…         }|d         }|dd…         }|dd
…         }t          j        | j         	                    d¦  «        | 	                    d¦  «        t          j        ¦  «                             ¦   «                              ¦   «         d	d…         }t          j        ||¦  «        sdt           j        ddfS | j                             dd¦  «                             dd¦  «                             ¦   «         d	d…         }	||	k    rdt           j        ddfS 	 t          |d¦  «        }
n # t           $ r dt           j        ddfcY S w xY w|dk    rt           j        }n6|dk    rt           j        }n#|dk    rt           j        }ndt           j        ddfS t          t)          j        ¦   «         ¦  «        }|t           j        k    r|
|k    rd||
dfS d||
dfS )u»   
        XÃ¡c thá»±c tÃ­nh há»£p lá»‡ cá»§a Product Key Ä‘á»‘i vá»›i mÃ¡y tÃ­nh hiá»‡n táº¡i.
        Tráº£ vá»�: (is_valid, tier, expires_at_timestamp, error_or_success_message)
        Fr   u   ChÆ°a nháº­p mÃ£ báº£n quyá»�n.rU   r%   rJ   é#   u:   Ä�á»‹nh dáº¡ng mÃ£ báº£n quyá»�n khÃ´ng Ä‘Ãºng Ä‘á»™ dÃ i.Né   rE   é	   rN   rO   u>   MÃ£ báº£n quyá»�n khÃ´ng há»£p lá»‡ (Chá»¯ kÃ½ khÃ´ng khá»›p).rI   rK   uG   MÃ£ báº£n quyá»�n khÃ´ng dÃ nh cho mÃ¡y tÃ­nh nÃ y (HWID khÃ¡c biá»‡t).u8   MÃ£ báº£n quyá»�n chá»©a thá»�i háº¡n khÃ´ng há»£p lá»‡.rD   rG   rH   u3   Loáº¡i báº£n quyá»�n khÃ´ng nháº­n diá»‡n Ä‘Æ°á»£c.u+   Báº£n quyá»�n Ä‘Ã£ háº¿t háº¡n sá»­ dá»¥ng.Tu<   Báº£n quyá»�n há»£p lá»‡ vÃ  Ä‘Ã£ kÃ­ch hoáº¡t thÃ nh cÃ´ng!)r   r   ÚstriprY   rX   rZ   r\   r]   r.   r^   r_   r`   ra   Úcompare_digestr   r"   Ú
ValueErrorr   r   r   rV   )r<   ro   Úcleanedrk   rl   rh   rj   Úkey_hwidÚexpected_sigÚmy_clean_hwidÚexp_timestampr   rf   s                r   Úverify_product_keyz!LicenseManager.verify_product_key   s‡  € ð
 ð 	TØ�+Ô-¨qÐ2SÐSÐSà—-’-‘/”/×'Ò'Ñ)Ô)×1Ò1°'¸2Ñ>Ô>×FÒFÀsÈBÑOÔOˆÝˆw‰<Œ<˜2ÒÐØ�+Ô-¨qÐ2nÐnÐnà�s˜�sŒ|ˆØ�b�c�cŒlˆà˜”Gˆ	Ø�q˜�s”)ˆØ˜˜"˜”:ˆõ ”x ¤× 6Ò 6°wÑ ?Ô ?ÀÇÂÈWÑAUÔAUÕW^ÔWeÑfÔf×pÒpÑrÔr×xÒxÑzÔzÐ{~Ð|~Ð{~ÔˆÝÔ" 3¨Ñ5Ô5ð 	sØ�+Ô-¨qÐ2rÐrÐrð œ	×)Ò)¨&°"Ñ5Ô5×=Ò=¸cÀ2ÑFÔF×LÒLÑNÔNÈsÐPRÈsÔSˆØ�}Ò$Ð$Ø�+Ô-¨qÐ2|Ð|Ð|ð	mÝ ¨Ñ,Ô,ˆMˆMøÝð 	mð 	mð 	mØ�+Ô-¨qÐ2lÐlÐlÐlÐlð	møøøð ˜ÒÐÝÔ'ˆDˆDØ˜#ÒÐÝÔ$ˆDˆDØ˜#ÒÐÝÔ+ˆDˆDà�+Ô-¨qÐ2gÐgÐgå•$”)‘+”+ÑÔˆØ•;Ô'Ò'Ð'¨M¸SÒ,@Ð,@Ø˜$ Ð/\Ð\Ð\à�T˜=Ð*hÐhÐhs   Æ0G ÇGÇGr   c                ó$  — |                       |¦  «        \  }}}}|sdS 	 | j        j                             dd¬¦  «         |                     ¦   «                              ¦   «         | j        |j        |t          t          j	        ¦   «         ¦  «        dœ}t          j        |¦  «                             d¦  «        }t          j        |¦  «                             d¦  «        }| j                             |d¬¦  «         dS # t"          $ r Y dS w xY w)u?   LÆ°u key báº£n quyá»�n Ä‘Ã£ xÃ¡c thá»±c vÃ o tá»‡p license.dat.FT)r;   Úexist_ok)Úkeyr   r   r!   Úsaved_atrN   Úascii©Úencoding)r}   r6   ÚparentÚmkdirru   rY   r   Úvaluer"   rV   ÚjsonÚdumpsr^   Úbase64Ú	b64encodeÚdecodeÚ
write_textÚ	Exception)	r<   ro   Úvalidr   rg   ÚmsgÚpayloadÚ	raw_bytesÚ
obfuscateds	            r   Úsave_licensezLicenseManager.save_licenseµ   s  € à $× 7Ò 7¸Ñ @Ô @Ñˆˆt�S˜#Øð 	Ø�5ð	ØÔÔ$×*Ò*°4À$Ð*ÑGÔGÐGà—}’}‘”×,Ò,Ñ.Ô.Øœ	Øœ
Ø!Ý¥¤	¡¤Ñ,Ô,ðð ˆGõ œ
 7Ñ+Ô+×2Ò2°7Ñ;Ô;ˆIÝÔ)¨)Ñ4Ô4×;Ò;¸GÑDÔDˆJØÔ×(Ò(¨¸gÐ(ÑFÔFÐFØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs    CD Ä
DÄDr   c                ól  — | j                              ¦   «         s%t          dt          j        | j        dddd¬¦  «        S 	 | j                              d¬¦  «                             ¦   «         }t          j	        | 
                    d¦  «        ¦  «                             d¦  «        }t          j        |¦  «        }|                     d	d
¦  «        }|                      |¦  «        \  }}}}|sBt          d|| j        d|dk    r t!          j        |t$          j        ¬¦  «        ndd||¬¦  «        S t)          t+          j        ¦   «         ¦  «        }	|t          j        k    rd}
d}nCt/          dt)          ||	z
  dz  ¦  «        ¦  «        }
t!          j        |t$          j        ¬¦  «        }t!          j        |                     d|	¦  «        t$          j        ¬¦  «        }t          d|| j        |||
||¬¦  «        S # t0          $ r2}t          dt          j        | j        dddd|› �¬¦  «        cY d}~S d}~ww xY w)uN   Ä�á»�c vÃ  tháº©m Ä‘á»‹nh tráº¡ng thÃ¡i báº£n quyá»�n hiá»‡n táº¡i tá»« Ä‘Ä©a.FNr   u!   ChÆ°a kÃ­ch hoáº¡t báº£n quyá»�n.)r   r   r   r    r!   r#   r$   rN   rƒ   r‚   r€   r%   )Útz)r   r   r   r    r!   r#   r$   r&   iŸ† rF   r�   TuG   Tá»‡p báº£n quyá»�n bá»‹ lá»—i hoáº·c chá»‰nh sá»­a báº¥t há»£p phÃ¡p: )r6   Úis_filer   r   r   r   Ú	read_textru   rŠ   Ú	b64decoder^   rŒ   rˆ   Úloadsr9   r}   r   Úfromtimestampr   Úutcr"   rV   r   rW   rŽ   )r<   ÚcontentÚdecodedÚdataro   r�   r   rg   r�   rf   r#   Úexp_dtÚ	issued_dtÚexcs                 r   Úload_licensezLicenseManager.load_licenseË   sf  € àÔ ×(Ò(Ñ*Ô*ð 		ÝØÝ Ô(Ø”YØØØØ;ðñ ô ð ð0	ØÔ'×1Ò1¸7Ð1ÑCÔC×IÒIÑKÔKˆGÝÔ& w§~¢~°gÑ'>Ô'>Ñ?Ô?×FÒFÀwÑOÔOˆGÝ”:˜gÑ&Ô&ˆDØ—h’h˜u bÑ)Ô)ˆGà$(×$;Ò$;¸GÑ$DÔ$DÑ!ˆE�4˜˜cØð 
Ý"Ø"ØØœØ"ØORÐUVÊwÈw�xÔ5°c½h¼lÐKÑKÔKÐKÐ\`ØØØ#ð	ñ 	ô 	ð 	õ •d”i‘k”kÑ"Ô"ˆCØ•{Ô+Ò+Ð+Ø!�	Ø��å ¥3¨¨c©	°UÑ':Ñ#;Ô#;Ñ<Ô<�	Ý!Ô/°½¼ÐEÑEÔE�å Ô.¨t¯xªx¸
ÀCÑ/HÔ/HÍXÌ\ÐZÑZÔZˆIåØØØ”YØ#Ø!Ø#ØØð	ñ 	ô 	ð 	øõ ð 		ð 		ð 		ÝØÝ Ô(Ø”YØØØØgÐbeÐgÐgðñ ô ð ð ð ð ð ð øøøøð		øøøs&   Á C.G7 Ä/CG7 Ç7
H3È'H.È(H3È.H3Úhoursc           	     ó¨   — |                       | j        t          j        t	          d|dz  ¦  «        | j        ¬¦  «        }|                      |¦  «        S )uZ   KÃ­ch hoáº¡t phiÃªn báº£n DÃ¹ng Thá»­ (Trial) tá»± Ä‘á»™ng náº¿u chÆ°a tá»«ng dÃ¹ng thá»­.rE   r   )r@   r   rA   r.   )rn   r   r   r   rW   r.   r”   )r<   r¤   Ú	trial_keys      r   Úactivate_trialzLicenseManager.activate_trial
  sS   € à×-Ò-Øœ	ÝÔ"Ý˜a ¨"¡Ñ-Ô-Ø”ð	 .ñ 
ô 
ˆ	ð × Ò  Ñ+Ô+Ð+r   )NNN)r*   r+   r,   r-   r.   r-   )r   N)
r@   r   r   r   rA   r"   r.   r-   rB   r   )ro   r   rB   rp   )ro   r   rB   r   )rB   r   )r¤   r"   rB   r   )r   r   r   Ú__doc__r?   Úclassmethodrn   r}   r”   r£   ÚDEFAULT_TRIAL_DURATION_HOURSr§   r   r   r   r)   r)   6   sÑ   € € € € € ðð ð 37Ø%)Ø$(ð	9ð 9ð 9ð 9ð 9ð0 ð
 Ø$(ð)*ð )*ð )*ð )*ñ „[ð)*ðV0ið 0ið 0ið 0iðlð ð ð ð,=ð =ð =ð =ð~ +Gð ,ð ,ð ,ð ,ð ,ð ,ð ,r   r)   )r¨   Ú
__future__r   rŠ   r_   r\   rˆ   r7   rV   Údataclassesr   r   r   Úenumr   Úpathlibr   Útypingr	   r
   Úsrc.commercial.hwidr   r4   rª   r   r   r)   r   r   r   ú<module>r±      sz  ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à 0Ð 0Ð 0Ð 0Ð 0Ð 0ð RÐ à!Ð ðð ð ð ð �$ñ ô ð ð ðð ð ð ð ñ ô ñ „ðð\,ð \,ð \,ð \,ð \,ñ \,ô \,ð \,ð \,ð \,r   