Files
SignageHTML/server/routes/config.js
kyle 392a50b535 Refactor: Complete codebase reorganization and modernization
- Split server.js routes into modular files (server/routes/)
  - departures.js: Departure data endpoints
  - sites.js: Site search and nearby sites
  - config.js: Configuration endpoints

- Reorganized file structure following Node.js best practices:
  - Moved sites-config.json to config/sites.json
  - Moved API_RESPONSE_DOCUMENTATION.md to docs/
  - Moved raspberry-pi-setup.sh to scripts/
  - Archived legacy files to archive/ directory

- Updated all code references to new file locations
- Added archive/ to .gitignore to exclude legacy files from repo
- Updated README.md with new structure and organization
- All functionality tested and working correctly

Version: 1.2.0
2026-01-01 10:52:21 +01:00

79 lines
2.4 KiB
JavaScript

/**
* Config route handler
* Handles configuration get/update and client-side config
*/
const fs = require('fs');
const path = require('path');
/**
* Handle GET /api/config endpoint
* @param {http.IncomingMessage} req - HTTP request object
* @param {http.ServerResponse} res - HTTP response object
* @param {Object} config - Application configuration
*/
function handleGetConfig(req, res, config) {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(config));
}
/**
* Handle POST /api/config/update endpoint
* @param {http.IncomingMessage} req - HTTP request object
* @param {http.ServerResponse} res - HTTP response object
* @param {Object} config - Application configuration (will be modified)
*/
function handleUpdateConfig(req, res, config) {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
try {
const newConfig = JSON.parse(body);
if (newConfig.sites) {
// Update config object (passed by reference)
Object.assign(config, newConfig);
// Save to file
const configPath = path.join('config', 'sites.json');
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ success: true, message: 'Configuration updated' }));
} else {
throw new Error('Invalid configuration format');
}
} catch (error) {
console.error('Error updating configuration:', error);
res.writeHead(400, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: error.message }));
}
});
}
/**
* Handle GET /api/config/client endpoint
* Returns client-side configuration (API keys, default location)
* @param {http.IncomingMessage} req - HTTP request object
* @param {http.ServerResponse} res - HTTP response object
*/
function handleClientConfig(req, res) {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
openweathermapApiKey: process.env.OPENWEATHERMAP_API_KEY || '',
defaultLocation: {
latitude: parseFloat(process.env.DEFAULT_LATITUDE) || 59.3293,
longitude: parseFloat(process.env.DEFAULT_LONGITUDE) || 18.0686,
name: process.env.DEFAULT_LOCATION_NAME || 'Stockholm'
}
}));
}
module.exports = {
handleGetConfig,
handleUpdateConfig,
handleClientConfig
};