icons still
This commit is contained in:
@@ -16,6 +16,7 @@ const applicationRoutes = require('./routes/applications');
|
||||
const spreaderSettingsRoutes = require('./routes/spreaderSettings');
|
||||
const productSpreaderSettingsRoutes = require('./routes/productSpreaderSettings');
|
||||
const weatherRoutes = require('./routes/weather');
|
||||
const weatherPublicRoutes = require('./routes/weatherPublic');
|
||||
const adminRoutes = require('./routes/admin');
|
||||
|
||||
const { errorHandler } = require('./middleware/errorHandler');
|
||||
@@ -90,6 +91,8 @@ app.get('/health', (req, res) => {
|
||||
});
|
||||
|
||||
// Routes
|
||||
// Public icon proxy must be mounted before protected weather routes
|
||||
app.use('/api/weather/icon', weatherPublicRoutes);
|
||||
app.use('/api/auth', authLimiter, authRoutes);
|
||||
app.use('/api/users', authenticateToken, userRoutes);
|
||||
app.use('/api/properties', authenticateToken, propertyRoutes);
|
||||
|
||||
26
backend/src/routes/weatherPublic.js
Normal file
26
backend/src/routes/weatherPublic.js
Normal file
@@ -0,0 +1,26 @@
|
||||
const express = require('express');
|
||||
const axios = require('axios');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
// Public icon proxy so <img> tags don't need auth headers
|
||||
// GET /api/weather/icon/:code?size=2x
|
||||
router.get('/:code', async (req, res) => {
|
||||
try {
|
||||
const { code } = req.params;
|
||||
const size = req.query.size === '2x' ? '@2x' : '';
|
||||
if (!code || !/^[0-9]{2}[dn]$/.test(code)) {
|
||||
return res.status(400).send('invalid icon code');
|
||||
}
|
||||
const url = `https://openweathermap.org/img/wn/${code}${size}.png`;
|
||||
const resp = await axios.get(url, { responseType: 'arraybuffer', timeout: 5000 });
|
||||
res.set('Content-Type', 'image/png');
|
||||
res.set('Cache-Control', 'public, max-age=21600'); // 6h
|
||||
return res.status(200).send(Buffer.from(resp.data));
|
||||
} catch (e) {
|
||||
return res.status(502).send('icon fetch failed');
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
Reference in New Issue
Block a user