+
    Fz¿jä@  ã                   óø   € R t ^ RIHtHt ^ RIHt ^ RIHt ^ RIH	t	  ! R R]
4      tR R ltR	 R
 lt ! R R]4      t] ! R R4      4       t] ! R R4      4       tR tR tR R ltR R ltRR ltR tR tR# )zÃExplicit MikroTik provisioning boundary.

No connection is made unless a caller supplies an adapter/API object.  The
mock is useful for tests and local simulations and is deliberately in-memory.
)Ú	dataclassÚfield)ÚProtocol)ÚRouterOsApiPool)Údecrypt_secretc                   ó   € ] tR t^tRtR# )ÚMikrotikProvisioningError© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r	   ó    Ú*/var/www/html/bestweb/app/core/mikrotik.pyr   r      s   † Ûr   r   c                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚitemÚreturn)ÚdictÚstr)Úformats   "r   Ú__annotate__r      s   € ÷ ñ ”tð ¤ñ r   c                ó€   € V P                  R4      ;'       g    V P                  R4      pV'       g   \        R4      hV# )zEAccept RouterOS API id formats returned by different client versions.z.idÚidz(RouterOS tidak mengembalikan ID resource)Úgetr   )r   Úresource_ids   & r   Ú_resource_idr      s4   € à—(‘(˜5“/×3Ð3 T§X¡X¨d£^€KßÜ'Ð(RÓSÐSØÐr   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r   Úrepliesr   )Úlistr   Úbool)r   s   "r   r   r      s   € ÷ ñ ¤d¬4¥jð ´Tñ r   c                ó  € T ;'       g    .  F|  p\        VP                  RR4      4      P                  4       P                  4       pVR9   g   KC  VP                  R4      '       g"   VP                  R4      '       g   V'       d   K{   R# 	  R# )zIInterpret RouterOS /ping replies without assuming a fixed client version.ÚstatusÚ ÚhostÚtimeTF>   r$   ÚokÚreplyú
echo reply)r   r   ÚstripÚlower)r   r(   r#   s   &  r   Úinternet_probe_succeededr,      sr   € à—�˜B’ˆÜ�U—Y‘Y˜x¨Ó,Ó-×3Ñ3Ó5×;Ñ;Ó=ˆØÐ6Ö6¸E¿I¹IÀf×<MÒ<MÐQV×QZÑQZÐ[a×QbÒQb×jpÑjpÚñ ñ r   c                   ó”   a € ] tR t^"t o RV 3R lR lltV 3R lR ltV 3R lR ltRV 3R lR	 lltV 3R
 lR ltV 3R lR lt	Rt
V tR# )ÚMikrotikAdapterNc                ó>   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RR/# ©r   ÚusernameÚpasswordÚprofileNr   ©r   )r   Ú__classdict__s   "€r   r   ÚMikrotikAdapter.__annotate__#   s"   ø€ ×hÑh©CÐh¹3ÐhÉÈtÍÐhÐ_cÑhr   c                ó   € R # ©Nr	   ©Úselfr1   r2   r3   s   &&&&r   Úupsert_pppoe_secretÚ#MikrotikAdapter.upsert_pppoe_secret#   s   € Ñehr   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# ©r   r1   Úenabledr   N©r   r!   )r   r5   s   "€r   r   r6   $   s   ø€ ×QÑQ±ÐQ¹tÐQÈÑQr   c                ó   € R # r8   r	   ©r:   r1   r?   s   &&&r   Úset_pppoe_secret_enabledÚ(MikrotikAdapter.set_pppoe_secret_enabled$   s   € Écr   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r   r1   r   Nr4   )r   r5   s   "€r   r   r6   %   s   ø€ ×=Ñ=©CÐ=°DÑ=r   c                ó   € R # r8   r	   )r:   r1   s   &&r   Údelete_pppoe_secretÚ#MikrotikAdapter.delete_pppoe_secret%   s   € ¹#r   c                óz   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RS[ R,          RS[ R,          RS[ R,          RR/# ©	r   r1   r2   r3   NÚuptimeÚidleÚcommentr   r4   )r   r5   s   "€r   r   r6   &   sy   ø€ ÷  vñ  v©ð  v¹ð  vÁcÈDÅjð  vÑadÐgkÕakð  vÑz}ð  AEõ  {Eð  vñ  WZð  ]aõ  Wað  vð  mqñ  vr   c                ó   € R # r8   r	   ©r:   r1   r2   r3   rL   rM   rN   s   &&&&&&&r   Úadd_hotspot_userÚ MikrotikAdapter.add_hotspot_user&   s	   € ñ  svr   c                ó<   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[RR/# ©r   ÚnameÚ
rate_limitÚsession_timeoutÚidle_timeoutÚsharedr   N©r   Úint)r   r5   s   "€r   r   r6   '   sC   ø€ ÷  Dñ  D©3ð  D¹Cð  DÑRUð  DÑehð  DÑruð  DÐz~ñ  Dr   c                ó   € R # r8   r	   )r:   rU   rV   rW   rX   rY   s   &&&&&&r   Úupsert_hotspot_profileÚ&MikrotikAdapter.upsert_hotspot_profile'   s	   € ñ  ADr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   rU   r   r@   )r   r5   s   "€r   r   r6   (   s   ø€ ×<Ñ<©3Ð<±4Ñ<r   c                ó   € R # r8   r	   )r:   rU   s   &&r   Údelete_hotspot_profileÚ&MikrotikAdapter.delete_hotspot_profile(   s   € ¹r   r	   r8   ©NNNN)r
   r   r   r   r;   rC   rH   rQ   r]   rb   r   Ú__classdictcell__©r5   s   @r   r.   r.   "   s5   ø‡ € ßhÒhßQÐQß=Ð=÷ vò  v÷ Dð  Dß<Ö<r   r.   c                   ó  a € ] tR t^+t o RtRtRtR tRV 3R lR lltV 3R lR	 lt	V 3R
 lR lt
