o
    ah                     @   sr  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mZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ ed
dddddZejedgddgdgd h dZdZG dd deZG dd deZdd Zde fddZ!ej"dede	d d!d"e	d d#d"e	d d$d"fd%e d&e de fd'd(Z#e$d)d*d+ Z%e$d,d-d. Z&dS )/    N)FastAPIHTTPExceptionForm)CORSMiddleware)	BaseModel)	webdriver)By)Options)WebDriverWait)expected_conditionsEmaktab Screenshot APIz5Emaktab tizimiga kirish va screenshot olish uchun API1.0.0/docsz/redoc)titledescriptionversiondocs_url	redoc_url*T)allow_originsallow_credentialsallow_methodsallow_headers>   test_key_456my_secret_key_123emaktab_api_key_789zhttps://login.emaktab.uz/c                   @   s>   e Zd ZU eed< eed< eed< eed< eed< eed< dS )SuccessResponsesuccessmessage
screenshot
page_titlecurrent_url	timestampN__name__
__module____qualname__bool__annotations__str r*   r*   ./var/www/www-root/data/www/bot.pdev.uz/main.pyr   ,   s   
 r   c                   @   s&   e Zd ZU eed< eed< eed< dS )ErrorResponser   errorr"   Nr#   r*   r*   r*   r+   r,   4   s   
 r,   c                     s   t  } | d | d | d | d | d | d | ddg | d	d
 tjdd| d  tj| d  fdd}| _ S )u5   Har bir so‘rov uchun yangi Chrome instance yaratadiz--headless=newz--no-sandboxz--disable-dev-shm-usagez--disable-gpuz--window-size=1920,1080z---disable-blink-features=AutomationControlledexcludeSwitcheszenable-automationuseAutomationExtensionFchrome_user_data_)prefixz--user-data-dir=)optionsc                      sJ   z    W n	 ty   Y nw z
tjdd W d S  ty$   Y d S w )NT)ignore_errors)quit	Exceptionshutilrmtreer*   driveruser_data_dirr*   r+   cleanupL   s   zsetup_driver.<locals>.cleanup)r	   add_argumentadd_experimental_optiontempfilemkdtempr   Chromer;   )r2   r;   r*   r8   r+   setup_driver9   s   





rA   
secret_keyc                 C   s   | t vr
tddddS )zSecret key ni tekshirishi  zNoto'g'ri secret keystatus_codedetailN)VALID_SECRET_KEYSr   )rB   r*   r*   r+   validate_secret_key\   s   rG   z/api/screenshot)response_model.zEmaktab login)r   zEmaktab parolzAPI secret keyusernamepasswordc              
      sH  zt | td|   d}zzt }td |t t|d}td |tt	j
df}|  ||  td |t	j
d}|  || td	 |t	jd
}|  td td tjddd}|j}	W d   n1 s{w   Y  td ||	 t|	d}
t|
 d}W d   n1 sw   Y  t|	 td tdd||j|jt ddW W |r|!  td W S W S  t"y } zdt#| }td|  t$d|dd}~ww |r|!  td w w  t$y     t"y# } zdt#| }td|  t$d|dd}~ww )z5
    Emaktab tizimiga kirish va screenshot olish
    u   🔐 Kirish urinishi: Nu   🌐 Sahifaga o'tilmoqda...   u   🔑 Login kiritilmoqda...loginu   🔒 Parol kiritilmoqda...rJ   u!   📝 Kirish tugmasi bosilmoqda...z//input[@type='submit']u   ⏳ Natija kutilyapti...   z.pngF)suffixdeleteu   📸 Screenshot olinmoqda...rbzutf-8u   ✅ Muvaffaqiyatli yakunlandiTz Screenshot muvaffaqiyatli olindi%Y-%m-%d %H:%M:%S)r   r   r   r    r!   r"   u6   ✅ Brauzer yopildi va vaqtinchalik papkalar tozalandizBrauzer jarayonida xatolik: u   ❌ i  rC   zServer xatosi: i  )%rG   printrA   getEMAKTAB_URLr
   untilECpresence_of_element_locatedr   NAMEclear	send_keysfind_elementXPATHclicktimesleepr>   NamedTemporaryFilenamesave_screenshotopenbase64	b64encodereaddecodeosunlinkr   r   r!   strftimer;   r5   r)   r   )rI   rJ   rB   r9   waitlogin_fieldpassword_field
submit_btntmp_filescreenshot_path
image_filebase64_imagee	error_msgr*   r*   r+   get_emaktab_screenshotd   s   	






	
ru   /c                      s   dddddS )zAsosiy sahifar   r   r   zPOST /api/screenshot)r   r   docsendpointr*   r*   r*   r*   r+   root   s   ry   z/healthc                      s   ddt ddS )zSog'lik tekshiruvihealthyr   rQ   )statusservicer"   )r^   rj   r*   r*   r*   r+   health_check   s
   r}   )'asynciord   rh   r>   r6   r^   fastapir   r   r   fastapi.middleware.corsr   pydanticr   seleniumr   selenium.webdriver.common.byr   !selenium.webdriver.chrome.optionsr	   selenium.webdriver.support.uir
   selenium.webdriver.supportr   rV   appadd_middlewarerF   rT   r   r,   rA   r)   rG   postru   rS   ry   r}   r*   r*   r*   r+   <module>   sb    		#


a
	