+
    |w¼jP…  ã            -       óN  € ^ RI HtHtHtHtHtHt ^ RIHtH	t	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHtHtHtHtHtHtHtHtHt ^ RIH t  ^ R	I!H"t"H#t#H$t$H%t%H&t& ^ R
I'H(t( ^ RI)H*t*H+t+ ^ RI,H-t-H.t. ^ RI/H0t0H1t1 ^ RI2H3t3H4t4H5t5H6t6 ^ RI7H8t8H9t9 ^ RI:H:t:H;t; ^ RI<t<^ RI=t=^ RI>t>]! ]! ]8! R4      4      .R7      t?]>P€                  Pƒ                  ]>P€                  Pƒ                  ]>P€                  Pƒ                  ]>P€                  P…                  ]C4      4      4      4      tD]! ]>P€                  P‹                  ]DR4      R7      tF]?P�                  R]R7      ]! ]4      3R R ll4       tH]?P�                  R4      ]! ]4      3R R ll4       tI]?P•                  R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R 4      ]! R!4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! ^¯4      ]! ^¯4      ]! ^d4      ]! ^–4      ]! ^4      ]! R"4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R#4      ]! R$4      ]! R%4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R&4      ]! R&4      ]! R&4      ]! R&4      ]! R4      ]! R4      ]! ]4      3*R' R( ll4       tK]?P�                  R)]R7      ]! ]4      ]! ]94      3R* R+ ll4       tL]?P•                  R,]R7      ]! R-4      ]! ]4      ]! ]94      3R. R/ ll4       tM]?P�                  R0]R7      ]! ]4      3R1 R2 ll4       tN]?P•                  R34      ]! ]4      3R4 R5 ll4       tO]?P•                  R64      ]! ]4      ]! ]94      3R7 R8 ll4       tP]?P•                  R94      ]! ]4      ]! ]94      3R: R; ll4       tQ]?P•                  R<4      ]! ]4      ]! ]94      3R= R> ll4       tR]?P§                  R04      ]! ]4      ]! ]8! R?4      4      3R@ RA ll4       tTR# )Bé    )Ú	APIRouterÚRequestÚFormÚDependsÚstatusÚHTTPException)ÚHTMLResponseÚJSONResponseÚRedirectResponse)ÚJinja2Templates)ÚAsyncSession)Úselect)Úget_db)ÚCustomerÚCustomerTypeÚCustomerStatusÚProvisioningJobÚProvisioningEventÚServicePackageÚODPÚ	OLTDeviceÚMikrotikDeviceÚAuditLogÚDeviceCredential)Úprovision_customer)Úvalidate_nikÚcustomer_code_forÚdefault_pppoe_usernameÚencrypt_default_pppoe_passwordÚdecrypt_pppoe_password)Úencrypt_secret)Úget_olt_adapterÚUnsupportedOLTError)Úrun_onboardingÚrefresh_customer_online_status)Úget_vendor_profileÚvendor_profiles_for_ui)ÚDiscoveryUnavailableErrorÚInvalidPonPortErrorÚdiscover_unregistered_ontsÚnormalize_pon_port)Úrequire_rolesÚget_current_user)ÚdatetimeÚtimezoneNÚadmin_cs)Údependencieszapp/templates)Ú	directoryz/add-customer)Úresponse_classc                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚrequestÚdb)r   r   )Úformats   "Ú-/var/www/html/bestweb/app/routes/customers.pyÚ__annotate__r:      s   € ÷ 	Rñ 	R¤Wð 	R´,ñ 	Ró    c              ƒ   ó²  "  € VP                  \        \        4      P                  \        P                  R 8H  \        P
                  R8H  \        P                  R8H  4      P                  \        P                  4      4      G Rj  x€L
 P                  4       P                  4       pVP                  \        \        4      P                  \        P                  R 8H  4      P                  \        P                  4      4      G Rj  x€L
 P                  4       P                  4       pVP                  \        \        4      P                  \        P                  R 8H  4      P                  \        P                  4      4      G Rj  x€L
 P                  4       P                  4       pVP                  \        \        4      P                  \        P                  R 8H  4      P                  \        P                  4      4      G Rj  x€L
 P                  4       P                  4       p\        P!                  V RRVRVRVRVR	\#        4       /R
