
    ݫGi"                         d Z ddlZddlmZ 	 ddlmZ d Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zy# e$ r	 ddlmZ Y ,w xY w)z-
Database utilities for Link Checker package
    N)RealDictCursor   )DatabaseErrorc                     	 t        j                  | d   | d   | d   | d         }| j                  dd      rd|_        |j	                  t
              }||fS # t        $ r}t        d	|       d
}~ww xY w)z
    Get database connection
    
    Args:
        config (dict): Database configuration
    
    Returns:
        tuple: (connection, cursor)
    hostuserpassworddbname)r   r   r	   r
   
autocommitT)cursor_factoryzFailed to connect to database: N)psycopg2connectgetr   cursorr   	Exceptionr   )configconcures       8/var/www/html/utilities/link_checker_package/database.pyget_connectionr      s    CJ'(#	
 ::lD)!CNjjj7Cx C=aSABBCs   AA 	A6#A11A6c           
         	 d}| j                  |       | j                         }|D ]  }|d   }d|z   }||v s|} n d}| j                  ||g       | j                         }| j                  s|i ddddS |d   }|j                  d	      |j                  d
      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      d}	|j                  d      }
d}|
rd|
v rd}||	||j                  d      |
dS # t        $ r}t        d|       d}~ww xY w)z
    Get website settings from database
    
    Args:
        cur: Database cursor
        display_link (str): Display link
    
    Returns:
        dict: Website settings
    zSELECT * FROM merge_websitessite_url.z2SELECT * FROM websites WHERE website_site_url = %sFN)display_linkwebsite_settings
cloudflareaverage_removal_timehosting_emailr   check_http_code
http_codescheck_stop_words	stopwordshomepage_redirectcheck_stop_words_on_pageuse_seleniumuse_playwright)r    r!   r"   r#   r$   r%   r&   r'   website_hosting_emailcloudflare.comTr   z Failed to get website settings: )executefetchallrowcountr   r   r   )r   r   sqlmergesmergewebsite_mergeawebsite_urlwebsiteswebsite_rowr   r   r   r   s                r   get_website_settingsr4   '   s   4D,C 	E!*-M.L|+,	 CC,(<<>|| ,$&#(,!%  qk*/@A%//,7 +0B C$5!,1D!E(38R(S'OON;)oo.>?	
 $(?@
->J ) 0$$/OO4J$K*
 	
  D>qcBCCDs#   6D1 =D1 7B9D1 1	E:EEc           
      @   	 d}| j                  ||g       | j                  si S | j                         }|d   d   }d}| j                  |t        |      g       | j                         }| j                  si S |d   }|j	                  d      |j	                  d      |j	                  d      |j	                  d      |j	                  d	      |j	                  d
      |j	                  d      |j	                  d      dS # t
        $ r}t        d|       d}~ww xY w)z
    Get content type settings for a project
    
    Args:
        cur: Database cursor
        project_id (int): Project ID
    
    Returns:
        dict: Content type settings
    z9SELECT * FROM project_content_types WHERE project_id = %sr   content_type_idz6SELECT * FROM content_types WHERE content_type_id = %sr    r!   r"   
stop_wordsr$   r%   r&   r'   )r    r!   r"   r7   r$   r%   r&   r'   z%Failed to get content type settings: N)r*   r,   r+   strr   r   r   )r   
project_idr-   rowsr6   rowsscontent_type_rowr   s           r   get_content_type_settingsr=   h   s%   IIC*&||I||~q'"34FC#o./0||I 8/334EF*..|< 0 4 45G H*..|<!1!5!56I!J(8(<(<=W(X,00@.223CD	
 		
  ICA3GHHIs$   "D AD 9BD 	D
