o
    h,                     @   s  d 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Zddlm	Z	m
Z
mZ ddlmZ dZh dZejedd ejd	dd d
dddddadd ZdddZdd Zdd ZedkrddlmZ eeZde_ee ed ed ejdddd dS dS ) zH
TAS License Checker - Simple Web UI
Upload file and solve CAPTCHA only
    N)render_templaterequestjsonify)secure_filenameuploads>   csvxlsxlsxT)exist_ok	templatesFidleReady to process filesis_processingstatusmessageprogresscaptcha_urlc                 C   s    d| v o|  ddd  tv S )z"Check if file extension is allowed.   )rsplitlowerALLOWED_EXTENSIONS)filename r   '/var/www/html/captchaScrapper/web_ui.pyallowed_file!   s    r    c                 C   s  zzdt d< dt d< d|  dt d< dtt  }d	| d
}|dkr,d}n |dkr3d}n|dkr:d}n|dkrAd}n|dkrHd}nd}d}tdtj d| d|  d| d| 
 tj	tj	tj
t}tjtj|| |||||g|d}	|	 du rzOtj|rt|d:}
t|
}|ddt d< |d|  dt d< d|v r|d t d< d|v r|d t d< dt d< W d   n1 sw   Y  W n ty } ztd|  W Y d}~nd}~ww td |	 du s|	 }td |  |d!krEd"t d< |  d#t d< ztj| r)t|  td$|   W n) tyD } ztd%|  W Y d}~nd}~ww d&t d< |  d'| t d< ztj|rht| td(|  W n ty } ztd)|  W Y d}~nd}~ww W nT ty } zGd&t d< |  d*t| t d< ztj| rt|  td+|   W n ty } ztd,|  W Y d}~nd}~ww W Y d}~nd}~ww W d-t d< dS W d-t d< dS d-t d< w ).z0Run the appropriate scraper script based on typeTr   
processingr   z	Starting z data processing...r   job_status_z.jsontaszcaptchaScrapper/tas_web.pynswzcaptchaScrapper/nsw_web.pyqldzcaptchaScrapper/qld_web.pyviczcaptchaScrapper/vic_web.pyactzcaptchaScrapper/act_web.pyz	Running:  )cwdNr processing...r   r   z8CAPTCHA detected! Please solve it in the browser window.zError reading status file:    z$Process completed with return code: r   	completedz# processing completed successfully!Cleaned up uploaded file: z!Error cleaning up uploaded file: errorz% processing failed with return code: Cleaned up status file: zError cleaning up status file: z processing failed: z&Cleaned up uploaded file after error: z-Error cleaning up uploaded file after error: F)processing_statusupperinttimeprintsys
executableospathdirnameabspath__file__
subprocessPopenpollexistsopenjsonloadget	Exceptionsleepwaitremovestr)	file_pathscraper_typeuserId
entityTypeuserRolejob_idstatus_filescript_nameproject_rootprocessfstatus_dataereturn_codecleanup_errorr   r   r   run_scraper_script%   s   (
	




 rW   c                 C   s
   t | dS )zBRun the tas_web.py script with the uploaded file (legacy function)r!   )rW   )rH   r   r   r   run_tas_script   s   
rX   c                 C   s   |  ddd }| j ddgddd }|  d	d
d }|  ddd }|  ddd }|  ddd }| j ddgddd }dS )z.Register web UI routes with the main Flask appz/scraperc                   S   s   t dS )z+Main page - File data upload and processingzupload.html)r   r   r   r   r   index      z%register_web_ui_routes.<locals>.indexz/uploadPOST)methodsc            	   
   S   s  t d rtddidfS dtjvrtddidfS tjdd } tjd	d
}tjdd
}tjdd
}td| td| td| tjd }|jd
krXtddidfS t	|jsetddidfS z?t
|j}tjt|}|| ddd|   dda tjt|| |||fd}d|_|  tdd|   d| dW S  ty } ztddt| idfW  Y d}~S d}~ww )z)Handle file upload with scraper selectionr   r-   z'Already processing a file. Please wait.  filezNo file uploadedstater!   rJ   r   rK   rL   zUserId:zEntity Type:z
User Role:zNo file selectedz4Invalid file type. Please upload CSV or Excel files.Tuploadedz%File uploaded successfully. Starting r)   )r   r   r   )targetargszFile uploaded successfully. z processing started.)successr   scraperzUpload failed:   N)r/   r   r   filesformrB   r   r3   r   r   r   r6   r7   joinUPLOAD_FOLDERsaver0   	threadingThreadrW   daemonstartrC   rG   )	rI   rJ   rK   rL   r^   r   rH   threadrT   r   r   r   upload_file   sH   









&z+register_web_ui_routes.<locals>.upload_filez/statusc                   S   s   t tS )zGet current processing status)r   r/   r   r   r   r   
get_status   rZ   z*register_web_ui_routes.<locals>.get_statusz/resetc                   S   s   dddddda tddd	S )
zReset processing statusFr   r   r   Nr   TzStatus resetrc   r   )r/   r   r   r   r   r   reset_status   s   z,register_web_ui_routes.<locals>.reset_statusz/cleanupc               
   S      z+t  d} d}| D ]}zt| |d7 }td|  W q
   Y q
td|dW S  tyF } ztdt|dW  Y d	}~S d	}~ww )
zClean up status filesstatus_*.jsonr   r   r.   Trc   cleaned_filesFrc   r-   Nglobr6   rF   r3   r   rC   rG   )status_filescleaned_countr^   rT   r   r   r   cleanup_status_files      

z4register_web_ui_routes.<locals>.cleanup_status_filesz/cleanup-uploadsc               
   S   rt   )
z$Clean up any leftover uploaded fileszuploads/*.csvr   r   r,   Trv   Frx   Nry   )upload_filesr|   r^   rT   r   r   r   cleanup_uploaded_files   r~   z6register_web_ui_routes.<locals>.cleanup_uploaded_filesz/captcha-solvedc               
   S   s  zct  d} | stddidfW S t| tjjd}t|d}t|}W d   n1 s.w   Y  d|d	< d
|d< d|d< t|d}tj	||dd W d   n1 sWw   Y  tdddW S  t
y } ztddt| idfW  Y d}~S d}~ww )zMark CAPTCHA as solved manuallyru   r-   zNo active processing foundr]   )keyr(   Nr   r   z(CAPTCHA solved, continuing processing...r   Fcaptcha_detectedwr*   )indentTzCAPTCHA marked as solvedrr   z"Failed to mark CAPTCHA as solved: re   )rz   r   maxr6   r7   getctimer?   r@   rA   dumprC   rG   )r{   latest_status_filerR   rS   rT   r   r   r   mark_captcha_solved   s&   
&z3register_web_ui_routes.<locals>.mark_captcha_solvedN)route)apprY   rp   rq   rs   r}   r   r   r   r   r   register_web_ui_routes   s   

6



r   __main__)Flasktas_license_checker_secretz&Starting TAS License Checker Web UI...z2Open your browser and go to: http://localhost:5000z0.0.0.0i  )debughostport)r   r   r   )__doc__r6   r4   r;   rk   r2   r@   rz   flaskr   r   r   werkzeug.utilsr   ri   r   makedirsr/   r   rW   rX   r   __name__r   r   
secret_keyr3   runr   r   r   r   <module>   sD    
d 