#!/usr/bin/env python3
from pathlib import Path
from datetime import datetime
p=Path('/srv/apps/sotlab-users/sotlab_users_app.py')
s=p.read_text()
bak=p.with_name(p.name + '.bak.ampache-http-auth.' + datetime.now().strftime('%Y%m%d%H%M%S'))
bak.write_text(s)

s=s.replace('    def proxy_to_local(self, upstream, body_override=None):\n', '    def proxy_to_local(self, upstream, body_override=None, remote_user=None):\n')
old="""        for k, v in self.headers.items():
            if k.lower() in HOP_BY_HOP_HEADERS or k.lower() == 'content-length':
                continue
            headers[k] = v
        headers['Host'] = public_host
"""
new="""        trusted_auth_headers = {'remote-user', 'x-remote-user', 'x-forwarded-user', 'x-auth-request-user'}
        for k, v in self.headers.items():
            lk = k.lower()
            if lk in HOP_BY_HOP_HEADERS or lk == 'content-length' or lk in trusted_auth_headers:
                continue
            headers[k] = v
        if remote_user:
            headers['Remote-User'] = remote_user
            headers['X-Forwarded-User'] = remote_user
        headers['Host'] = public_host
"""
if old not in s:
    raise SystemExit('proxy header block not found')
s=s.replace(old,new)
s=s.replace('            return self.proxy_to_local(root)\n', '            return self.proxy_to_local(root, remote_user=username)\n')
s=s.replace('                self.proxy_to_local(root, raw_bytes); return\n', '                self.proxy_to_local(root, raw_bytes, username); return\n')
p.write_text(s)
print(f'backup={bak}')