DDc                 L   	 d}| j                  |       | j                         }g g g g d}|D ]T  }|d   }|d   }|j                  dd      }||v s$|dk(  r||   j                  ||d       A||   j                  |       V |S # t        $ r}t        d	|       d
}~ww xY w)z
    Get global deletion settings from database
    
    Args:
        cur: Database cursor
    
    Returns:
        dict: Global settings
    z:SELECT * FROM global_deletion_settings WHERE is_active = 1)	http_codestopwordredirect	skip_codecategory	key_valuer   r   rB   )coder   z(Failed to get global deletion settings: N)r*   r+   r   appendr   r   )	r   r-   r:   global_settingsrowrC   rD   r   r   s	            r   get_global_deletion_settingsrI      s    LJC||~ 	
  	@C:HK(Iq1J?*{*#H-44 )&06 
 $H-44Y?	@  LFqcJKKLs   AB 4B 	B#BB#c                     	 d}| j                  ||g       | j                         }| j                  dkD  r|d   S i S # t        $ r}t	        d|       d}~ww xY w)z
    Get project information
    
    Args:
        cur: Database cursor
        project_id (int): Project ID
    
    Returns:
        dict: Project information
    z,SELECT * FROM projects WHERE project_id = %sr   Failed to get project: Nr*   r+   r,   r   r   )r   r9   r-   r:   r   s        r   get_projectrM      sd    ;<C*&||~,,*tAw22 ;5aS9::;s   8= = 	AAAc                 D    	 y# t         $ r}t        d|       d}~ww xY w)z
    Get project title score

    Args:
        cur: Database cursor
        project_id (int): Project ID
    
    Returns:
        dict: Project information
    (   rK   N)r   r   )r   r   s     r   get_project_title_scorerP      s/    ;
  ;5aS9::;s   	c                     	 d}| j                  |       | j                         }| j                  dkD  r|d   d   S dS # t        $ r}t	        d|       d}~ww xY w)z|
    Get random user agent
    
    Args:
        cur: Database cursor
    
    Returns:
        str: User agent string
    zVSELECT * FROM user_agents WHERE "deviceCategory" = 'desktop' ORDER BY RANDOM() LIMIT 1r   	useragentNzFailed to get user agent: rL   )r   r-   agentsr   s       r   get_user_agentrT      se    >hC),)9vay%CtC >8<==>s   9> > 	AAAc                     	 d|z   dz   }| j                  |       | j                         }|S # t        $ r}t        d|       d}~ww xY w)z
    Get cookies for social media platforms
    
    Args:
        cur: Database cursor
        table (str): Cookie table name
    
    Returns:
        list: Cookie records
    zSELECT * FROM z LIMIT 1zFailed to get cookies: N)r*   r+   r   r   )r   tabler-   r:   r   s        r   get_cookiesrW      sU    ;&3C||~ ;5aS9::;s   *- 	A	AA	c                     	 ddl }d}d}| j                  ||g       | j                         }|d   d   }|j                  |      }|d   j	                  d      }|S # t
        $ r}t        d|       d}~ww xY w)	z
    Get deleted keywords for content checking
    
    Args:
        cur: Database cursor
    
    Returns:
        list: Deleted keywords
    r   N   z2SELECT * FROM user_groups WHERE user_group_id = %ssettings)keywords_detecting_remove_pirated_contentz
z Failed to get deleted keywords: )jsonr*   r+   loadssplitr   r   )	r   r\   user_group_idr-   r:   rZ   keywordsdeleted_keywordsr   s	            r   get_deleted_keywordsrb     s    DBC-)||~7:&::h'#$OPVVW]^ D>qcBCCDs   AA 	A8%A33A8c                 ,    | syd| j                         v S )z
    Check if website is cloudflare based on hosting email
    
    Args:
        hosting_email (str): Hosting email from database
    
    Returns:
        bool: True if cloudflare, False otherwise
    Fr)   )lower)r   s    r   is_cloudflare_websitere     s     }22444    )__doc__r   psycopg2.extrasr   
exceptionsr   ImportErrorr   r4   r=   rI   rM   rP   rT   rW   rb   re    rf   r   <module>rl      si     *))C2?DB'IR'LR;&;(>$;&D05g  )()s   3 A A