7      #  ELÈ ELL LÏ LR5i)TÚbulanan_pppÚprivate_pppoeNzadd_customer.htmlÚpackagesÚodpsÚoltsÚ	mikrotiksÚvendor_profiles©r6   ÚnameÚcontext)Úexecuter   r   ÚwhereÚ	is_activeÚservice_typeÚservice_modeÚorder_byrE   ÚscalarsÚallr   Úcoder   r   Ú	templatesÚTemplateResponser'   )r6   r7   r?   r@   rA   rB   s   &&    r9   Úadd_customer_pagerR      sé  é € à—j‘j¤¬Ó!7×!=Ñ!=Ü× Ñ  DÑ(Ü×#Ñ# }Ñ4Ü×#Ñ# Ñ6ó"÷ �hŒ~×"Ñ"Ó#ó	%÷ %÷ '.¡g£i·±³ð	 ð
 —*‘*œV¤C›[×.Ñ.¬s¯}©}ÀÑ/DÓE×NÑNÌsÏxÉxÓXÓY×Y×bÑbÓd×hÑhÓj€DØ—*‘*œV¤IÓ.×4Ñ4´Y×5HÑ5HÈDÑ5PÓQ×ZÑZÔ[d×[iÑ[iÓjÓk×k×tÑtÓv×zÑzÓ|€DØ—z‘z¤&¬Ó"8×">Ñ">¼~×?WÑ?WÐ[_Ñ?_Ó"`×"iÑ"iÔjx×j}Ñj}Ó"~Ó×÷  Iñ  Ió  K÷  Oñ  Oó  Q€IÜ×%Ñ%¨gÐ<OÐZdÐfnÐpvÐx|ð  Eð  GKð  MXð  Zcð  evô  xNó  xPð  ZQÐ%ó  Rð  Rò%ò
 ZÙkÙùsL   ‚BIÂIÂA>IÄIÄA>IÆIÆA>IÈIÈAIÉIÉIÉIz(/api/olt-devices/{olt_device_id}/auto-snc                ó<   € V ^8„  d   QhR\         R\        R\        /# )r5   Úolt_device_idÚpon_portr7   )ÚintÚstrr   )r8   s   "r9   r:   r:   ,   s+   € ÷ "Lñ "LÜð"Läð"Lô 	ñ"Lr;   c              ƒ  ó¾  "  €  \        V4      pTP	                  \
        T 4      G Rj  x€L
 pTe   TP                  '       g   \        RRR7      h\        TP                  TP                  4      pTe:   TP                  P                  4       TP                  P                  4       3R8w  d   \        RRR7      hTP                  '       g   \        RR	R
R. RT RTRR/R7      # TP	                  \        TP                  4      G Rj  x€L
 pTe2   TP                  '       d    TP                  P                  4       R8w  d   \        RR	R
R. RT RTRR/R7      #  \        P                   ! \"        TP$                  TP&                  TP(                  TP*                  \,        P.                  ! RTP0                   R24      TR7      G Rj  x€L
 pR	RRT U	u. uF  q™P4                  NK  	  up	RT RT/#   \         d   p\        R\        T4      R7      ThRp?ii ; i ELð EL LW  \2         d+   p\        RR	R
R. RT RTR\        T4      /R7      u Rp?# Rp?ii ; iu up	i 5i)zHRead unregistered ONT serials through the pinned, read-only OLT session.é¦  ©Ústatus_codeÚdetailNé”  zOLT tidak tersediaé™  z*Auto SN belum tersedia untuk model OLT inii÷  Ú	availableFÚresultsrT   rU   Úreasonz#Credential Vault OLT belum terikat.)r[   ÚcontentÚsshz"Credential SSH OLT tidak tersedia.ÚOLT_Ú_SSH_HOST_KEY_SHA256)ÚhostÚportÚusernameÚencrypted_secretÚpinned_host_keyrU   T)úc-dataú
fd1601s-b1)r+   r)   r   rW   Úgetr   rI   r&   ÚvendorÚmodelÚcasefoldÚcredential_idr
   r   ÚprotocolÚasyncioÚ	to_threadr*   rf   Úapi_portrh   ri   ÚosÚgetenvÚidr(   Ú__dict__)
rT   rU   r7   Únormalized_portÚexcÚoltÚprofileÚ
credentialr`   Úitems
   &&&       r9   Úauto_sn_discoveryr€   +   s”  é € ðGÜ,¨XÓ6ˆð —‘”y -Ó0×
0€CØ
‚{˜#Ÿ-Ÿ-˜-Ü¨Ð4HÔIÐIÜ  §¡¨S¯Y©YÓ7€GØ‚˜7Ÿ>™>×2Ñ2Ó4°g·m±m×6LÑ6LÓ6NÐOÐSkÔkÜ¨Ð4`ÔaÐaØ××ÐÜ¨°kÀ5È)ÐUWÐYhÐjwð  zDð  FUð  W_ð  aFð  6Gô  Hð  	HØ—v‘vÔ.°×0AÑ0AÓB×B€JØÒ ×!5×!5Ð!5¸×9LÑ9L×9UÑ9UÓ9WÐ[`Ô9`Ü¨°kÀ5È)ÐUWÐYhÐjwð  zDð  FUð  W_ð  aEð  6Fô  Gð  	GðkÜ×)Ò)Ü&Ø—‘Ø—‘Ø×(Ñ(Ø'×8Ñ8ÜŸIšI¨¨S¯V©V¨HÐ4HÐ&IÓJØ$ô
÷ 
ˆð ˜˜yÁWÓ*MÁW¸T¯=¬=ÁWÑ*MÈÐ`mÐoyð  |Kð  Lð  Løô5 ô GÜ¨´C¸³HÔ=À3ÐFûðGúò 1ò Cñ
øô %ô kÜ¨°kÀ5È)ÐUWÐYhÐjwð  zDð  FUð  W_ô  adð  ehó  aið  6jô  kõ  	kûðküâ*Mùs¥   ‚I„G. �I¨H©IÁBIÃ:IÄHÄIÄ!6IÅA.H  ÇHÇH  ÇIÇI
Ç&IÇ.HÇ9HÈHÈIÈIÈH  È IÈ+IÉ
IÉIÉIÉI.Ú1playr>   z	["pppoe"]ÚnoneÚbnbv1009ú{}ÚZTEÚC320Úmanualc          V      óp  € V ^8„  d   QhR\         R\        R\        R\        R\        R\        R\        R\        R	\        R
\        R,          R\        R\        R\        R\        R\        R\        R\        R\        R,          R\        R\        R\        R\        R\        R\        R\        R\        R\        R,          R\        R,          R\        R\        R \        R!\        R"\        R#\        R,          R$\        R%\        R&\        R'\        R(\        R)\        R*\        R+\        R,          R,\        /+# )-r5   r6   rE   ÚnikÚaddressÚphoneÚ	cust_typeÚ	play_typeÚharga_paketÚservice_profileÚ
package_idNÚprovisioning_modeÚservice_modes_jsonÚont_management_modeÚmanagement_pppoe_usernameÚmanagement_pppoe_passwordÚpppoe_usernameÚpppoe_passwordÚonu_idÚwan_vlanÚservice_vlanÚ
pppoe_vlanÚhotspot_vlanÚ	iptv_vlanÚolt_vlan_profileÚont_snÚ	ont_brandrT   Úmikrotik_device_idÚolt_fields_jsonÚ
olt_vendorÚ	olt_modelÚolt_portÚodp_infoÚodp_idÚodp_latitudeÚodp_longitudeÚont_sn_modeÚonu_id_modeÚolt_port_modeÚont_brand_modeÚmikrotik_userÚvlan_idr7   )r   rW   rV   r   )r8   s   "r9   r:   r:   Q   s@  € ÷ c|ñ c|Üðc|ä
ðc|ô 
ðc|ô ð	c|ô
 ðc|ô ðc|ô ðc|ô ðc|ô ðc|ô �d•
ðc|ô ðc|ô ðc|ô ðc|ô  #ðc|ô  #ðc|ô  ð!c|ô" ð#c|ô$ �$�Jð%c|ô& ð'c|ô( ð)c|ô* ð+c|ô, ð-c|ô. ð/c|ô0 ð1c|ô2 ð3c|ô4 ð5c|ô6 ˜•:ð7c|ô8 ˜d�
ð9c|ô: ð;c|ô< ð=c|ô> ð?c|ô@ ðAc|ôB ðCc|ôD �$�JðEc|ôF ðGc|ôH ðIc|ôJ ðKc|ôL ðMc|ôN ðOc|ôP ðQc|ôR ðSc|ôT �4�ZðUc|ôV 	ñWc|r;   c+           
   ƒ   óú  "  €  \        V4      pT*P	                  \        \        P                  4      P                  \        P                  T8H  4      4      G Rj  x€L
 '       d   \        RRR7      hT	'       d   T*P                  \        T	4      G Rj  x€L
 MRp,T	'       dJ   T,'       d5   T,P                  '       d#   T,P                  R8w  g   T,P                  R8w  d   \        RRR7      hT,'       d`   T,P                  T,P                   r‡T,P                  p
T,P"                  T,P$                  T,P&                  pppT,P(                  T,P*                  ppTR	8w  d   \        R R
R7      hR.p-Rp
RpRp\,        P.                  ! T-RZR7      pT!'       d   T*P                  \0        T!4      G Rj  x€L
 MRp.T.e   T.P                  '       g   \        RRR7      hT'       d   T*P                  \2        T4      G Rj  x€L
 MRp/T/e   T/P                  '       g   \        RRR7      hT'       d   T*P                  \4        T4      G Rj  x€L
 MRp0T'       d$   T0e   T0P                  '       g   \        RRR7      hT0fC   T.'       d;   T.P6                  '       d)   T*P                  \4        T.P6                  4      G Rj  x€L
 p0T0e   T0P                  '       g   \        RRR7      hTTR/ 3w  p1p2p3p4T/'       EdÆ   T/P8                  T/P:                  p2p1\=        T1T24      p5T5f   \        R RT1 RT2 2R7      h \,        P>                  ! T;'       g    R4      p6\C        T6\D        4      '       g   \        R RR7      hT5PF                   U7u0 uF  p7T7R,          kK  	  p8p7T6PI                  4        U9U:u/ uFQ  w  p9p:T9T89   g   K  \        T:4      PK                  4       '       g   K0  T9\        T:4      PK                  4       R,          bKS  	  p4p9p:R	RRRRR/T,          p;R[ F  p<T<T89   g   K  T;T4T<&   K  	  T5PF                   U7u. uFD  p7T7P                  R4      R8X  g   K  T4P                  T7R,          4      '       d   K;  T7R ,          NKF  	  p=p7T='       d$   \        R R!R"PM                  T=4      ,           R7      hT5PN                  p3T1PQ                  4       R#8X  d   T2PQ                  4       R$8X  d   ^d^–^ÈpppTp\        R\/ R%TbR&TbR'TbR(TbR)TbR*TbR+TbR,T,'       d   T,P                  MRbR-T,'       d   T,PR                  MRbR.T,'       d   T,P                  MT
bRTbR/TR]9   d   TMR0bR1TbR2TbR3T
bR4TbR5RbR6RbR7TbR8TbR9TbR:TbR;TbR<TbR=TbR>TbR?TbR@T/'       d   T/P                  MRbRAT0'       d   T0P                  MRbRBT1bRCT2bRDT3bRET4'       d   \,        P.                  ! T4RFRG7      MRbRHTbRIT bRJT.'       d   T.P                  MRbRKT"bRLT#bRMT$R^9   d   T$MRNbROT%R^9   d   T%MRNbRPT&R^9   d   T&MRNbRQT'R^9   d   T'MRNbRRRSbRTT(bRUT)bRV\T        PV                  b p>T*PY                  T>4       T*P[                  4       G Rj  x€L
  \]        T>P                  4      T>n/        \a        T>P^                  4      T>n1        \e        T>P^                  4      T>n3        ^T>n4        \k        T>T*4      G Rj  x€L
  \m        RWT>P                   RX2\n        Pp                  RY7      #   \         d   p+\        R \        T+4      R7      hRp+?+ii ; i ELÔ ELž ELŒ ELD ELü ELŒ  \,        P@                   d    \        R RR7      hi ; iu up7i u up:p9i u up7i  EL L¡5i)_rY   rZ   Nr^   zNIK sudah terdaftarr=   r>   i�  z&PSB hanya menerima paket bulanan PPPoEr�   z/Form PSB ini hanya menerima layanan 1Play PPPoEÚpppoe)Ú
separatorsz$Pilih ODP aktif sebelum provisioningz$Pilih OLT aktif sebelum provisioningzMikroTik/NAS tidak tersediaz-Pilih MikroTik/NAS aktif sebelum provisioningz)Profil provisioning belum tersedia untuk Ú r„   z"Field provisioning OLT tidak validz)Field provisioning OLT harus berupa objekÚkey:Né    NÚ1pÚ2playÚ2pÚ3playÚ3pr�   ÚrequiredÚtrueÚlabelzField OLT wajib: z, rk   rl   rE   r‰   rŠ   r‹   Útyper�   rŽ   Úservice_package_idÚservice_profile_idrK   r“   r‚   r”   r•   r‘   r’   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    rT   r¡   r£   r¤   Úolt_adapter_keyr¢   T)Ú	sort_keysr¥   r¦   r§   r¨   r©   rª   r‡   r«   r¬   r­   Úhardware_discovery_statusÚunavailabler®   r¯   r   ú/customers/z/credentials/initial©Úurlr[   )Ú,Ú:)Úline_profiler�   Úont_line_profileÚont_srv_profile© >   r‚   r±   >   Úautor‡   )9r   Ú
ValueErrorr   rW   Úscalarr   r   rx   rH   r‰   rm   r   rI   rJ   rK   ÚpriceÚmikrotik_profilerž   rš   r�   r›   rœ   ÚjsonÚdumpsr   r   r   r¡   rn   ro   r&   ÚloadsÚJSONDecodeErrorÚ
isinstanceÚdictÚfieldsÚitemsÚstripÚjoinr´   rp   rÀ   r   ÚREQUESTÚaddÚflushr   Úcustomer_coder   r–   r   r—   Úpppoe_secret_versionr$   r   r   ÚHTTP_303_SEE_OTHER)?r6   rE   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    rT   r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   r®   r¯   r7   r{   ÚpackageÚservice_modesÚselected_odpÚselected_oltÚselected_mikrotikrn   ro   Úadapter_keyÚ
olt_fieldsr}   Úsupplied_fieldsÚfieldÚallowedr´   ÚvalueÚprofile_nameÚprofile_keyÚmissingÚnew_customers?   &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&                    r9   Úadd_customerrò   P   sî  é € ð\>Ü˜3Óˆð �Y‰Y”vœhŸk™kÓ*×0Ñ0´·±ÀÑ1DÓEÓF×FÖFÜ¨Ð4IÔJÐJß:D�B—F‘Fœ>¨:Ó6×6Ð6È$€GßŸ7¨'×*;×*;Ð*;¸w×?SÑ?SÐWdÔ?dÐho×h|Ñh|ð  APô  iPÜ¨Ð4\Ô]Ð]ßØ'.§}¡}°g×6NÑ6N�_Ø#×0Ñ0ÐØ4;×4LÑ4LÈg×NbÑNbÐdk×duÑdu¨	˜,ÐØ#*×#5Ñ#5°w×7KÑ7K�Lˆ
Ø�GÔÜ¨Ð4eÔfÐfØ�I€MØ'Ðð €NØ€NÜŸš M¸jÔIÐß06˜Ÿ™¤ VÓ,×,Ð,¸D€LØÒ <×#9×#9Ð#9Ü¨Ð4ZÔ[Ð[ß=J˜Ÿ™¤	¨=Ó9×9Ð9ÐPT€LØÒ <×#9×#9Ð#9Ü¨Ð4ZÔ[Ð[ßL^˜bŸf™f¤^Ð5GÓH×HÐHÐdhÐßÐ0Ò8Ð@Q×@[×@[Ð@[Ü¨Ð4QÔRÐRØÒ §\°l×6U×6UÐ6UØ"$§&¡&¬¸×9XÑ9XÓ"Y×YÐØÒ Ð(9×(C×(CÐ(CÜ¨Ð4cÔdÐdØ-7¸ÀDÈ"Ð-LÑ*€FˆE�; 
ß€|Ø$×+Ñ+¨\×-?Ñ-?�ˆÜ$ V¨UÓ3ˆØŠ?Ü¨CÐ:cÐdjÐckÐklÐmrÐlsÐ8tÔuÐuð	^Ü"Ÿjšj¨×)@Ð)@¸DÓAˆOô ˜/¬4×0Ò0Ü¨CÐ8cÔdÐdØ-4¯^ª^Ó<©^ E�5˜—<�<©^ˆÐ<ØFU×F[ÑF[ÔF]ô  HÑF]¹
¸¸UÐadÐhoÑaoÔ3ÔtwÐx}Ót~÷  uEñ  uE÷  uGÔ3�cœ3˜u›:×+Ñ+Ó-¨dÕ3Ò3ÑF]ˆ
ñ  HØ  w°°g¸tÐDÀYÕOˆÛeˆKØ˜gÖ%Ø*6�
˜;Ó'ñ fð 07¯~ª~ó  G©~ eÀÇÁÈ:ÓAVÐZ`ÑA`”>Ðis×iwÑiwÐx}ð  Dõ  yE÷  jF”>�5˜—>�>©~ˆð  GßÜ¨CÐ8KÈdÏiÉiÐX_ÓN`Õ8`ÔaÐaØ—k‘kˆØ‡�Ó˜HÔ$¨¯©Ó)9¸\Ô)IØ.1°3¸ )�Lˆ
Ø€LÜò 0Ùð0áð0ñ ð0ñ ð	0ñ
 ð0ñ ð0ñ  ð0÷ *1˜7Ÿ:š:°døð0÷ :A˜7×5Ò5Àdøð0÷ .5�W×)Ò)Ð:Køð0ñ (ð0ð 4GÐJ[Ô3[Ñ/Ðagøð0ñ #<ð0ñ #<ð0ñ ,ð0ñ  .ð!0ñ$ ð%0ñ& ð'0ñ( ð)0ñ* ð+0ñ, "ð-0ñ. ð/0ñ0 "ð10ñ2 ð30ñ4 *ð50ñ6 ð70ñ8 ð90÷: *6�l—o’o¸4øð;0÷< 4EÐ,×/Ò/È$øð=0ñ> ð?0ñ@ ðA0ñB $ðC0÷D CMœŸ
š
 :¸Õ>ÐRVøðE0ñF ðG0ñH ðI0÷J #/ˆ|�Š°DøðK0ñL "ðM0ñN $ðO0ðP $/Ð2DÔ#D‘KÈ(øðQ0ðR $/Ð2DÔ#D‘KÈ(øðS0ðT (5Ð8JÔ'J‘mÐPXøðU0ðV *8Ð;MÔ)M‘~ÐS[øðW0ñX #0ðY0ñZ $ð[0ñ\ ð]0ô^ ×%Ò%ð_0€Lðb ‡F�Fˆ<ÔØ
�(‰(‹*×ÐÜ!2°<·?±?Ó!C€LÔÜ"8¸×9SÑ9SÓ"T€LÔÜ"@À×A[ÑA[Ó"\€LÔØ()€LÔ%ä
˜ rÓ
*×*Ð*Ü +¨l¯o©oÐ->Ð>RÐ SÔag×azÑazÔ{Ð{øôi ô >Ü¨´C¸³HÔ=Ð=ûð>úâFâ6ò" -ò :ò Iò Zøô ×#Ñ#ô 	^Ü¨CÐ8\Ô]Ð]ð	^üò =ùó Hùò
 Gòr ñ +ùs•  ‚];„\ �A];Á\.Á	];Á%];Á:];Â\1Â];Â"];Â*];Â<6];Ã3B5];Æ(\4Æ)];Ç];Ç];Ç3\7Ç4];È];È%];È>\:È?];É];É#];É<];Ê#];Ê1\=Ê2];Ë ];Ë-;];Ì)]  Í]  Í	1];Í:]&Î];Î!]+Î2]+Ï%]+Ï8];Ð];Ð/]1Ñ]1Ñ,]1Ñ9B&];Ô ];Ô7A];Ö
];Ö!];×(];×*B];Ù.]6Ù/A(];Û]9Û-];Ü\+Ü\&Ü&\+Ü+];Ü1];Ü4];Ü7];Ü:];Ü=];Ý #]#Ý#];Ý9];z,/customers/{customer_id}/credentials/initialc                ó<   € V ^8„  d   QhR\         R\        R\        /# ©r5   Úcustomer_idr6   r7   ©rV   r   r   )r8   s   "r9   r:   r:   ÷   s'   € ÷ 
tñ 
t´sð 
tÄWð 
tÔR^ñ 
tr;   c           
   ƒ   ó  "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RRR7      hVP                  e   \        RRR7      h\	        VP
                  4      p\        P                  ! \        P                  4      Vn        VP                  \        VP                  RRVP                  VP                  R7      4       VP                  4       G R j  x€L
  \        P!                  VR	RVR
