69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
const express = require('express')
|
|
const fs = require('fs/promises')
|
|
const path = require('path')
|
|
const yaml = require('js-yaml')
|
|
const cors = require('cors')
|
|
const bodyParser = require('body-parser')
|
|
|
|
const app = express()
|
|
const PORT = process.env.CONFIG_PORT || 3012
|
|
|
|
// CORS configuration
|
|
app.use(cors({
|
|
origin: ['https://start.kent.pw', 'https://auth.kent.pw'],
|
|
credentials: true,
|
|
methods: ['GET', 'POST', 'OPTIONS'],
|
|
allowedHeaders: [
|
|
'Content-Type',
|
|
'Authorization',
|
|
'Remote-User',
|
|
'Remote-Name',
|
|
'Remote-Email',
|
|
'Remote-Groups',
|
|
'X-Requested-With'
|
|
],
|
|
exposedHeaders: ['Set-Cookie']
|
|
}))
|
|
|
|
// Options preflight
|
|
app.options('/api/config/update', cors())
|
|
|
|
// Raw body parser for YAML
|
|
app.use(bodyParser.text({ type: 'text/yaml' }))
|
|
|
|
// Authentication middleware
|
|
const requireAuth = (req, res, next) => {
|
|
const user = req.headers['remote-user']
|
|
if (!user) {
|
|
return res.status(401).json({ error: 'Unauthorized' })
|
|
}
|
|
next()
|
|
}
|
|
|
|
app.post('/api/config/update', requireAuth, async (req, res) => {
|
|
try {
|
|
// Get the raw YAML content from the request body
|
|
const yamlContent = req.body
|
|
|
|
// Validate the YAML by trying to parse it
|
|
yaml.load(yamlContent)
|
|
|
|
// Write to the config file
|
|
const configPath = path.join('/var/www/html/homepage/public', 'config.yaml')
|
|
await fs.writeFile(configPath, yamlContent, 'utf8')
|
|
|
|
res.status(200).json({ message: 'Configuration updated successfully' })
|
|
} catch (error) {
|
|
console.error('Error updating configuration:', error)
|
|
res.status(500).json({ error: 'Failed to update configuration: ' + error.message })
|
|
}
|
|
})
|
|
|
|
// Health check endpoint
|
|
app.get('/health', (req, res) => {
|
|
res.status(200).json({ status: 'ok' })
|
|
})
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`Config server listening on port ${PORT}`)
|
|
})
|