module.exports = function(app, sql, uuidv4, app_cfg, passport, auth, waip, udp) { /* ########################### */ /* ##### Statische Seiten #### */ /* ########################### */ // Startseite app.get('/', function(req, res) { sql.db_list_wachen(function(data) { var data_wachen = data sql.db_list_traeger(function(data) { var data_traeger = data sql.db_list_kreis(function(data) { var data_kreis = data res.render('home', { public: app_cfg.public, title: 'Startseite', list_wache: data_wachen, list_traeger: data_traeger, list_kreis: data_kreis, user: req.user }); }); }); }); }); // Ueber die Anwendung app.get('/about', function(req, res) { res.render('about', { public: app_cfg.public, title: 'Über', user: req.user }); }); // Impressum app.get('/impressum', function(req, res) { res.render('imprint', { public: app_cfg.public, title: 'Impressum', user: req.user }); }); // Datenschutzerklaerung app.get('/datenschutz', function(req, res) { res.render('privacy', { public: app_cfg.public, title: 'Datenschutzerklärung', user: req.user }); }); /* ##################### */ /* ####### Login ####### */ /* ##################### */ // Loginseite app.get('/login', function(req, res) { res.render('login', { public: app_cfg.public, title: 'Login', user: req.user, error: req.flash('error') }); }); // Login-Formular verarbeiten app.post('/login', passport.authenticate('local', { failureRedirect: '/login', failureFlash: 'Login fehlgeschlagen! Bitte prüfen Sie Benutzername und Passwort.' }), function(req, res) { if(req.body.rememberme){ // der Benutzer muss sich fuer 5 Jahre nicht anmelden req.session.cookie.maxAge = 5 * 365 * 24 * 60 * 60 * 1000; }; res.redirect('/'); }); // Login mit IP verarbeiten app.post('/login_ip', passport.authenticate('ip', { failureRedirect: '/login', failureFlash: 'Login mittels IP-Adresse fehlgeschlagen!' }), function(req, res) { // der Benutzer muss sich fuer 5 Jahre nicht anmelden req.session.cookie.maxAge = 5 * 365 * 24 * 60 * 60 * 1000; res.redirect('/'); }); // Logout verarbeiten app.post('/logout', function(req, res) { req.session.destroy(function(err) { res.redirect('/'); }) }); /* ######################### */ /* ##### Einstellungen ##### */ /* ######################### */ // Einstellungen anzeigen app.get('/config', auth.ensureAuthenticated, function(req, res) { sql.db_get_userconfig(req.user.id, function(data) { res.render('user/user_config', { public: app_cfg.public, title: 'Einstellungen', user: req.user, reset_counter: data }); }); }); // Einstellungen speichern app.post('/config', auth.ensureAuthenticated, function(req, res) { sql.db_set_userconfig(req.user.id, req.body.set_reset_counter, function(data) { res.redirect('/config'); }); }); /* ##################### */ /* ##### Wachalarm ##### */ /* ##################### */ // /waip nach /waip/0 umleiten app.get('/waip', function(req, res) { res.redirect('/waip/0'); }); // Alarmmonitor aufloesen /waip/ app.get('/waip/:wachen_id', function(req, res, next) { var parmeter_id = req.params.wachen_id; sql.db_wache_vorhanden(parmeter_id, function(wache) { if (wache) { res.render('waip', { public: app_cfg.public, title: 'Alarmmonitor', wachen_id: parmeter_id, data_wache: wache.name, app_id: app_cfg.global.app_id, user: req.user }); } else { var err = new Error('Wache ' + parmeter_id + ' nicht vorhanden!'); err.status = 404; next(err); }; }); }); /* ######################## */ /* ##### Rueckmeldung ##### */ /* ######################## */ // Rueckmeldungs-Aufruf ohne waip_uuid eblehnen app.get('/rmld', function(req, res, next) { var err = new Error('Rückmeldungen sind nur mit gültiger Einsatz-ID erlaubt!'); err.status = 404; next(err); }); // Rueckmeldungs-Aufruf mit waip_uuid aber ohne rmld_uuid an zufällige rmld_uuid weiterleiten app.get('/rmld/:waip_uuid', function(req, res, next) { res.redirect('/rmld/' + req.params.waip_uuid + '/' + uuidv4()); }); // Rueckmeldung anzeigen /rueckmeldung/waip_uuid/rmld_uuid app.get('/rmld/:waip_uuid/:rmld_uuid', function(req, res, next) { var waip_uuid = req.params.waip_uuid; sql.db_get_einsatzdaten_by_uuid(waip_uuid, function(einsatzdaten) { if (einsatzdaten) { sql.db_check_permission(req.user, einsatzdaten.id, function(valid) { if (!valid) { delete einsatzdaten.objekt; delete einsatzdaten.besonderheiten; delete einsatzdaten.strasse; delete einsatzdaten.wgs84_x; delete einsatzdaten.wgs84_y; }; res.render('rmld', { public: app_cfg.public, title: 'Einsatz-Rückmeldung', user: req.user, einsatzdaten: einsatzdaten, error: req.flash("errorMessage"), success: req.flash("successMessage") }); }); } else { var err = new Error('Der angefragte Einsatz ist nicht - oder nicht mehr - vorhanden!'); err.status = 404; next(err); }; }); }); // Rueckmeldung entgegennehmen app.post('/rmld/:waip_uuid/:rmld_uuid', function(req, res) { var waip_uuid = req.params.waip_uuid; var rmld_uuid = req.params.rmld_uuid; console.log('rmld by post: '+rmld_uuid); sql.db_save_rmld(req.body, function(result){ if (result) { req.flash('successMessage', 'Rückmeldung erfolgreich gesendet, auf zum Einsatz!'); res.redirect('/rmld/' + waip_uuid + '/' + rmld_uuid ); waip.reuckmeldung_verteilen_by_uuid(waip_uuid, rmld_uuid); } else { req.flash('errorMessage', 'Fehler beim Senden der Rückmeldung!'); res.redirect('/rmld/' + waip_uuid + '/' + rmld_uuid ); }; }); }); /* ########################## */ /* ##### Administration ##### */ /* ########################## */ // verbundene Clients anzeigen app.get('/adm_show_clients', auth.ensureAdmin, function(req, res) { sql.db_get_active_clients(function(data) { res.render('admin/adm_show_clients', { public: app_cfg.public, title: 'Verbundene PCs/Benutzer', user: req.user, dataSet: data }); }); }); // laufende Einsaetze anzeigen // TODO: eventuell unter Dashboard oder Startseite anzeigen app.get('/adm_show_missions', auth.ensureAdmin, function(req, res) { sql.db_get_active_waips(function(data) { res.render('admin/adm_show_missions', { public: app_cfg.public, title: 'Akutelle Einsätze', user: req.user, dataSet: data }); }); }); // Logdatei app.get('/adm_show_log', auth.ensureAdmin, function(req, res) { sql.db_get_log(function(data) { res.render('admin/adm_show_log', { public: app_cfg.public, title: 'Log-Datei', user: req.user, dataSet: data }); }); }); // direkten Alarm ausloesen app.get('/adm_run_alert', auth.ensureAdmin, function(req, res) { res.render('admin/adm_run_alert', { public: app_cfg.public, title: 'Test-Alarm', user: req.user, }); }); app.post('/adm_run_alert', auth.ensureAdmin, function(req, res) { udp.send_message(req.body.test_alert); res.redirect('/adm_run_alert'); }); // Benutzer editieren app.get('/adm_edit_users', auth.ensureAdmin, function(req, res) { sql.db_get_users(function(data) { res.render('admin/adm_edit_users', { public: app_cfg.public, title: 'Benutzer und Rechte verwalten', user: req.user, users: data, error: req.flash('errorMessage'), success: req.flash('successMessage') }); }); }); app.post('/adm_edit_users', auth.ensureAdmin, function(req, res) { if (req.user && req.user.permissions == "admin") { switch (req.body["modal_method"]) { case "DELETE": auth.deleteUser(req, res); break; case "EDIT": auth.editUser(req, res); break; case "ADDNEW": auth.createUser(req, res); break; } } else { res.redirect('/adm_edit_users'); } }); /* ###################### */ /* ##### Testseiten ##### */ /* ###################### */ // Wachalarm-Uhr testen app.get('/test_clock', function(req, res) { res.render('tests/test_clock', { public: app_cfg.public, title: 'Test Uhr', user: req.user }); }); // Alarmmonitor testen app.get('/test_wachalarm', function(req, res) { res.render('tests/test_wachalarm', { public: app_cfg.public, title: 'Test Wachalarm', user: req.user }); }); // Rueckmeldung testen app.get('/test_rueckmeldung', function(req, res) { res.render('tests/test_rueckmeldung', { public: app_cfg.public, title: 'Test Einsatz-Rückmeldung', user: req.user }); }); // Dashboard testen app.get('/test_dashboard', function(req, res) { res.render('tests/test_dashboard', { public: app_cfg.public, title: 'Test Dashboard', user: req.user }); }); /* ######################## */ /* ##### Fehlerseiten ##### */ /* ######################## */ // 404 abfangen und an error handler weiterleiten app.use(function(req, res, next) { var err = new Error('Seite nicht gefunden!'); err.status = 404; next(err); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error', { public: app_cfg.public, user: req.user }); }); };