VRR/R7      #  Lå L$5i)Nr]   úPelanggan tidak ditemukanrZ   iš  zGKredensial awal sudah ditampilkan. Gunakan reset admin bila diperlukan.Úreveal_initial_pppoeÚcustomer©Úuser_idÚactionÚentityÚ	entity_idr\   úcredential_notice.htmlÚpasswordÚmodezKredensial provisioning awalrD   )rm   r   r   Úpppoe_secret_revealed_atr    r—   r.   Únowr/   ÚutcrÞ   r   rx   rà   ÚcommitrP   rQ   )rõ   r6   r7   Úuserrú   r  s   &&&&  r9   Úreveal_initial_pppoe_credentialr  ö   sý   é € à—V‘VœH kÓ2×2€HßÜ¨Ð4OÔPÐPØ×(Ñ(Ò4Ü¨Ð4}Ô~Ð~Ü% h×&=Ñ&=Ó>€HÜ(0¯ª´X·\±\Ó(B€HÔ%Ø‡F�FŒ8˜DŸG™GÐ,BÈ:Ðai×alÑalÐu}÷  vLñ  vLô  Mô  NØ
�)‰)‹+×ÐÜ×%Ñ%¨gÐ<TÐ_iÐksÐuð  BJð  LRð  Trð  _sÐ%ó  tð  tñ 3ñ ùs'   ‚DœD�D©B6DÃDÃ #DÄDz*/customers/{customer_id}/credentials/resetÚ c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )r5   rõ   r6   Únew_passwordr7   )rV   r   rW   r   )r8   s   "r9   r:   r:     s0   € ÷ vñ v¬cð v¼Gð vÔSVð vÔgsñ vr;   c           
   ƒ   óf  "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RRR7      hVP                  4       ;'       g    VP                  p\        V4      ^8  g   \        V4      ^€8”  d   \        RRR7      h\        V4      Vn        VP                  ;'       g    ^ ^,           Vn        VP                  \        VP                  RRVP                  VP                  R7      4       VP                  4       G R j  x€L
  \        P                  VR	RVR
