import base64, hashlib, hmac, subprocess, time
from pathlib import Path
secret=Path('/srv/apps/sotlab-users/data/session_secret').read_bytes()
def ck(username):
    ts=str(int(time.time()))
    payload=f'{username}:{ts}'
    sig=hmac.new(secret, payload.encode(), hashlib.sha256).hexdigest()
    return base64.urlsafe_b64encode(f'{payload}:{sig}'.encode()).decode()
cookie=ck('sotgee')
jar='/tmp/music_cookiejar.txt'
Path(jar).unlink(missing_ok=True)
for label, cmd, hp, bp in [
    ('login_seed', ['curl','-sS','-D','/tmp/h1','-o','/tmp/b1','--max-time','20','-c',jar,'-b',jar,'-H',f'Cookie: sotlab_session={cookie}','https://music.sotlab.co.uk/login.php'], '/tmp/h1', '/tmp/b1'),
    ('index_after', ['curl','-sS','-D','/tmp/h2','-o','/tmp/b2','--max-time','20','-c',jar,'-b',jar,'-H',f'Cookie: sotlab_session={cookie}','https://music.sotlab.co.uk/index.php'], '/tmp/h2', '/tmp/b2'),
]:
    r=subprocess.run(cmd,capture_output=True,text=True)
    head=Path(hp).read_text(errors='replace') if Path(hp).exists() else ''
    body=Path(bp).read_text(errors='replace')[:5000] if Path(bp).exists() else ''
    print('TEST', label, 'exit', r.returncode)
    print('HEAD', ' | '.join(head.splitlines()[:16]))
    print('MARKERS', {m:(m in body or m in head) for m in ['Incorrect username or password','Ampache','Logout','sotgee','Browse','Dashboard','Music','login.php']})
    print('BODY_SNIP', body[:300].replace('\n',' '))
r=subprocess.run(['curl','-sS','-D','/tmp/hu','-o','/tmp/bu','--max-time','15','https://music.sotlab.co.uk/login.php'],capture_output=True,text=True)
uh=Path('/tmp/hu').read_text(errors='replace') if Path('/tmp/hu').exists() else ''
ub=Path('/tmp/bu').read_text(errors='replace')[:1200] if Path('/tmp/bu').exists() else ''
print('TEST unauth exit', r.returncode)
print('UNAUTH_HEAD', ' | '.join(uh.splitlines()[:10]))
print('UNAUTH_MARKERS', {m:(m in ub or m in uh) for m in ['HTTP/2 401','Sot Lab Music','Please sign in','Ampache']})
