Files
t06-sigurnost/api/src/server.js

60 lines
1.7 KiB
JavaScript

require('dotenv').config();
const fs = require('fs');
const http = require('http');
const https = require('https');
const path = require('path');
const express = require('express');
const authRoutes = require('./routes/auth');
const profileRoutes = require('./routes/profile');
const ordersRoutes = require('./routes/orders');
const previewRoutes = require('./routes/preview');
const startAdminService = require('./admin-service');
const app = express();
app.use(express.json());
app.get('/api/public', (req, res) => {
res.json({ message: 'Javni endpoint radi.' });
});
app.get('/api/internal', (req, res) => {
const cert = req.socket.getPeerCertificate();
if (!req.client.authorized) {
return res.status(401).json({ error: 'Client certificate required' });
}
return res.json({ message: 'mTLS pristup odobren.', client: cert.subject });
});
app.use('/auth', authRoutes);
app.use('/api', profileRoutes);
app.use('/api', ordersRoutes);
app.use('/api', previewRoutes);
const useHttps = String(process.env.HTTPS || '').toLowerCase() === 'true';
if (useHttps) {
const certsDir = path.join(process.cwd(), 'certs');
const options = {
key: fs.readFileSync(path.join(certsDir, 'server.key')),
cert: fs.readFileSync(path.join(certsDir, 'server.crt')),
ca: fs.readFileSync(path.join(certsDir, 'ca.crt')),
requestCert: true,
rejectUnauthorized: false
};
https.createServer(options, app).listen(3443, () => {
console.log('API na https://localhost:3443');
});
} else {
http.createServer(app).listen(3000, () => {
console.log('API na http://localhost:3000');
});
}
if (process.env.START_ADMIN_SERVICE !== 'false') {
startAdminService();
}