VRR/R7      #  EL L%5i)Nr]   rø   rZ   rY   z*Password PPPoE harus 8 sampai 128 karakterÚreset_pppoerú   rû   r   r  r  zKredensial PPPoE setelah resetrD   )rm   r   r   rÛ   rà   Úlenr   r—   rá   rÞ   r   rx   r  rP   rQ   )rõ   r6   r  r7   r  rú   r  s   &&&&&  r9   Úreset_pppoe_credentialr    s&  é € à—V‘VœH kÓ2×2€HßÜ¨Ð4OÔPÐPØ×!Ñ!Ó#×=Ð= x×'=Ñ'=€HÜ
ˆ8ƒ}�qÔœC ›M¨CÔ/Ü¨Ð4`ÔaÐaÜ<¸XÓF€HÔØ%-×%BÑ%B×%GÐ%GÀaÈ1Õ$L€HÔ!Ø‡F�FŒ8˜DŸG™G¨MÀ*ÐX`×XcÑXcÐlt÷  mCñ  mCô  Dô  EØ
�)‰)‹+×ÐÜ×%Ñ%¨gÐ<TÐ_iÐksÐuð  BJð  LRð  Ttð  _uÐ%ó  vð  vò 3ñ ùs4   ‚D1œD,�D1©#D1ÁAD1Â*AD1Ä	D/Ä
#D1Ä/D1z/customers/{customer_id}c                ó<   € V ^8„  d   QhR\         R\        R\        /# rô   rö   )r8   s   "r9   r:   r:     s&   € ÷ Fñ F¤sð F´Wð FÄ,ñ Fr;   c              ƒ   ó  "  € VP                  \        \        4      P                  \        P                  V 8H  4      4      G R j  x€L
 pVP                  4       pV'       g   \        RRR7      h\        WB4      G R j  x€L
  R pR p \        VP                  VP                  4      pVP                  V4      p\        P!                  VRRVRVRVRVR	V/R