RV 3R lR lltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R ltRtV tR# ) ÚRealMikrotikAdapterz?Real RouterOS API adapter with credentials injected from vault.é"  Fc           	     óˆ   € \        V P                  V P                  V P                  V P                  V P
                  R R7      # )T©r%   r1   r2   ÚportÚuse_sslÚplaintext_login)r   r%   r1   r2   Úapi_portrm   )r:   s   &r   Ú_get_apiÚRealMikrotikAdapter._get_api4   s5   € ÜØ—‘Ø—]‘]Ø—]‘]Ø—‘Ø—L‘LØ ô
ð 	
r   Nc                ó>   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RR/# r0   r4   )r   r5   s   "€r   r   Ú RealMikrotikAdapter.__annotate__>   s4   ø€ ÷ bñ b©Cð b¹3ð bÉÈtÍð bÐ_cñ br   c                óÄ   €  V P                  4       pVP                  4       p\        WQW#4       VP                  4        R#   \         d   p\        R T 24      ThRp?ii ; i)z#RouterOS API gagal membuat secret: N)rp   Úget_apiÚpush_pppoe_userÚ
disconnectÚ	Exceptionr   )r:   r1   r2   r3   ÚpoolÚapiÚexcs   &&&&   r   r;   Ú'RealMikrotikAdapter.upsert_pppoe_secret>   s\   € ð	bØ—=‘=“?ˆDØ—,‘,“.ˆCÜ˜C¨8Ô=Ø�O‰OÖøÜô 	bÜ+Ð.QÐRUÐQVÐ,WÓXÐ^aÐaûð	bús   ‚<A  Á AÁAÁAc                óJ   <€ V ^8„  d   QhRS[ R,          RS[S[ S[3,          /# )r   Ú	requestedNr   ©r   Útupler!   )r   r5   s   "€r   r   rs   G   s,   ø€ ÷ iñ i©¨t­ð i¹¹cÁ4¸iÕ8Hñ ir   c           	     ó2  €  V P                  4       p VP                  4       pVP                  R4      P                  4        Uu0 uF  p\	        VP                  RR4      4      kK   	  ppVP                  4        T;'       g    RP                  4       pV'       d   W9   d   VR3# RV9   d   R\        T;'       d    VR8g  4      3# \        R4      hu upi   TP                  4        i ; i  \         d    h \         d   p\        RT 24      ThRp?ii ; i)	zèResolve an application profile against RouterOS without mutating it.

