61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
const express = require('express');
|
|
const { authenticateToken } = require('../middleware/auth');
|
|
|
|
const router = express.Router();
|
|
|
|
const VOTE_APP_URL = process.env.VOTE_APP_URL;
|
|
const VOTE_APP_API_KEY = process.env.VOTE_APP_API_KEY;
|
|
|
|
router.get('/:sessionId', authenticateToken, async (req, res) => {
|
|
const { sessionId } = req.params;
|
|
if (!VOTE_APP_URL) {
|
|
return res.status(503).json({ error: 'Vote app not configured' });
|
|
}
|
|
|
|
try {
|
|
const upstream = await fetch(`${VOTE_APP_URL}/stickerwalls/${sessionId}.png`);
|
|
if (!upstream.ok) {
|
|
return res.status(upstream.status).end();
|
|
}
|
|
res.set('Content-Type', 'image/png');
|
|
const cacheControl = upstream.headers.get('cache-control');
|
|
if (cacheControl) {
|
|
res.set('Cache-Control', cacheControl);
|
|
}
|
|
const buffer = Buffer.from(await upstream.arrayBuffer());
|
|
res.send(buffer);
|
|
} catch (err) {
|
|
console.error('Sticker wall GET proxy error:', err.message);
|
|
res.status(502).json({ error: 'Failed to fetch sticker wall' });
|
|
}
|
|
});
|
|
|
|
router.post('/:sessionId/render', authenticateToken, async (req, res) => {
|
|
const { sessionId } = req.params;
|
|
if (!VOTE_APP_URL || !VOTE_APP_API_KEY) {
|
|
return res.status(503).json({ error: 'Vote app not configured' });
|
|
}
|
|
|
|
try {
|
|
const upstream = await fetch(`${VOTE_APP_URL}/api/stickerwalls/${sessionId}/render`, {
|
|
method: 'POST',
|
|
headers: { 'X-API-Key': VOTE_APP_API_KEY },
|
|
});
|
|
if (!upstream.ok) {
|
|
return res.status(upstream.status).end();
|
|
}
|
|
res.set('Content-Type', 'image/png');
|
|
const rendered = upstream.headers.get('x-sticker-wall-rendered');
|
|
if (rendered) {
|
|
res.set('X-Sticker-Wall-Rendered', rendered);
|
|
}
|
|
const buffer = Buffer.from(await upstream.arrayBuffer());
|
|
res.send(buffer);
|
|
} catch (err) {
|
|
console.error('Sticker wall render proxy error:', err.message);
|
|
res.status(502).json({ error: 'Failed to render sticker wall' });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|