7      #  L” L^  \        \        3 d   p\        T4      p R p?LGR p?ii ; i5i)Nr]   rø   rZ   zcustomer_detail.htmlrú   Ú
zte_configÚzte_config_errorÚdevice_configÚdevice_config_errorrD   )rG   r   r   rH   rx   Úscalar_one_or_noner   r%   r"   r£   r¤   Úgenerate_configrÏ   r#   rW   rP   rQ   )	rõ   r6   r7   Úresultrú   r  r  Úadapterr{   s	   &&&      r9   Úcustomer_detailr    s   é € à—:‘:œf¤XÓ.×4Ñ4´X·[±[ÀKÑ5OÓPÓQ×Q€FØ×(Ñ(Ó*€HßÜ¨Ð4OÔPÐPÜ
(¨Ó
6×6Ð6Ø€MØÐð'Ü! (×"5Ñ"5°x×7IÑ7IÓJˆØ×/Ñ/°Ó9ˆô ×%Ñ%¨gÐ<RÐ]gÐiqÐsð  BOð  Qcð  exð  zIð  KXð  Zoð  qDð  ]EÐ%ó  Fð  Fñ Rñ 7øô Ô+Ð,ô 'Ü! #›hÕûð'üsT   ‚ADÁCÁDÁ!DÁ<CÁ=DÂ1C Â7#DÃDÃDÃ.C>Ã9DÃ>DÄDz"/customers/{customer_id}/provisionc                ó0   € V ^8„  d   QhR\         R\        /# ©r5   rõ   r7   ©rV   r   )r8   s   "r9   r:   r:   #  s   € ÷ Nñ N´ð N¼ñ Nr;   c              ƒ   ó*  "  € VP                  \        \        4      P                  \        P                  V 8H  4      4      G R j  x€L
 P                  4       pV'       g   \        RRR7      h\        W!4      G R j  x€L
  \        RV  2RR7      #  LJ L5i)Nr]   rø   rZ   rÅ   i/  rÆ   )	rG   r   r   rH   rx   r  r   r$   r   )rõ   r7   rú   s   && r9   Úprovision_customer_router  "  sv   é € à—j‘j¤¬Ó!1×!7Ñ!7¼¿¹À{Ñ8RÓ!SÓT×T×hÑhÓj€HßÜ¨Ð4OÔPÐPÜ
˜Ó
&×&Ð&Ü +¨k¨]Ð ;ÈÔMÐMñ	 Uñ 'ùs*   ‚ABÁBÁBÁBÁ:BÁ;BÂBz&/customers/{customer_id}/provision-oltc                ó0   € V ^8„  d   QhR\         R\        /# r  r  )r8   s   "r9   r:   r:   ,  s$   € ÷ hNñ hNÜðhNäñhNr;   c              ƒ  ó4   "  € \        W4      G Rj  x€L
 #  L5i)zèExplicitly register one ONU on a supported C-DATA OLT.

