Aufteilung in 2 Tabs

Zugriff auf ionos-Mongo
This commit is contained in:
2025-08-14 18:16:37 +00:00
parent 1da23e24c7
commit 4cffdba7df
7 changed files with 4809 additions and 74 deletions

View File

@@ -4,13 +4,28 @@ import bcrypt from 'bcrypt';
import { MongoClient, ObjectId } from 'mongodb';
import path from 'path';
import { fileURLToPath } from 'url';
import dotenv from 'dotenv';
dotenv.config();
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const app = express();
const PORT = process.env.PORT || 3000;
const MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017';
const MONGO_ROOT_USER = process.env.MONGO_ROOT_USER;
const MONGO_ROOT_PASSWORD = process.env.MONGO_ROOT_PASSWORD;
let MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017';
// If credentials are set, inject them into the URI
if (MONGO_ROOT_USER && MONGO_ROOT_PASSWORD) {
// Remove protocol and host from URI
const uriParts = MONGO_URI.split('://');
if (uriParts.length === 2) {
const protocol = uriParts[0];
const rest = uriParts[1];
MONGO_URI = `${protocol}://${encodeURIComponent(MONGO_ROOT_USER)}:${encodeURIComponent(MONGO_ROOT_PASSWORD)}@${rest}`;
}
}
const DB_NAME = process.env.DB_NAME || 'espdb';
const SESSION_SECRET = process.env.SESSION_SECRET || 'supersecret';
@@ -44,8 +59,9 @@ await initMongo();
// Login-Middleware
function requireLogin(req, res, next) {
if (req.session.userId) return next();
res.redirect('/login');
// if (req.session.userId) return next();
// res.redirect('/login');
return next()
}
// Auth-Routen
@@ -197,36 +213,6 @@ function getAddress(sensorNumber) {
const ADDRESS_SERVICE_URL = process.env.ADDRESS_SERVICE_URL
|| 'https://noise.fuerst-stuttgart.de/srv/getaddress';
// kleine Fetch-Helferfunktion mit Timeout
async function fetchWithTimeout(url, ms = 5000) {
const ctrl = new AbortController();
const id = setTimeout(() => ctrl.abort(), ms);
try {
const res = await fetch(url, { signal: ctrl.signal, headers: { 'Accept': 'application/json, text/plain;q=0.9, */*;q=0.8' } });
return res;
} finally {
clearTimeout(id);
}
}
const normalizeAddressPayload = (contentType, payload) => {
try {
if (contentType.includes('application/json')) {
const data = payload; // schon geparst
if (typeof data === 'string') return data.trim();
if (data?.address) return String(data.address).trim();
if (data?.addr) return String(data.addr).trim();
if (data?.result?.address) return String(data.result.address).trim();
// Fallback: JSON zu String
return JSON.stringify(data);
} else {
// Text-Antwort
return String(payload).trim();
}
} catch {
return '';
}
};
// /api/address/:sensorNumber holt Adresse als String "Straße, PLZ Stadt"
app.get('/api/address/:sensorNumber', requireLogin, async (req, res) => {
@@ -235,7 +221,7 @@ app.get('/api/address/:sensorNumber', requireLogin, async (req, res) => {
return res.status(400).json({ error: 'Ungültige Sensornummer' });
}
const url = `https://noise.fuerst-stuttgart.de/srv/getaddress?sensorid=${encodeURIComponent(sensorNumber)}`;
const url = ADDRESS_SERVICE_URL + `?sensorid=${encodeURIComponent(sensorNumber)}`;
try {
const r = await fetch(url, { headers: { 'Accept': 'application/json' } });