import requests,json,re
from bs4 import BeautifulSoup
html=open('work/scratch/liferay-critical/docs-84-index.html').read(); s=BeautifulSoup(html,'html.parser')
items=[]
for p in s.find_all('p'):
 t=' '.join(p.get_text(' ',strip=True).split())
 m=re.search(r'Group:\s*(\S+)\s+Name:\s*(\S+)\s+Version:\s*(\S+)',t)
 if m:items.append({'group':m.group(1),'name':m.group(2),'version':m.group(3)})
print('parsed',len(items))
queries=[{'package':{'ecosystem':'Maven','name':x['group']+':'+x['name']},'version':x['version']} for x in items]
r=requests.post('https://api.osv.dev/v1/querybatch',json={'queries':queries},timeout=120)
print('osv',r.status_code,len(r.content))
res=r.json()['results']; out=[]
for item,result in zip(items,res):
 for v in result.get('vulns',[]):
  out.append({**item,'id':v.get('id'),'aliases':v.get('aliases',[]),'summary':v.get('summary',''),'details':v.get('details',''),'severity':v.get('severity',[]),'published':v.get('published'),'modified':v.get('modified'),'database_specific':v.get('database_specific',{})})
open('work/scratch/liferay-critical/osv-airlock84.json','w').write(json.dumps(out,ensure_ascii=False,indent=2))
print('vulns',len(out),'packages',len({(x['group'],x['name']) for x in out}))
for x in out:
 text=(x['summary']+' '+x['details']).lower()
 if any(k in text for k in ['remote code','code execution','deserial','expression language','template injection','jndi','arbitrary command','command execution','file upload','path traversal','xml external','ssrf','server-side request']):
  print('\n',x['group']+':'+x['name'],x['version'],x['id'],x['aliases'],x['published'])
  print(x['summary'])
  print(x['details'][:700].replace('\n',' '))