Technician status changes never call this endpoint. Hardware execution is
an explicit admin action, guarded by pinned SSH identity and a single
active job per customer/target.
N)>r  Úapp.core.cdata_executorÚCDataExecutionErrorÚprovision_cdata_onurG   r   r   rH   rx   r  r   rÁ   r£   r¤   rT   rŸ   r¥   r˜   rm   r   rI   Úmanagement_protocolrq   r   rv   rw   rÐ   r   rõ   Útargetr   Úin_rÓ   rÔ   rn   ro   rš   r™   rÞ   Úolt_provisioning_statusr  rs   rt   rf   ru   rh   ri   r�   rW   Ú
last_errorÚprovisioning_messager   Ú	Exceptionr.   r  r/   r  Úexecuted_atÚmessageÚmikrotik_provisioning_statusÚprovisioning_statusr   )rõ   r7   Úcurrent_userr#  r$  rú   r|   r~   rj   Ú
active_jobÚpayload_summaryÚjobr  r{   r-  s   &&&            r9   Úprovision_olt_router4  +  s   é € ô *¨+Ó:×:Ð:Ñ:ùó   ‚‘’z+/customers/{customer_id}/provision-mikrotikc                ó0   € V ^8„  d   QhR\         R\        /# r  r  )r8   s   "r9   r:   r:   ˜  s$   € ÷ lNñ lNÜðlNäñlNr;   c              ƒ  ó4   "  € \        W4      G Rj  x€L
 #  L5i)zCExplicitly create/update one PPPoE secret on the assigned MikroTik.N)8r  Úapp.core.mikrotikÚMikrotikProvisioningErrorÚRealMikrotikAdapterÚapp.core.device_credentialsÚdecrypt_secretÚapp.core.customer_identityr    rG   r   r   rH   rx   r  r   r¡   r–   r—   rm   r   rI   rq   r   rÐ   r   rõ   r&  r   r'  rÓ   rÔ   r�   rÞ   r.  r  ri   rf   rh   ru   rs   rt   Úresolve_profileÚupsert_pppoe_secretr*  rW   r)  r   r+  r.   r  r/   r  r,  r(  r/  r   )rõ   r7   r0  r9  r:  r<  r    rú   Úmikrotikr~   r1  r2  r3  Údevice_passwordÚcustomer_passwordr  Úeffective_profileÚused_default_profiler{   r-  s   &&&                 r9   Úprovision_mikrotik_routerE  —  s   é € ô *¨+Ó:×:Ð:Ñ:ùr5  z,/customers/{customer_id}/provision-olt-pppoec                ó0   € V ^8„  d   QhR\         R\        /# r  r  )r8   s   "r9   r:   r:     s   € ÷  Nñ  N´ð  N¼,ñ  Nr;   c              ƒ  ó4   "  € \        W4      G Rj  x€L
 #  L5i)z:Apply the verified C-DATA WAN PPPoE sequence from Billing.N)=r  r"  r#  Úprovision_cdata_pppoer=  r    rG   r   r   rH   rx   r  r   r£   r¤   rN   rT   rŸ   r¥   r˜   r–   r—   rm   r   rI   r%  rq   r   rv   rw   rÐ   r   rõ   r&  r   r'  rÓ   rÔ   rn   ro   rš   rÞ   r  rs   rt   rf   ru   rh   ri   rW   r)  r(  r*  r   r.   r  r/   r  r,  r-  r   )rõ   r7   r0  r#  rH  r    rú   r|   r~   ÚpinnedÚactiveÚpayloadr3  r  r{   Úmsgs   &&&             r9   Úprovision_olt_pppoe_routerM    s   é € ô *¨+Ó:×:Ð:Ñ:ùr5  Úadminc                ó0   € V ^8„  d   QhR\         R\        /# r  r  )r8   s   "r9   r:   r:   ,  s    € ÷ /dñ /dÜð/däñ/dr;   c           
   ƒ   óN  "  € ^ RI HpHpHp ^ RIHp ^ RIHp ^ RIH	p VP                  \        \        4      P                  \        P                  V 8H  4      4      G Rj  x€L
 P                  4       p	V	'       g   \!        RRR7      hV	P"                  '       EdK   V	P$                  '       Ed8   V	P&                  '       Ed%   VP                  \        V4      P                  VP                  V	P"                  8H  4      4      G Rj  x€L
 P                  4       p
V
'       dÇ   V
P(                  '       dµ   VP                  \        V4      P                  VP                  V
P(                  8H  4      4      G Rj  x€L
 P                  4       pV'       dW    T! V
P*                  V
P,                  ;'       g    ^VP.                  VP0                  R	V	P&                  V	P$                  R
7       V	P4                  '       EdB   V	P6                  '       Ed/   VP                  \        V4      P                  VP                  V	P4                  8H  4      4      G Rj  x€L
 P                  4       pV'       dÑ   VP(                  '       d¿   VP                  \        V4      P                  VP                  VP(                  8H  4      4      G Rj  x€L
 P                  4       pV'       da    T! VP*                  VP.                  V! VP0                  4      VP,                  ;'       g    RR7      pVP9                  V	P6                  4       VP;                  V	4      G Rj  x€L
  VP=                  4       G Rj  x€L
  RRRR/#  EL ELo EL  \2         d     EL¢i ; i EL= LÏ  \2         d     Ldi ; i LS L=5i)r   )r   r   r   )Údeprovision_cdata_onu)r:  )r    Nr]   rø   rZ   z+I/zDmJGfTPy3NkMNPghkjawVdeI357pJ/k+xm2qtLdY)rf   rg   rh   ri   rj   rU   r˜   i"  )rf   rh   r  ru   r   Údeletedr-  z4Pelanggan dan konfigurasi perangkat berhasil dihapus)Úapp.models.modelsr   r   r   r"  rQ  r8  r:  r=  r    rG   r   r   rH   rx   r  r   rT   r˜   r¥   rq   rf   ru   rh   ri   r+  r¡   r–   Údelete_pppoe_secretÚdeleter  )rõ   r7   r  r   r   r   rQ  r:  r    rú   r|   ÚcredÚmkr  s   &&&           r9   Údelete_customerrX  +  sú  é € ÷ NÑMÝ=Ý5ÝAà—j‘j¤¬Ó!1×!7Ñ!7¼¿¹À{Ñ8RÓ!SÓT×T×hÑhÓj€HßÜ¨Ð4OÔPÐPð ××Ñ (§/§/¡/°h×6G×6GÑ6GØ—Z‘Z¤ yÓ 1× 7Ñ 7¸	¿¹È×H^ÑH^Ñ8^Ó _Ó`×`×tÑtÓvˆß�3×$×$Ð$ØŸ*™*¤VÐ,<Ó%=×%CÑ%CÐDT×DWÑDWÐ[^×[lÑ[lÑDlÓ%mÓn×n÷  Cñ  Có  EˆDßðÙ)Ø ŸX™XØ Ÿ\™\×/Ð/¨RØ!%§¡Ø)-×)>Ñ)>Ø(UØ!)×!2Ñ!2Ø'Ÿ™õð ×"×"Ñ" x×'>×'>Ñ'>Ø—J‘Jœv nÓ5×;Ñ;¸N×<MÑ<MÐQY×QlÑQlÑ<lÓmÓn×n÷  Cñ  Có  Eˆß�"×"×"Ð"ØŸ*™*¤VÐ,<Ó%=×%CÑ%CÐDT×DWÑDWÐ[]×[kÑ[kÑDkÓ%lÓm×m÷  Bñ  Bó  DˆDßðÙ1°r·w±wÈÏÉÑawÐx|÷  yNñ  yNó  bOð  Z\÷  Zeñ  Ze÷  Zmð  Zmð  imô  n�GØ×/Ñ/°×0GÑ0GÔHð �)‰)�HÓ
×ÐØ
�)‰)‹+×ÐØ�i Ð,bÐcÐcòK Uò aânøô !ô Úðúò
 oámøô
 !ô Ùðúñ Ùùs  ‚AN%Á M0Á!N%Á;N%ÂN%Â.N%ÃAN%ÄM3ÄN%ÄN%Ä1AN%Å4M6Å5N%ÆM9 Æ05M9 Ç%N%Ç8N%ÈAN%ÉNÉN%É)N%É;AN%Ê>NÊ?N%Ë;N Ì#N Ì9N%ÍN!ÍN%Í%N#Í&N%Í3N%Í6N%Í9NÎN%ÎNÎN%ÎN%ÎNÎN%ÎNÎN%Î#N%)UÚfastapir   r   r   r   r   r   Úfastapi.responsesr	   r
   r   Úfastapi.templatingr   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   Úapp.core.databaser   rS  r   r   r   r   r   r   r   r   r   r   r   Úapp.core.provisioningr   r=  r   r   r   r   r    r;  r!   Úapp.core.olt_adaptersr"   r#   Úapp.core.onboardingr$   r%   Úapp.core.olt_vendor_profilesr&   r'   Ú app.core.cdata_fd1601s_discoveryr(   r)   r*   r+   Úapp.core.securityr,   r-   r.   r/   rs   rÓ   rv   ÚrouterÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRrÜ   rP   rm   rR   r€   Úpostrò   r  r  r  r  r4  rE  rM  rU  rX  rÍ   r;   r9   Ú<module>rl     s3  ðß L× Lß JÑ JÝ .Ý /Ý Ý $÷ u÷  u÷  uñ  uÝ 4÷ Wõ  WÝ 6ß Fß Nß S÷ó ÷ >ß 'Û Û Û 	á	¡©°zÓ)BÓ!CÐ DÔ	E€Ø�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨2¯7©7¯?©?¸2¿7¹7¿?¹?È8Ó;TÓ+UÓVÓW€Ù b§g¡g§l¡l°8¸_Ó&MÔN€	à‡�ˆO¨L€Ó9ÙAHÈÃö 	Ró :ð	Rð ‡�Ð6Ó7ñ ˜v“ö"Ló 8ð"LðH ‡�ˆ_Óñ �S“	Ù�C‹yÙ˜“9Ù�c“Ù˜#“YÙ˜'“]Ù˜C“yÙ ›:Ù! $›ZÙ! /Ó2Ù" =Ó1Ù# F›|Ù%)¨$£ZÙ%)¨$£ZÙ˜t›*Ù˜t›*Ù˜d›Ù˜“IÙ˜S›	Ù˜3“iÙ˜S›	Ù˜"“XÙ  Ó,Ù�t“*Ù˜$“ZÙ $ T£
Ù%)¨$£ZÙ ›:Ù˜5“kÙ˜&“\Ù˜“JÙ˜“JÙ˜d›Ù˜T›
Ù˜d›Ù˜H“~Ù˜H“~Ù˜h›Ù˜x›.Ù˜d›Ù˜t›*Ù˜v“öWc|ó ðc|ðJ ‡�Ð:È<€ÓXÙahÐioÓapÑw~ð  @Pó  xQö 
tó Yð
tð ‡�Ð9È,€ÓWÙY]Ð^`ÓYaÑv}ð  Eó  wFñ  MTð  Ueó  Mfö vó Xðvð ‡�Ð&°|€ÓDÙQXÐY_ÓQ`ö Fó EðFð ‡�Ð1Ó2ÙHOÐPVËö Nó 3ðNð ‡�Ð5Ó6ñ ˜v“ÙÐ)Ó*öhNó 7ðhNðV ‡�Ð:Ó;ñ ˜v“ÙÐ)Ó*ölNó <ðlNð^ ‡�Ð;Ó<ÙIPÐQWËÑgnÐoó  hAö  Nó =ð NðF ‡�Ð)Ó*ñ ˜v“Ù‘= Ó)Ó*ö/dó +ò/dr;   