Returns (effective_profile, used_default_fallback). The fallback is
explicit so callers can audit a mismatch instead of sending an invalid
RouterOS profile name.
z/ppp/profilerU   r$   FÚdefaultz0Profile PPPoE default tidak tersedia di MikroTikz*RouterOS API gagal membaca profile PPPoE: N)
rp   ru   Úget_resourcer   r   rw   r*   r!   r   rx   )r:   r~   ry   rz   ÚrowÚ	availabler{   s   &&     r   Úresolve_profileÚ#RealMikrotikAdapter.resolve_profileG   s  € ð	iØ—=‘=“?ˆDð"Ø—l‘l“n�ØAD×AQÑAQÐR`ÓAa×AeÑAeÔAgÓhÑAg¸#œS §¡¨°Ó!4Ö5ÑAg�	Ðhà—‘Ô!Ø"Ÿ˜ b×/Ñ/Ó1ˆIß˜YÔ3Ø  %Ð'Ð'Ø˜IÔ%Ø ¤$ y×'KÐ'K°YÀ)Ñ5KÓ"LÐLÐLÜ+Ð,^Ó_Ð_ùò iøà—‘Õ!ûô )ô 	ØÜô 	iÜ+Ð.XÐY\ÐX]Ð,^Ó_ÐehÐhûð	iúsd   ‚C, “1C Á$CÁ(C Á*C, ÂC, Â	C, Â&C, Â<
C, ÃC, ÃC ÃC)Ã)C, Ã,DÄDÄDÄDc                ó*   <€ V ^8„  d   QhRS[ RS[RR/# r>   r@   )r   r5   s   "€r   r   rs   `   s'   ø€ ÷ 
hñ 
h±ð 
h¹tð 
hÈñ 
hr   c                óê   €  V P                  4       pVP                  4       pV'       d   \        WA4       M\        WA4       VP	                  4        R#   \
         d   p\        R T 24      ThRp?ii ; i)z)RouterOS API gagal update status secret: N)rp   ru   Úunsuspend_pppoe_userÚsuspend_pppoe_userrw   rx   r   )r:   r1   r?   ry   rz   r{   s   &&&   r   rC   Ú,RealMikrotikAdapter.set_pppoe_secret_enabled`   se   € ð		hØ—=‘=“?ˆDØ—,‘,“.ˆCßÜ$ SÕ3ä" 3Ô1Ø�O‰OÖøÜô 	hÜ+Ð.WÐX[ÐW\Ð,]Ó^ÐdgÐgûð	hús   ‚'A ª'A ÁA2ÁA-Á-A2c                óz   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RS[ R,          RS[ R,          RS[ R,          RR/# rK   r4   )r   r5   s   "€r   r   rs   l   sy   ø€ ÷ hñ h©ð h¹ð hÁcÈDÅjð hÑadÐgkÕakð hÑz}ð  AEõ  {Eð hñ  WZð  ]aõ  Wað hð  mqñ hr   c           	     óÈ   €  V P                  4       pVP                  4       p\        W�W#WFR 7       VP                  4        R#   \         d   p	\        RT	 24      T	hRp	?	ii ; i))Úlimit_uptimerN   z)RouterOS API gagal membuat Hotspot User: N)rp   ru   Úpush_hotspot_userrw   rx   r   )
r:   r1   r2   r3   rL   rM   rN   ry   rz   r{   s
   &&&&&&&   r   rQ   Ú$RealMikrotikAdapter.add_hotspot_userl   s^   € ð	hØ—=‘=“?ˆDØ—,‘,“.ˆCÜ˜c¨XÈVÕeØ�O‰OÖøÜô 	hÜ+Ð.WÐX[ÐW\Ð,]Ó^ÐdgÐgûð	hús   ‚>A ÁA!ÁAÁA!c                ó<   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[RR/# rT   rZ   )r   r5   s   "€r   r   rs   u   sC   ø€ ÷ (kñ (k©3ð (k¹Cð (kÑRUð (kÑehð (kÑruð (kÐz~ñ (kr   c           
     óÊ  €  V P                  4       pVP                  4       pVP                  R 4      pVP                  VR7      p	Rp
RTR\	        V4      RT;'       g    RRT;'       g    RRV
/pV	'       d&   VP
                  ! RR	\        V	^ ,          4      /VB  MVP                  ! RR
V/VB  VP                  4        R#   \         d   p\        RT 24      ThRp?ii ; i)ú/ip/hotspot/user/profile©rU   a  # BW-VOUCHER-EXPIRY-BEGIN
:local uid [/ip hotspot user find where name=$user];
:if ([:len $uid] = 0) do={ :return; }
:local c [/ip hotspot user get $uid comment];
:if ([:pick $c 0 6] != "bw:v1;") do={ :return; }
:local key "validity=";
:local pos [:find $c $key];
:if ([:typeof $pos] = "nil") do={ :return; }
:local tail [:pick $c ($pos + [:len $key]) [:len $c]];
:local stop [:find $tail ";"];
:if ([:typeof $stop] = "nil") do={ :set stop [:len $tail]; }
:local sec [:tonum [:pick $tail 0 $stop]];
:if ($sec < 60) do={ :return; }
:local sn ("bw-exp-" . $user);
:if ([:len [/system scheduler find where name=$sn]] = 0) do={
  :local ev (":local u \"" . $user . "\"; /ip hotspot user remove [find where name=$u]; /ip hotspot active remove [find where user=$u]; /ip hotspot cookie remove [find where user=$u]; /system scheduler remove [find where name=\"" . $sn . "\"];");
  /system scheduler add name=$sn interval=($sec . "s") start-time=startup on-event=$ev policy=read,write,policy,test comment=("bestweb:first-login:" . $user);
}
# BW-VOUCHER-EXPIRY-ENDú
rate-limitúshared-usersúsession-timeoutú00:00:00zidle-timeoutzon-loginr   rU   z,RouterOS API gagal membuat Hotspot Profile: Nr	   )rp   ru   rƒ   r   r   Úsetr   Úaddrw   rx   r   )r:   rU   rV   rW   rX   rY   ry   rz   ÚresourceÚexistingÚon_login_scriptÚvaluesr{   s   &&&&&&       r   r]   Ú*RealMikrotikAdapter.upsert_hotspot_profileu   sé   € ð'	kØ—=‘=“?ˆDØ—,‘,“.ˆCØ×'Ñ'Ð(BÓCˆHØ—|‘|¨�|Ó.ˆHð*ð ð, ˜jØ¤ F£Ø! ?×#@Ð#@°jØ × :Ð :°
Ø˜OðˆF÷ Ø—’ÑD¤¨X°a­[Ó 9ÐD¸VÓDà—’Ñ1 $Ð1¨&Ò1Ø�O‰OÖøÜô 	kÜ+Ð.ZÐ[^ÐZ_Ð,`ÓaÐgjÐjûð	kús+   ‚AC ÁC Á*C Á8A	C ÃC"ÃCÃC"c                ó$   <€ V ^8„  d   QhRS[ RR/# rF   r4   )r   r5   s   "€r   r   rs   Ÿ   s   ø€ ÷ dñ d©Cð d°Dñ dr   c                óF  €  V P                  4       pVP                  4       pVP                  R4      pVP                  VR7      pV'       d#   VP	                  \        V^ ,          4      R7       VP                  4        R#   \         d   p\        RT 24      ThRp?ii ; i)zRollback helper for MikroTik.ú/ppp/secretr•   ©r   z%RouterOS API gagal menghapus secret: N)	rp   ru   rƒ   r   Úremover   rw   rx   r   )r:   r1   ry   rz   rœ   r�   r{   s   &&     r   rH   Ú'RealMikrotikAdapter.delete_pppoe_secretŸ   sŒ   € ð		dØ—=‘=“?ˆDØ—,‘,“.ˆCØ×'Ñ'¨Ó6ˆHØ—|‘|¨�|Ó2ˆHßØ—‘¤<°¸µÓ#<�Ô=Ø�O‰OÖøÜô 	dÜ+Ð.SÐTWÐSXÐ,YÓZÐ`cÐcûð	dús   ‚A
B Á2B ÂB ÂBÂB c                ó&   <€ V ^8„  d   QhRS[ RS[/# r`   r@   )r   r5   s   "€r   r   rs   ¬   s   ø€ ÷ mñ m©3ð m±4ñ mr   c                ó\  €  V P                  4       pVP                  4       pVP                  R4      pVP                  VR7      pV'       d#   VP	                  \        V^ ,          4      R7       VP                  4        R#   \         d    h \         d   p\        RT 24      ThRp?ii ; i)z,Remove a hotspot user profile from RouterOS.r”   r•   r¤   Tz.RouterOS API gagal menghapus Hotspot Profile: N)	rp   ru   rƒ   r   r¥   r   rw   r   rx   )r:   rU   ry   rz   rœ   r�   r{   s   &&     r   rb   Ú*RealMikrotikAdapter.delete_hotspot_profile¬   s›   € ð	mØ—=‘=“?ˆDØ—,‘,“.ˆCØ×'Ñ'Ð(BÓCˆHØ—|‘|¨�|Ó.ˆHßØ—‘¤<°¸µÓ#<�Ô=Ø�O‰OÔÙøÜ(ô 	ØÜô 	mÜ+Ð.\Ð]`Ð\aÐ,bÓcÐilÐlûð	mús$   ‚A
B Á2B ÂB+ÂB+ÂB&Â&B+c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r   r   )r    r   )r   r5   s   "€r   r   rs   ¼   s   ø€ ÷ hñ h¡D©¥Jñ hr   c                ó>  €  V P                  4       p VP                  4       pVP                  R4      P                  4       pVP                  R4      P                  4       pVP	                  4        V Uu0 uFM  qUP                  R4      '       g   K  \        VP                  R4      ;'       g    R4      P                  4       kKO  	  pp. pV EF  p\        VP                  R4      ;'       g    R4      P                  4       pV'       g   K@  TP                  RTR\        VP                  R4      ;'       g    R4      R\        VP                  R4      ;'       g    R4      R	\        VP                  R	4      ;'       g    R
4      R8H  R\        VP                  R4      ;'       g    R4      R\        VP                  R4      ;'       g    R4      RW†9   /4       EK  	  V#   TP	                  4        i ; iu upi   \         d   p	\        RT	 24      T	hRp	?	ii ; i)zERead live hotspot user state (uptime, limit, disabled) from RouterOS.ú/ip/hotspot/userú/ip/hotspot/activeÚuserr$   rU   rL   r�   úlimit-uptimeÚdisabledÚnoÚyesrN   r3   Úactivez)RouterOS API gagal membaca hotspot user: N)
rp   ru   rƒ   r   rw   r   r*   Úappendrx   r   )
r:   ry   rz   Úusersr³   r„   Úactive_usersÚoutrU   r{   s
   &         r   Úlist_hotspot_usersÚ&RealMikrotikAdapter.list_hotspot_users¼   sÇ  € ð	hØ—=‘=“?ˆDð"Ø—l‘l“n�Ø×(Ñ(Ð);Ó<×@Ñ@ÓB�Ø×)Ñ)Ð*>Ó?×CÑCÓE�à—‘Ô!ÙJPÓdÉ&À3×T[ÑT[Ð\b×TcÔ>œC §¡¨£× 5Ð 5°2Ó6×<Ñ<Ö>É&ˆLÐdØˆCÜ�Ü˜3Ÿ7™7 6›?×0Ð0¨bÓ1×7Ñ7Ó9�ßÙØ—
‘
Ø˜DØœc #§'¡'¨(Ó"3×"9Ð"9°rÓ:Ø"¤C¨¯©°Ó(?×(EÐ(EÀ2Ó$FØ¤ C§G¡G¨JÓ$7×$?Ð$?¸4Ó @ÀEÑ IØœs 3§7¡7¨9Ó#5×#;Ð#;¸Ó<Øœs 3§7¡7¨9Ó#5×#;Ð#;¸Ó<Ø˜dÑ2ð÷ ñ	 ð ˆJøð! —‘Õ!üÚdøô  ô 	hÜ+Ð.WÐX[ÐW\Ð,]Ó^ÐdgÐgûð	húsq   ‚G= “AG# Á!G= Á5G8ÂG8Â/G8Ã&G= Ã/G= Ä,G= Ä9#G= Å#G= Æ&G= Æ(#G= ÇG= Ç#G5Ç5G= Ç=HÈHÈHc                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   r1   r   r@   )r   r5   s   "€r   r   rs   Ù   s   ø€ ÷ ñ ©Cð ±Dñ r   c                óÀ  €  V P                  4       pVP                  4       pVP                  R4      pVP                  VR7      pV'       d#   VP	                  \        V^ ,          4      R7       VP                  R4      pVP                  VR7      pV'       d#   VP	                  \        V^ ,          4      R7       VP                  4        R#   \         d     R# i ; i)z7Delete hotspot user and kick active session if present.r¬   r•   r¤   r­   )r®   TF)rp   ru   rƒ   r   r¥   r   rw   rx   )r:   r1   ry   rz   rœ   r�   Ú
active_resÚactive_existings   &&      r   Údelete_hotspot_userÚ'RealMikrotikAdapter.delete_hotspot_userÙ   s¶   € ð	Ø—=‘=“?ˆDØ—,‘,“.ˆCØ×'Ñ'Ð(:Ó;ˆHØ—|‘|¨�|Ó2ˆHßØ—‘¤<°¸µÓ#<�Ô=Ø×)Ñ)Ð*>Ó?ˆJØ(Ÿn™n°(˜nÓ;ˆOßØ×!Ñ!¤\°/À!Õ2DÓ%EÐ!ÔFØ�O‰OÔÙøÜô 	Úð	ús   ‚A
C ÁAC Â2C ÃCÃCc                ó<   <€ V ^8„  d   QhRS[ RS[S[S[3,          /# r»   r   )r   r5   s   "€r   r   rs   ë   s(   ø€ ÷ gñ g¡Sð g©U±4¹°:Õ->ñ gr   c                ó  €  V P                  4       p VP                  4       pVP                  R4      P                  VR7      pVP                  R4      P                  VR7      pVP	                  4        V'       g   R\        V4      3# \        V^ ,          P                  RR4      4      P                  4       R	9   pV'       * \        V4      3#   TP	                  4        i ; i  \         d   p\        RT 24      ThRp?ii ; i)
z2Read-only check: (secret_enabled, active_session).r£   r•   ú/ppp/activeFr°   r$   z(RouterOS API gagal memverifikasi PPPoE: N>   Ú1r²   Útrue)
rp   ru   rƒ   r   rw   r!   r   r+   rx   r   )r:   r1   ry   rz   Úsecretr³   r°   r{   s   &&      r   Úverify_pppoeÚ RealMikrotikAdapter.verify_pppoeë   sí   € ð	gØ—=‘=“?ˆDð"Ø—l‘l“n�Ø×)Ñ)¨-Ó8×<Ñ<À(Ð<ÓK�Ø×)Ñ)¨-Ó8×<Ñ<À(Ð<ÓK�à—‘Ô!ßØœd 6›lÐ*Ð*Ü˜6 !�9Ÿ=™=¨°RÓ8Ó9×?Ñ?ÓAÐEYÑYˆHØ”<¤ f£Ð-Ð-øð	 —‘Õ!ûô
 ô 	gÜ+Ð.VÐWZÐV[Ð,\Ó]ÐcfÐfûð	gús<   ‚C$ “AC Á%C$ Á=C$ Â
AC$ ÃC!Ã!C$ Ã$DÃ/C>Ã>Dc                ó@   <€ V ^8„  d   QhRS[ RS[S[S[S[3,          /# r»   r   )r   r5   s   "€r   r   rs   ü   s+   ø€ ÷ dñ d©cð d±e¹DÁ$ÉÐ<LÕ6Mñ dr   c           	     óv  €  V P                  4       p VP                  4       pVP                  R4      P                  VR7      pVP                  R4      P                  VR7      pV'       g   R\	        V4      R3VP                  4        # \        V^ ,          P                  RR4      4      P                  4       R9   pV'       g	   V'       g$   V'       * \	        V4      R3VP                  4        # \        V^ ,          P                  RR4      4      P                  4       pV'       g   \        R4      hVP                  R	4      P                  R
RRRRRV/4      pRR\        V4      3VP                  4        #   TP                  4        i ; i  \         d    h \         d   p	\        RT	 24      T	hRp	?	ii ; i)zHRead secret/session state and ping a public resolver from PPP client IP.r£   r•   rÃ   Fr°   r$   Úaddressz2Sesi PPPoE tidak mengembalikan alamat IP pelangganÚ/Úpingz1.1.1.1ÚcountÚ2zsrc-addressTz%RouterOS gagal probe internet PPPoE: N>   rÄ   r²   rÅ   )rp   ru   rƒ   r   r!   rw   r   r+   r*   r   Úcallr,   rx   )
r:   r1   ry   rz   rÆ   r³   r°   Úsourcer   r{   s
   &&        r   Úverify_pppoe_internetÚ)RealMikrotikAdapter.verify_pppoe_internetü   sƒ  € ð	dØ—=‘=“?ˆDð"Ø—l‘l“n�Ø×)Ñ)¨-Ó8×<Ñ<À(Ð<ÓK�Ø×)Ñ)¨-Ó8×<Ñ<À(Ð<ÓK�ßØ ¤$ v£,°Ð5ð —‘Õ!ô ˜v a�yŸ}™}¨Z¸Ó<Ó=×CÑCÓEÐI]Ñ]�ß§6Ø'œ<¬¨f«°uÐ<ð —‘Õ!ô ˜V A�YŸ]™]¨9°bÓ9Ó:×@Ñ@ÓB�ßÜ3Ð4hÓiÐiØ×*Ñ*¨3Ó/×4Ñ4Ø˜Y¨	°7¸CÀÐPVÐWó�ð ˜TÔ#;¸GÓ#DÐDà—‘Õ!ø�—‘Õ!ûÜ(ô 	ØÜô 	dÜ+Ð.SÐTWÐSXÐ,YÓZÐ`cÐcûð	dús[   ‚F “AE9 Á-E9 Á:F ÂAE9 ÃE9 Ã F Ã1A7E9 Å(F Å9FÆF ÆF8Æ#F8Æ$F3Æ3F8c                óV   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[;R&   S[;R&   # )r   r%   r1   r2   ro   rm   )r   r[   r!   )r   r5   s   "€r   r   rs   +   sC   ø‡ ‚ ñ �Iñ ñ �Mñ	 ñ
 �Mñ ñ Ññ ñ Ñò r   r	   r8   rd   )r
   r   r   r   Ú__doc__ro   rm   rp   r;   r†   rC   rQ   r]   rH   rb   r¸   r¿   rÇ   rÒ   Ú__annotate_func__r   re   rf   s   @r   rh   rh   +   s¤   ø‡ € áIð €HØ€Gò
÷bò b÷ið i÷2
hð 
h÷hò h÷(kð (k÷Tdð d÷mð m÷ hð h÷:ð ÷$gð g÷"dð d÷c ƒ r   rh   c                   ó€   a € ] tR tRt o Rt]! ]R7      tRV 3R lR lltV 3R lR lt	RV 3R	 lR
 llt
V 3R ltRtV tR# )ÚMockMikrotikAdapteri  zAIn-memory RouterOS simulation; no fabricated real-device success.)Údefault_factoryNc                ó>   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RR/# r0   r4   )r   r5   s   "€r   r   Ú MockMikrotikAdapter.__annotate__  s.   ø€ ÷ 
ñ 
©Cð 
¹3ð 
ÉÈtÍð 
Ð_cñ 
r   c                ón   € V'       g   \        R 4      hRTRT;'       g    RRRRR/V P                  V&   R# )	zUsername PPPoE belum diisir2   r3   r‚   ÚserviceÚpppoer°   FN)r   Úsecretsr9   s   &&&&r   r;   Ú'MockMikrotikAdapter.upsert_pppoe_secret  s=   € ßÜ+Ð,HÓIÐIà˜Ø�w×+Ð+ )Ø�wØ˜ð	"
ˆ�‰�XÓr   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# r>   r@   )r   r5   s   "€r   r   rÛ   )  s"   ø€ ÷ 9ñ 9±ð 9¹tð 9Èñ 9r   c                óz   € WP                   9  d   \        R V R24      hV'       * V P                   V,          R&   R# )úSecret PPPoE ú belum dibuatr°   N)rß   r   rB   s   &&&r   rC   Ú,MockMikrotikAdapter.set_pppoe_secret_enabled)  s5   € ØŸ<™<Ô'Ü+¨m¸H¸:À]Ð,SÓTÐTØ18¬[ˆ�‰�XÕ˜zÓ*r   c                óz   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RS[ R,          RS[ R,          RS[ R,          RR/# rK   r4   )r   r5   s   "€r   r   rÛ   .  sp   ø€ ÷ ñ ©ð ¹ð ÁcÈDÅjð ÑadÐgkÕakð Ñz}ð  AEõ  {Eð ñ  WZð  ]aõ  Wað ð  mqñ r   c                ó   € R # r8   r	   rP   s   &&&&&&&r   rQ   Ú$MockMikrotikAdapter.add_hotspot_user.  s   € Ùr   c                ób   <€ V ^8„  d   Qh/ S[ S[S[ S[S[S[,          3,          3,          ;R&   # )r   rß   )r   r   r!   )r   r5   s   "€r   r   rÛ     s)   ø‡ ‚ ñ ‘#‘t™C¡¡t¥˜OÕ,Ð,Õ-ÑKò	 r   r	   r8   rd   )r
   r   r   r   rÕ   r   r   rß   r;   rC   rQ   rÖ   r   re   rf   s   @r   rØ   rØ     s7   ø‡ € áKá05ÀdÔ0K€G÷
ò 
÷9ð 9÷
ò ÷+ ƒ r   rØ   c           	     óš   € \        V P                  V P                  \        V P                  4      V P
                  ;'       g    RRRR7      # )zECreate a real API pool only when explicitly called by an integration.ri   FTrk   )r   r%   r1   r   r2   ro   )Úconfigs   &r   Úget_mikrotik_connectionrì   2  s;   € ä §¡°f·o±oÜ$2°6·?±?Ó$CØ &§¡× 7Ð 7°4ÀØ+/ô1ð 1r   c                óø   € V P                  R4      pVP                  VR7      pRTRT;'       g    RRRRR	/pV'       d'   VP                  ! RR
\        V^ ,          4      /VB  R# VP                  ! RRV/VB  R# )zDCreate/update a PPPoE secret on an explicitly supplied RouterOS API.r£   r•   r2   r3   r‚   rÝ   rÞ   r°   r±   r   rU   Nr	   ©rƒ   r   rš   r   r›   )rz   r1   r2   r3   rœ   r�   rŸ   s   &&&&   r   rv   rv   :  sw   € à×Ñ Ó.€HØ�|‰| ˆ|Ó*€HØ˜( I¨w×/CÐ/C¸)ÀYÐPWÐYcÐeiÐj€FßØ�ŠÑ<œ X¨a¥[Ó1Ð<°VÔ<à�ŠÑ-˜(Ð- fÔ-r   c                ó(   € V ^8„  d   QhR\         RR/# rF   r4   )r   s   "r   r   r   E  s   € ÷ ?ñ ?¤cð ?¨dñ ?r   c                 óÀ   € V P                  R 4      pVP                  VR7      pV'       g   \        RV R24      hVP                  \	        V^ ,          4      RR7       R# )r£   r•   rã   rä   r²   ©r   r°   N©rƒ   r   r   rš   r   ©rz   r1   rœ   r�   s   &&  r   r‹   r‹   E  sR   € Ø×Ñ Ó.€HØ�|‰| ˆ|Ó*€HßÜ'¨-¸°zÀÐ(OÓPÐPØ‡L�L”L ¨!¥Ó-¸€LÖ>r   c                ó(   € V ^8„  d   QhR\         RR/# rF   r4   )r   s   "r   r   r   M  s   € ÷ >ñ >¬ð >°ñ >r   c                 óÀ   € V P                  R 4      pVP                  VR7      pV'       g   \        RV R24      hVP                  \	        V^ ,          4      RR7       R# )r£   r•   rã   rä   r±   rñ   Nrò   ró   s   &&  r   rŠ   rŠ   M  sR   € Ø×Ñ Ó.€HØ�|‰| ˆ|Ó*€HßÜ'¨-¸°zÀÐ(OÓPÐPØ‡L�L”L ¨!¥Ó-¸€LÖ=r   Nc                 ó   € V P                  R 4      pVP                  VR7      pRTRT;'       g    R/pV'       d   WHR&   V'       d   WXR&   V'       d'   VP                  ! R
R\        V^ ,          4      /VB  R	# VP                  ! R
RV/VB  R	# )r¬   r•   r2   r3   r‚   r¯   rN   r   rU   Nr	   rî   )	rz   r1   r2   r3   r�   rN   rœ   r�   rŸ   s	   &&&&&&   r   r�   r�   U  sƒ   € Ø×ÑÐ 2Ó3€HØ�|‰| ˆ|Ó*€HØ˜( I¨w×/CÐ/C¸)ÐD€FßØ!-ˆ~ÑßØ#ˆyÑßØ�ŠÑ<œ X¨a¥[Ó1Ð<°VÔ<à�ŠÑ-˜(Ð- fÔ-r   c                 ó€   € VP                   '       g   \        R 4      h\        WP                   W!P                  4       R# )zUsername MikroTik belum diisiN)Úmikrotik_userr   rv   Úservice_profile)rz   Úcustomerr2   s   &&&r   Úprovision_customer_userrû   c  s2   € Ø×!×!Ð!Ü'Ð(GÓHÐHô �C×/Ñ/°×;SÑ;SÖTr   c                 ó  € V P                  R 4      pVP                  VR7      pV RV R2pRTR\        V4      RT;'       g    R/p	V'       d'   VP                  ! RR\	        V^ ,          4      /V	B  R
# VP
                  ! RR	V/V	B  R
# )r”   r•   zk/Úkr–   r—   r˜   r™   r   rU   Nr	   )rƒ   r   r   rš   r   r›   )
rz   rU   Ú	rate_downÚrate_uprW   rY   rœ   r�   ÚraterŸ   s
   &&&&&&    r   Úpush_hotspot_profiler  j  s�   € Ø×ÑÐ :Ó;€HØ�|‰| ˆ|Ó&€HØˆY�b˜˜ 1Ð%€Dà�dØœ˜F›Ø˜?×8Ð8¨jð€F÷
 Ø�ŠÑ<œ X¨a¥[Ó1Ð<°VÔ<à�ŠÑ)˜$Ð) &Ô)r   )NN)rÕ   Údataclassesr   r   Útypingr   Úrouteros_apir   Úapp.core.secretsr   ÚRuntimeErrorr   r   r,   r.   rh   rØ   rì   rv   r‹   rŠ   r�   rû   r  r	   r   r   Ú<module>r     s—   ðñ÷
 )Ý å (Ý +ô	 ô 	õõô=�hô =ð ÷idð idó ðidðZ ÷ð ó ðò01ò.õ?õ>ô.òUô*r   