
    |*&i                         S SK r S SKJr  S SKJr  S SKJr  S SKrS SK	J
r
Jr  S SKJr  S SKJr  S SKJrJr   " S	 S
\5      rg)    N)BeautifulSoup)List)parser)ThreadPoolExecutoras_completed)Vulnerability)Source)VulnerabilityFactoryDEFAULT_VALUESc                   z    \ rS rSrS rSS\\   S\\   4S jjrS r	\
S\S\4S j5       r\
S	\S\4S
 j5       rSrg)RAPID7   c                 z    SU l         U R                    S3U l        [        R                  " 5       U l        Xl        g )Nzhttps://www.rapid7.comz/db/)base_url
search_urlhttpxClientsessionconfig)selfr   s     3/home/kali/cveseeker/services/api/sources/rapid7.py__init__RAPID7.__init__   s-    0!]]O40||~    keywordsreturnc                 ~   / nU(       d  SnSR                  U5      nSnSnXb:  Gak  U R                   SU SU 3nU R                  R                  U5      nUR                  S:w  a  GO*[        UR                  S5      n	U	R                  S	S
S9n
U
(       d  OU
R                  SSS9nU(       d  O[        SS9 n/ nU H7  nXb:  a    O1UR                  U R                  U5      nUR                  U5        M9     [        U5       H9  nUR                  5       nU(       d  M  UR                  U5        US-  nXb:  d  M9    O   S S S 5        U	R                  SSS9nU(       a  UR                  S[        US-   5      S9OS nU(       a  US-  nOOXb:  a  GMk  U R                  R!                  5         U$ ! , (       d  f       Nu= f)Nd   +   r   z?q=z&type=nexpose&page=   html.parsersectionvulndb__resultsclass_azvulndb__result resultblock
   )max_workersul
pagination)text)joinr   r   getstatus_coder   r,   findfind_allr   submitprocess_vulnerability_linkappendr   resultstrclose)r   r   max_resultsvulnerabilitiessearch_querypageresults_counturlresponsesoupresults_sectionresult_linksexecutorfuturesresult_linkfuturer5   r+   	next_pages                      r   searchRAPID7.search   s   Kxx))__%S6I$PC||'',H##s* >D"ii	:KiLO"*33C@\3]L#3x#/K$3%__T-L-LkZFNN6* $0 +73F#]]_Fv'..v6%*(7! 4 4" 4=JDN
#dQh-@TXI	O )R 	3 43s   7A#F.F.;F..
F<c                     UR                  SSS9R                  R                  5       nUS   nU R                   U 3nU R	                  U5      nU(       d  g UR                  SSS9R                  R                  5       n[
        S   n[
        S   nSU;   aY  UR                  S5      S	   R                  S
5      S   R                  5       n	[        R                  " U	5      R                  S5      nSU;   a.  UR                  S5      S	   R                  5       n
 [        U
5      nU R                  U5      nU R                  R                  U5      nUR                  S:w  a  g [!        UR                  S5      nUR                  SSS9nSnU(       a)  UR#                  S5      nSR%                  S U 5       5      nUR                  SSS9n/ nU(       a;  UR#                  S5      nU Vs/ s H  nUR                  R                  5       PM     nnUR                  SSS9n['        5       nU(       a%  UR#                  SSS9nU Vs1 s H  nUS   iM
     nn[(        R*                  " UU R,                  R.                  UUU[1        U5      [3        U5      UUU/ S9nU$ ! [         a     GNf = fs  snf s  snf ! [4         a
  n S nAg S nAff = f)Ndivzresultblock__info-titler%   hrefzresultblock__info-metadate
base_scorez
Published:r    |r   z%Y-%m-%dz	Severity:r!   r"   z$vulndb__detail-content bottom-border p c              3      #    U  H?  oR                   R                  5       (       d  M#  UR                   R                  5       v   MA     g 7f)N)r,   strip).0rP   s     r   	<genexpr>4RAPID7.process_vulnerability_link.<locals>.<genexpr>n   s/     &h?U!Y_Y_YeYeYg~qvv||~~?Us
   "A	!A	r#   z vulndb__references bottom-borderlizvulndb__related-contentr'   T)rK   )idsourcer=   rL   titlereference_urlsrM   base_severitydescriptionvulnerable_components
weaknesses)r0   r,   rS   r   extract_cve_id_from_titler   splitdateutil_parserparsestrftimefloat
ValueErrorcalculate_severity_from_scorer   r.   r/   r   r1   r-   setr
   make	__class____name__listr6   	Exception)r   rD   rZ   rK   
detail_urlcve_id	meta_infopublished_daterM   	date_part
score_partr\   detail_responsedetail_soupdescription_divr]   description_paragraphscomponents_sectionr^   components_listrW   references_divr[   reference_linkslinkvulnerabilityes                              r   r3   !RAPID7.process_vulnerability_linkI   s   B	$$U3L$MRRXXZEv&D MM?4&1J33E:F#((7O(PUU[[]I+F3N'5Jy(%OOL9!<BB3GJPPR	!0!6!6y!A!J!J:!Vi'&__[9!<BBD
!&z!2J !>>zJM"ll..z:O**c1'(<(<mLK)..u=c.dOK)8)A)A#)F&!hh&h?U&hh!,!1!1)Df!1!g$&!!"4"="=d"CCR(S?R?%(S(--e<U-VN UN"0"9"9#D"9"I;J!K?4$v,?!K055~~..##N3z?+'&;M ! W " * )T "L"  		s]   AJ5 CJ5 J %<J5 "BJ5 ($J+7J5 J0AJ5 
J($J5 'J((J5 5
K	K	rZ   c                     [         R                  " SU [         R                  5      nU(       a  UR                  S5      $ S $ )NzCVE-\d{4}-\d{4,7}r   )rerG   
IGNORECASEgroup)rZ   matchs     r   r`    RAPID7.extract_cve_id_from_title   s.    		.r}}E!&u{{1~0D0r   scorec                 .    U S:  a  gU S:  a  gU S:  a  gg)Ng      "@Criticalg      @Highg      @MediumLow )r   s    r   rg   $RAPID7.calculate_severity_from_score   s#    C<c\c\r   )r   r   r   r   N)r   )rk   
__module____qualname____firstlineno__r   r   r6   r   rG   r3   staticmethodr`   re   rg   __static_attributes__r   r   r   r   r      so    3tCy 3d=>Q 3jCJ 1 1 1 1 U s  r   r   )r   bs4r   typingr   dateutilr   rb   r   concurrent.futuresr   r   models.vulnerabilityr   services.api.sourcer	   8services.vulnerabilities.factories.vulnerability_factoryr
   r   r   r   r   r   <module>r      s.       . 	 ? . & iOV Or   