Remove deprecated scripts for adding head-matter to wt_config.xml, including Python and Bash implementations, to streamline configuration management.
This commit is contained in:
160
server/routes.js
Normal file
160
server/routes.js
Normal file
@@ -0,0 +1,160 @@
|
||||
import { readFileSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
import { parse } from 'csv-parse/sync';
|
||||
|
||||
import axios from 'axios';
|
||||
import { getSessionStatus, getClientsMap, getSessionIdForSocket } from './broadcast.js';
|
||||
|
||||
export function setupRoutes(app, __dirname) {
|
||||
// Health-Check-Endpoint
|
||||
app.get('/api/health', (req, res) => {
|
||||
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
||||
});
|
||||
|
||||
// Session-Status-Endpoint
|
||||
app.get('/api/session', (req, res) => {
|
||||
try {
|
||||
const sessionId = req.sessionID;
|
||||
console.log('Session-Check - SessionID:', sessionId);
|
||||
console.log('Session-Check - Alle Clients:', Array.from(getClientsMap().keys()));
|
||||
|
||||
// Prüfe zuerst in der clients Map
|
||||
const clientsMap = getClientsMap();
|
||||
let client = clientsMap.get(sessionId);
|
||||
|
||||
// Wenn kein Client mit dieser Session-ID gefunden wurde, aber es gibt Clients,
|
||||
// die bereits eingeloggt sind, könnte es sein, dass die Session-ID beim Reload geändert wurde.
|
||||
// In diesem Fall sollten wir den Client mit der Express-Session-ID verknüpfen.
|
||||
// Aber wir können nicht sicher sein, welcher Client zu welcher Session gehört,
|
||||
// daher geben wir einfach die Session-ID zurück und lassen den Client beim setSessionId
|
||||
// den richtigen Client finden.
|
||||
|
||||
if (client && client.userName) {
|
||||
console.log('Session-Check - Client gefunden:', client.userName);
|
||||
res.json({
|
||||
loggedIn: true,
|
||||
sessionId: sessionId, // Wichtig: Sende Session-ID zurück
|
||||
user: {
|
||||
sessionId: client.sessionId,
|
||||
userName: client.userName,
|
||||
gender: client.gender,
|
||||
age: client.age,
|
||||
country: client.country,
|
||||
isoCountryCode: client.isoCountryCode
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log('Session-Check - Kein Client gefunden für SessionID:', sessionId);
|
||||
// Prüfe auch alle Clients, um zu sehen, ob es ein Mismatch gibt
|
||||
for (const [sid, c] of clientsMap.entries()) {
|
||||
if (c.userName) {
|
||||
console.log('Session-Check - Gefundener Client:', sid, c.userName);
|
||||
}
|
||||
}
|
||||
// Sende Session-ID zurück, auch wenn nicht eingeloggt (für Login)
|
||||
res.json({ loggedIn: false, sessionId: sessionId });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Prüfen der Session:', error);
|
||||
res.json({ loggedIn: false });
|
||||
}
|
||||
});
|
||||
|
||||
// Länderliste-Endpoint
|
||||
app.get('/api/countries', async (req, res) => {
|
||||
try {
|
||||
// Versuche zuerst, die CSV-Datei zu laden
|
||||
const csvPath = join(__dirname, '../docroot/countries.csv');
|
||||
let countries = {};
|
||||
|
||||
try {
|
||||
const fileContent = readFileSync(csvPath, 'utf-8');
|
||||
const records = parse(fileContent, {
|
||||
columns: true,
|
||||
skip_empty_lines: true,
|
||||
quote: '"',
|
||||
trim: true,
|
||||
relax_quotes: true,
|
||||
relax_column_count: true
|
||||
});
|
||||
|
||||
records.forEach(record => {
|
||||
if (record.Name && record.Code) {
|
||||
// Entferne alle Anführungszeichen (auch am Anfang/Ende)
|
||||
const name = record.Name.replace(/^["']+|["']+$/g, '').replace(/["']/g, '').trim();
|
||||
const code = record.Code.replace(/^["']+|["']+$/g, '').replace(/["']/g, '').trim();
|
||||
if (name && code) {
|
||||
countries[name] = code.toLowerCase();
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (fileError) {
|
||||
// Wenn die Datei nicht existiert, lade von der URL
|
||||
console.log('CSV-Datei nicht gefunden, lade von URL...');
|
||||
const response = await axios.get('https://pkgstore.datahub.io/core/country-list/data_csv/data/d7c9d7cfb42cb69f4422dec222dbbaa8/data_csv.csv');
|
||||
const lines = response.data.split('\n');
|
||||
|
||||
for (let i = 1; i < lines.length; i++) {
|
||||
const line = lines[i].trim();
|
||||
if (!line) continue;
|
||||
|
||||
// Parse CSV-Zeile mit Berücksichtigung von Anführungszeichen
|
||||
const parseCSVLine = (line) => {
|
||||
const result = [];
|
||||
let current = '';
|
||||
let inQuotes = false;
|
||||
|
||||
for (let i = 0; i < line.length; i++) {
|
||||
const char = line[i];
|
||||
if (char === '"') {
|
||||
// Ignoriere Anführungszeichen, sie werden nicht zum Wert hinzugefügt
|
||||
inQuotes = !inQuotes;
|
||||
} else if (char === ',' && !inQuotes) {
|
||||
result.push(current.trim());
|
||||
current = '';
|
||||
} else {
|
||||
current += char;
|
||||
}
|
||||
}
|
||||
result.push(current.trim());
|
||||
return result;
|
||||
};
|
||||
|
||||
const [name, code] = parseCSVLine(line);
|
||||
if (name && code) {
|
||||
// Entferne alle Anführungszeichen (auch am Anfang/Ende)
|
||||
const cleanName = name.replace(/^["']+|["']+$/g, '').replace(/["']/g, '').trim();
|
||||
const cleanCode = code.replace(/^["']+|["']+$/g, '').replace(/["']/g, '').trim();
|
||||
if (cleanName && cleanCode) {
|
||||
countries[cleanName] = cleanCode.toLowerCase();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
res.json(countries);
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Laden der Länderliste:', error);
|
||||
res.status(500).json({ error: 'Fehler beim Laden der Länderliste' });
|
||||
}
|
||||
});
|
||||
|
||||
// Partners-Links
|
||||
app.get('/api/partners', (req, res) => {
|
||||
try {
|
||||
const csvPath = join(__dirname, '../docroot/links.csv');
|
||||
const fileContent = readFileSync(csvPath, 'utf-8');
|
||||
const records = parse(fileContent, {
|
||||
columns: true,
|
||||
skip_empty_lines: true,
|
||||
quote: '"'
|
||||
});
|
||||
|
||||
res.json(records);
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Laden der Partner-Links:', error);
|
||||
res.status(500).json({ error: 'Fehler beim Laden der Partner-Links' });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user