
    |*&i                         S SK r S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
  S SK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                   >    \ rS rSrS rS\\   S\\   4S jrS r	Sr
g)	GitHubAdvisoryAPI   c                 R    SU l         [        R                  " 5       U l        Xl        g )Nzhttps://github.com/advisories)urlhttpxClientsessionconfig)selfr   s     >/home/kali/cveseeker/services/api/sources/github_advisories.py__init__GitHubAdvisoryAPI.__init__   s    2||~    keywordsreturnc                 b   / nU(       d  SnSR                  U5      nSnSnXb:  Ga]  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  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SS9OS nU(       a  SUR                  S/ 5      ;  a  US-  nOOXb:  a  GM]  U R                  R                  5         U$ ! , (       d  f       N= f)Ni  +   r   z?query=z&page=   html.parserdivz2Box-row Box-row--focus-gray p-0 js-navigation-itemclass_
   )max_workerszpaginate-containera	next_pagedisabledclass)joinr   r   getstatus_coder   textfind_allr   submitprocess_advisory_elementappendr   resultfindclose)r   r   max_resultsvulnerabilitiessearch_querypageresults_countr   responsesoupadvisory_elementsexecutorfutureselementfuturer2   
paginationr'   s                     r   searchGitHubAdvisoryAPI.search   s   Kxx))XXJgl^6$@C||'',H##s* >D $e<p q$#3x0G$3%__T-J-JGTFNN6*  1 +73F#]]_Fv'..v6%*(7! 4 4" 51EFJDN
K@TXIZy}}Wb/II	I )L 	7 43s   A#F F #F  
F.c                 	    UR                  SSS9nU(       d  g UR                  R                  5       nUS   nSU 3nUR                  S5      R                  S5      S   nUR                  SS	S9nU(       a  UR                  R                  5       O[        S
   nUR                  SSS9n	U	(       a  U	R                  R                  5       OS n
UR                  SSS9nS nU(       aT  UR                  SSS9nSU;   a>  UR                  S5      S   nUR                  S5      S   R                  5       nUS:X  a  S nUR                  S5      nU(       a=  SUR                  ;   a-  US   n[        R                  " U5      nUR                  S5      nO	[        S   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U(       aw  UR                  SSS9nSR                  UR                  5       5      n[        R                   " S[        R"                  5      nUR                  U5      S   R                  5       nOUn[%        5       nUR'                  U5        U(       a  UR                  S[        R                   " S[        R"                  5      S9nU(       aG  UR)                  S S/5      nU(       a-  UR+                  SSS!9nU H  nUR'                  US   5        M     [-        U5      nU
(       d[  UR                  SS"S9nU(       a;  UR)                  SS#S9nU(       a  UR                  R                  5       O[        S$   n
O	[        S$   n
U
(       a  U
[        S$   :w  a  U
OUn [        S%   n!UR                  SS&S9n"U"(       aI  U"R/                  S5      n#U#(       a1  U#R                  SS'S9n$U$(       a  U$R                  R                  5       n!/ n%UR                  SS(S9n&U&(       a]  U&R/                  SS)S05      n'U'(       aB  U'R+                  SS	S9n(U( H,  n)U%R1                  U)R                  R                  5       5        M.     / n*U(       a  U[        S*   :w  a  U*R1                  U5        [2        R4                  " U U R6                  R8                  UUUU!UUU*U%S+9
n+U+$ ! [:         a
  n, S n,A,g S n,A,ff = f),Nr&   zLink--primaryr"   hrefzhttps://github.com/spanLabelbase_severityz	text-boldr!   zmt-1 T)	separatorstripfor(r    zrelative-timedatetimez%Y-%m-%ddater   r    zmarkdown-body comment-body p-0z(References.*)h3
References)r-   ul)rE   zCVE IDzcolor-fg-mutedid
base_scoreSeverityzButton-label
Weaknessesz	data-pjaxvulnerable_components)
rV   sourcer   rR   reference_urlsrW   rJ   descriptionrZ   
weaknesses)r3   r-   rM   splitr   get_textattrsdateutil_parserparsestrftimer   r+   r,   r   r*   recompile
IGNORECASEsetaddfind_next_siblingr.   list	find_nextr1   r
   make	__class____name__	Exception)-r   r?   	title_tagtitleadvisory_hrefadvisory_urladvisory_idseverity_spanrJ   cve_spancve_idmt1_divpackage_namemt1_textpackage_partrelative_time	date_textparsed_daterR   advisory_responseadvisory_soupdescription_divfull_descriptionreferences_patternr]   r\   references_headerreferences_listlinkslinkcve_section
cve_id_divvulnerability_id
cvss_scoreseverity_sectionseverity_container
score_spanr^   weaknesses_sectionweaknesses_divweakness_labelslabelrZ   vulnerabilityes-                                                r   r0   *GitHubAdvisoryAPI.process_advisory_elementF   s   o	SAINN((*E%f-M/?L'--c288=bAK#LLL@M:GM..446^\kMlM||F;|?H.6X]]((*DFll5l8GL"++c+FH$#+>>%#8#<L#/#5#5c#:1#=#C#C#EL#r)'+#LL9M}/B/B!B)*5	-33I>"++J7%f- $ 0 0 > ,,3)*;*@*@-PM+00?_0`O#2#;#;cQU#;#V #&88,<,B,B,D#E %'ZZ0A2==%Q"0667GHKQQS# UN|,$3$8$8BJJ|]_]j]jDk$8$l!$&7&I&I4QV-&XO& / 8 84 8 H$)D*..tF|< %*!.1N+00H0E!,!>!>uM]!>!^J8BZ__224W[H\F+D1F)/FnT>R4RvXc'5J,11$Z1H%5%?%?%F"%!3!8!8!8!WJ!%/__%:%:%<
J!.!3!3D|!3!L!!3!=!=ekSUEV!W!&4&=&=c'&=&RO!0"))%***:*:*<= "1 %'!?V0W W%,,\:055#~~.. -%+'&;%M !  		s   S F*S LS 
S S )r   r   r   N)ro   
__module____qualname____firstlineno__r   r   strr   rB   r0   __static_attributes__ r   r   r   r      s*    
2tCy 2$}:M 2hpr   r   )r   bs4r   typingr   dateutilr   rb   concurrent.futuresr   r   re   models.vulnerabilityr   services.api.sourcer	   8services.vulnerabilities.factories.vulnerability_factoryr
   r   r   r   r   r   <module>r      s.       . ? 	 . & ij jr   