Files
caption-local/scripts/browser_auth.py
T

41 lines
2.2 KiB
Python

"""Token-gated synthetic capture; secrets remain out of evidence and relay output."""
import json
import os
from pathlib import Path
from playwright.sync_api import sync_playwright
from browser_support import browser_options
root=Path(__file__).resolve().parents[1]
key=os.environ['CAPTION_API_KEY']
output=Path(os.environ.get('CAPTION_TEST_OUTPUT_DIR',str(root/'evidence')))
output.mkdir(parents=True,exist_ok=True)
with sync_playwright() as p:
browser=p.chromium.launch(**browser_options(),headless=True,args=[
'--use-fake-ui-for-media-stream','--use-fake-device-for-media-stream',
f'--use-file-for-fake-audio-capture={root/"samples/jfk.wav"}'])
context=browser.new_context(permissions=['microphone'])
context.route('**/*',lambda route: route.continue_() if route.request.url.startswith(
('http://127.0.0.1:','http://localhost:')) else route.abort())
context.route_web_socket('**/*',lambda socket: socket.close())
page=context.new_page()
page.goto(os.environ.get('CAPTION_TEST_URL','http://127.0.0.1:8772'))
page.locator('#auth').wait_for(state='visible')
assert page.locator('#start').is_disabled()
page.locator('#accessToken').fill('incorrect-test-token')
page.get_by_role('button',name='Connect to service').click()
page.wait_for_timeout(500)
assert page.locator('#auth').is_visible() and page.locator('#start').is_disabled()
page.locator('#accessToken').fill(key)
page.get_by_role('button',name='Connect to service').click()
page.locator('#auth').wait_for(state='hidden')
page.locator('#start').click()
page.wait_for_function('() => transcript.length>0',timeout=45000)
page.locator('#stop').click()
page.wait_for_function('() => !processing && !stopping',timeout=45000)
assert page.evaluate('() => !failed && !pending && localStorage.length===0 && sessionStorage.length===0')
assert page.locator('#accessToken').input_value()==''
(output/'browser-auth.json').write_text(json.dumps({'unauthenticated_blocked':True,'wrong_token_blocked':True,
'authenticated_capture_drained':True,'token_not_persisted':True}),encoding='utf-8')
browser.close()
print('Token-gated browser capture passed')