import os, json, urllib.request, urllib.parse, ssl
from pathlib import Path
vals={}
for line in Path('/opt/openclaw/ops/.env.nextcloud-bot').read_text().splitlines():
    s=line.strip()
    if not s or s.startswith('#') or '=' not in s: continue
    k,v=s.split('=',1); vals[k]=v.strip().strip('"').strip("'")
base=vals['INFISICAL_URL'].rstrip('/')
project=vals['INFISICAL_PROJECT_ID']
client_id=vals['INFISICAL_CLIENT_ID']
client_secret=vals['INFISICAL_CLIENT_SECRET']

def req(method,path,body=None,token=None):
    data=None
    headers={'Content-Type':'application/json'}
    if body is not None: data=json.dumps(body).encode()
    if token: headers['Authorization']='Bearer '+token
    r=urllib.request.Request(base+path, data=data, headers=headers, method=method)
    try:
        with urllib.request.urlopen(r, timeout=20) as resp:
            return resp.status, json.loads(resp.read().decode() or '{}')
    except urllib.error.HTTPError as e:
        txt=e.read().decode(errors='replace')[:500]
        try: data=json.loads(txt)
        except Exception: data={'raw':txt}
        return e.code,data

print('base', base, 'project', project)
for body in [{'clientId':client_id,'clientSecret':client_secret},{'clientId':client_id,'clientSecret':client_secret,'type':'universal-auth'}]:
    st,res=req('POST','/api/v1/auth/universal-auth/login',body)
    print('login', st, {k:res.get(k) for k in ['message','error','statusCode']})
    tok=res.get('accessToken') or (res.get('data') or {}).get('accessToken')
    if tok:
        print('login ok')
        for env in ['prod','production','dev']:
          for sp in ['/nextcloud-bot','/nextcloudbot','/bots/nextcloud-bot','/']:
            qs=urllib.parse.urlencode({'workspaceId':project,'environment':env,'secretPath':sp})
            st2,res2=req('GET','/api/v3/secrets/raw?'+qs,token=tok)
            keys=[]
            if isinstance(res2,dict):
                secs=res2.get('secrets') or res2.get('data') or []
                if isinstance(secs,dict): secs=secs.get('secrets') or []
                if isinstance(secs,list): keys=[x.get('secretKey') or x.get('key') or x.get('secretName') for x in secs if isinstance(x,dict)]
            print('secrets', env, sp, st2, 'keys', sorted([k for k in keys if k])[:20], 'err', res2.get('message') if isinstance(res2,dict) else None)
        raise SystemExit
print('no login')
