Fix catch-all route, SSE auth via query token, and live progress SSE connections
This commit is contained in:
@@ -9,7 +9,13 @@ export function basicAuth(req: Request, res: Response, next: NextFunction): void
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const authHeader = req.headers.authorization;
|
// Support token via query param for SSE (EventSource doesn't support custom headers)
|
||||||
|
let authHeader = req.headers.authorization;
|
||||||
|
if (!authHeader && req.query.token) {
|
||||||
|
const token = Array.isArray(req.query.token) ? req.query.token[0] : req.query.token;
|
||||||
|
authHeader = `Basic ${token}`;
|
||||||
|
}
|
||||||
|
|
||||||
if (!authHeader || !authHeader.startsWith('Basic ')) {
|
if (!authHeader || !authHeader.startsWith('Basic ')) {
|
||||||
res.setHeader('WWW-Authenticate', 'Basic realm="Audio Description Server"');
|
res.setHeader('WWW-Authenticate', 'Basic realm="Audio Description Server"');
|
||||||
res.status(401).json({ error: 'Authentication required' });
|
res.status(401).json({ error: 'Authentication required' });
|
||||||
|
|||||||
@@ -220,6 +220,11 @@ async function loadJobs() {
|
|||||||
try {
|
try {
|
||||||
const data = await apiJson('GET', '/api/jobs');
|
const data = await apiJson('GET', '/api/jobs');
|
||||||
renderJobs(data.jobs);
|
renderJobs(data.jobs);
|
||||||
|
data.jobs.forEach(j => {
|
||||||
|
if (j.status === 'processing' || j.status === 'queued') {
|
||||||
|
connectSSE(j.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}
|
}
|
||||||
@@ -432,7 +437,7 @@ async function loadConfigDefaults() {
|
|||||||
const sseConnections = {};
|
const sseConnections = {};
|
||||||
function connectSSE(jobId) {
|
function connectSSE(jobId) {
|
||||||
if (sseConnections[jobId]) return;
|
if (sseConnections[jobId]) return;
|
||||||
const source = new EventSource(`/api/jobs/${jobId}/progress`);
|
const source = new EventSource(`/api/jobs/${jobId}/progress?token=${encodeURIComponent(authToken)}`);
|
||||||
source.onmessage = (event) => {
|
source.onmessage = (event) => {
|
||||||
const data = JSON.parse(event.data);
|
const data = JSON.parse(event.data);
|
||||||
updateJobCard(jobId, data);
|
updateJobCard(jobId, data);
|
||||||
|
|||||||
Reference in New Issue
Block a user