Projektsuche Implementiert mit anbindung an INFRA
This commit is contained in:
@@ -3,47 +3,53 @@
|
||||
const bcrypt = require('bcryptjs');
|
||||
const { db } = require('../database');
|
||||
const { requireAdmin } = require('../middleware/auth');
|
||||
const { testMssqlConnection } = require('../services/mssql-infra-service');
|
||||
|
||||
// Routes registrieren
|
||||
function registerAdminRoutes(app) {
|
||||
// Admin-Bereich
|
||||
app.get('/admin', requireAdmin, (req, res) => {
|
||||
db.all('SELECT id, username, firstname, lastname, role, personalnummer, wochenstunden, urlaubstage, arbeitstage, default_break_minutes, created_at FROM users ORDER BY created_at DESC',
|
||||
db.all(
|
||||
'SELECT id, username, firstname, lastname, role, personalnummer, wochenstunden, urlaubstage, arbeitstage, default_break_minutes, created_at FROM users ORDER BY created_at DESC',
|
||||
(err, users) => {
|
||||
// LDAP-Konfiguration, Sync-Log und Optionen abrufen
|
||||
// LDAP-Konfiguration, Sync-Log, Optionen und MSSQL-Konfiguration abrufen
|
||||
db.get('SELECT * FROM ldap_config WHERE id = 1', (err, ldapConfig) => {
|
||||
db.all('SELECT * FROM ldap_sync_log ORDER BY sync_started_at DESC LIMIT 10', (err, syncLogs) => {
|
||||
db.get('SELECT * FROM system_options WHERE id = 1', (err, options) => {
|
||||
// Parse Rollen für jeden User
|
||||
const usersWithRoles = (users || []).map(u => {
|
||||
let roles = [];
|
||||
try {
|
||||
roles = JSON.parse(u.role);
|
||||
if (!Array.isArray(roles)) {
|
||||
roles = [u.role];
|
||||
db.get('SELECT * FROM mssql_config WHERE id = 1', (err, mssqlConfig) => {
|
||||
// Parse Rollen für jeden User
|
||||
const usersWithRoles = (users || []).map(u => {
|
||||
let roles = [];
|
||||
try {
|
||||
roles = JSON.parse(u.role);
|
||||
if (!Array.isArray(roles)) {
|
||||
roles = [u.role];
|
||||
}
|
||||
} catch (e) {
|
||||
roles = [u.role || 'mitarbeiter'];
|
||||
}
|
||||
} catch (e) {
|
||||
roles = [u.role || 'mitarbeiter'];
|
||||
}
|
||||
return { ...u, roles };
|
||||
});
|
||||
|
||||
res.render('admin', {
|
||||
users: usersWithRoles,
|
||||
ldapConfig: ldapConfig || null,
|
||||
syncLogs: syncLogs || [],
|
||||
options: options || { saturday_percentage: 100, sunday_percentage: 100 },
|
||||
user: {
|
||||
firstname: req.session.firstname,
|
||||
lastname: req.session.lastname,
|
||||
roles: req.session.roles || [],
|
||||
currentRole: req.session.currentRole || 'admin'
|
||||
}
|
||||
return { ...u, roles };
|
||||
});
|
||||
|
||||
res.render('admin', {
|
||||
users: usersWithRoles,
|
||||
ldapConfig: ldapConfig || null,
|
||||
syncLogs: syncLogs || [],
|
||||
options: options || { saturday_percentage: 100, sunday_percentage: 100 },
|
||||
mssqlConfig: mssqlConfig || null,
|
||||
user: {
|
||||
firstname: req.session.firstname,
|
||||
lastname: req.session.lastname,
|
||||
roles: req.session.roles || [],
|
||||
currentRole: req.session.currentRole || 'admin'
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// Benutzer erstellen
|
||||
@@ -234,6 +240,88 @@ function registerAdminRoutes(app) {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// MSSQL-Konfiguration laden
|
||||
app.get('/admin/mssql-config', requireAdmin, (req, res) => {
|
||||
db.get('SELECT server, database, username FROM mssql_config WHERE id = 1', (err, config) => {
|
||||
if (err) {
|
||||
return res.status(500).json({ error: 'Fehler beim Laden der MSSQL-Konfiguration' });
|
||||
}
|
||||
if (!config) {
|
||||
return res.json({
|
||||
config: {
|
||||
server: '',
|
||||
database: '',
|
||||
username: ''
|
||||
}
|
||||
});
|
||||
}
|
||||
res.json({ config });
|
||||
});
|
||||
});
|
||||
|
||||
// MSSQL-Konfiguration speichern
|
||||
app.post('/admin/mssql-config', requireAdmin, (req, res) => {
|
||||
const { server, database, username, password } = req.body;
|
||||
|
||||
const trimmedServer = server ? server.trim() : '';
|
||||
const trimmedDatabase = database ? database.trim() : '';
|
||||
const trimmedUsername = username ? username.trim() : '';
|
||||
const trimmedPassword = password != null ? password.trim() : null;
|
||||
|
||||
if (!trimmedServer || !trimmedDatabase || !trimmedUsername) {
|
||||
return res.status(400).json({ error: 'Server, Datenbankname und Benutzername sind erforderlich' });
|
||||
}
|
||||
|
||||
db.get('SELECT * FROM mssql_config WHERE id = 1', (err, existing) => {
|
||||
if (err) {
|
||||
return res.status(500).json({ error: 'Fehler beim Lesen der bestehenden MSSQL-Konfiguration' });
|
||||
}
|
||||
|
||||
const newPassword =
|
||||
trimmedPassword === null || trimmedPassword === ''
|
||||
? (existing ? existing.password : '')
|
||||
: trimmedPassword;
|
||||
|
||||
if (existing) {
|
||||
db.run(
|
||||
'UPDATE mssql_config SET server = ?, database = ?, username = ?, password = ?, updated_at = CURRENT_TIMESTAMP WHERE id = 1',
|
||||
[trimmedServer, trimmedDatabase, trimmedUsername, newPassword],
|
||||
(updateErr) => {
|
||||
if (updateErr) {
|
||||
return res.status(500).json({ error: 'Fehler beim Speichern der MSSQL-Konfiguration' });
|
||||
}
|
||||
return res.json({ success: true });
|
||||
}
|
||||
);
|
||||
} else {
|
||||
db.run(
|
||||
'INSERT INTO mssql_config (id, server, database, username, password) VALUES (1, ?, ?, ?, ?)',
|
||||
[trimmedServer, trimmedDatabase, trimmedUsername, newPassword || ''],
|
||||
(insertErr) => {
|
||||
if (insertErr) {
|
||||
return res.status(500).json({ error: 'Fehler beim Speichern der MSSQL-Konfiguration' });
|
||||
}
|
||||
return res.json({ success: true });
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// MSSQL-Verbindung testen
|
||||
app.post('/admin/mssql-test-connection', requireAdmin, async (req, res) => {
|
||||
try {
|
||||
await testMssqlConnection();
|
||||
return res.json({ success: true });
|
||||
} catch (err) {
|
||||
console.error('MSSQL Testverbindung fehlgeschlagen:', err);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
error: 'Verbindung zur MSSQL-Datenbank fehlgeschlagen: ' + err.message
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = registerAdminRoutes;
|
||||
|
||||
Reference in New Issue
Block a user