diff --git a/app.js b/app.js index 68d3e9442d8290a20f6bded553c389810031c0ac..3e4b3a6f53257678359370704206a1c14ebb9436 100644 --- a/app.js +++ b/app.js @@ -16,7 +16,7 @@ i18n.configure({ directory: './locales' }); -var env = process.env.NODE_ENV || 'development'; +var env = process.env.NODE_ENV || 'testing'; const config = require('./config/config')[env]; var app = express(); diff --git a/config/config.js b/config/config.js index b4c47761de28b53ca6532d256f34e203e9ea8e06..201291a1b012ff0452c9c660d81a96c050af8d53 100644 --- a/config/config.js +++ b/config/config.js @@ -2,14 +2,48 @@ module.exports = { development: { app: { name: 'User Account Management', - port: process.env.PORT || 9989 + port: process.env.PORT || 9989, + host: 'http://localhost:9989' + }, + passport: { + strategy: 'saml', + saml: { + path: process.env.SAML_PATH || '/saml/SSO', + entryPoint: process.env.SAML_ENTRY_POINT || 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SSOService.php', + issuer: 'sp-account.m4lab.hft-stuttgart.de', //local metadata + logoutUrl: 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' + } + }, + database: { + host: 'localhost', // DB host + user: 'DBManager', // DB username + password: 'Stuttgart2019', // DB password + port: 3306, // MySQL port + dbUser: 'userdb', // User DB + host_project: 'localhost', // DB host project db + dbProject: 'projectDB' // Project DB + }, + mailer: { + host: 'mail.hft-stuttgart.de', // hostname + secureConnection: false, // TLS requires secureConnection to be false + port: 587, // port for secure SMTP + authUser: 'ad\\support-transfer', + authPass: '6laumri2', + tlsCiphers: 'SSLv3', + from: 'support-transfer@hft-stuttgart.de', + } + }, + testing: { + app: { + name: 'User Account Management', + port: process.env.PORT || 9989, + host: 'https://m4lab.hft-stuttgart.de/account' }, passport: { strategy: 'saml', saml: { path: process.env.SAML_PATH || '/saml/SSO', entryPoint: process.env.SAML_ENTRY_POINT || 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SSOService.php', - //issuer: 'sp-account.m4lab.hft-stuttgart.de', //local metadata issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', //testing metadata //issuer: 'sp-account-prod.m4lab.hft-stuttgart.de', //production metadata logoutUrl: 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' @@ -22,7 +56,6 @@ module.exports = { port: 3306, // MySQL port dbUser: 'userdb', // User DB host_project: 'm4lab.hft-stuttgart.de', // DB host project db - //host_project: 'localhost', // local dbProject: 'projectDB' // Project DB }, mailer: { @@ -35,4 +68,4 @@ module.exports = { from: 'support-transfer@hft-stuttgart.de', } } -} +} \ No newline at end of file diff --git a/routes/dbconn.js b/routes/dbconn.js index 834eb1aaa465674e73190ffc8d8809b2d28c3274..a39f7368e9872389db9b36555b87a92d40a6eb05 100644 --- a/routes/dbconn.js +++ b/routes/dbconn.js @@ -1,6 +1,6 @@ const mysql = require('mysql') -var env = process.env.NODE_ENV || 'development'; +var env = process.env.NODE_ENV || 'testing'; const config = require('../config/config')[env] // ==== USER ACOOUNT DB CONNECTION ==== diff --git a/routes/mailer.js b/routes/mailer.js index 510b5bb1d11e075f446cdf19b8a954411025ee38..2c51bd7d5ed5682bfdd9fa0c48788e1bd4affe19 100644 --- a/routes/mailer.js +++ b/routes/mailer.js @@ -1,6 +1,6 @@ const nodemailer = require('nodemailer') -var env = process.env.NODE_ENV || 'development'; +var env = process.env.NODE_ENV || 'testing'; const config = require('../config/config')[env] var smtpTransport = nodemailer.createTransport({ diff --git a/routes/methods.js b/routes/methods.js index 9864273b4322e89b4d4e3093f1979b4b8b01986b..7b34268a026e36bd286cdfe311d8185e88918755 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -42,14 +42,26 @@ var methods = { throw err }); } - // COMMIT - dbconn.user.commit(function(err) { + // MLAB-129: INSERT verification token + let verificationData = { + user_id: newUserId, + token: data.verificationToken + } + dbconn.user.query('INSERT INTO verification SET ?', verificationData, function (err, results, fields) { if (err) { return dbconn.user.rollback(function() { throw err }); } - }); + // COMMIT + dbconn.user.commit(function(err) { + if (err) { + return dbconn.user.rollback(function() { + throw err + }) + } + }) + }) }) }); }); @@ -57,7 +69,20 @@ var methods = { }) }, getUserByEmail: function(email, callback) { - dbconn.user.query('SELECT salutation, title, firstname, lastname, industry, organisation, speciality FROM user WHERE email = "' +email+'"', function (err, rows, fields) { + dbconn.user.query('SELECT verificationStatus, salutation, title, firstname, lastname, industry, organisation, speciality, m4lab_idp FROM user WHERE email = "' +email+'"', function (err, rows, fields) { + if (err) { + throw err; + } + else { + if ( rows.length > 0) { + user = rows[0]; + } + } + callback(user, err); + }); + }, + getUserById: function(userId, callback) { + dbconn.user.query('SELECT verificationStatus, email, salutation, title, firstname, lastname, industry, organisation, speciality FROM user WHERE id = ' +userId, function (err, rows, fields) { if (err) { throw err; } @@ -70,7 +95,7 @@ var methods = { }); }, checkUserEmail: function(email, callback) { - var user; + let user dbconn.user.query('SELECT id, email FROM user WHERE email = "' +email+'"', function (err, rows, fields) { if (err) { throw err; @@ -84,7 +109,7 @@ var methods = { }); }, getUserByToken: function(token, callback) { - var user; + let user dbconn.user.query('SELECT t1.user_id, t2.email FROM userdb.credential AS t1 INNER JOIN userdb.user AS t2 ON t1.user_id = t2.id AND t1.resetPasswordToken = "' +token+'" and resetPasswordExpires > '+Date.now(), function (err, rows, fields) { if (err) { @@ -100,42 +125,92 @@ var methods = { } ); }, - updateUser: function(userData, callback) { - dbconn.user.query('UPDATE user SET ? WHERE email = "' +userData.email+'"', userData, function (err, rows, fields) { - if (err) throw err; - callback(err); + updateUserById: function(userData, callback) { + dbconn.user.query('UPDATE user SET ? WHERE id = ' +userData.id, userData, function (err, rows, fields) { + if (err) throw err + callback(err) }) }, updateCredential: function(data, callback) { dbconn.user.query('UPDATE credential SET ? WHERE user_id = ' +data.user_id, data, function (err, rows, fields) { - if (err) throw err; - callback(err); + if (err) throw err + callback(err) }) }, getUserIdByEmail: function(email, callback) { - var userId + let userId dbconn.user.query('SELECT id FROM user WHERE email = "' +email+'"', function (err, rows, fields) { if (err) { - throw err; + throw err } else { if ( rows.length > 0) { - userId = rows[0].id; + userId = rows[0].id } } - callback(userId, err); + callback(userId, err) }); }, getUserProjectRole: function(userId, callback) { dbconn.user.query('SELECT project_id, role_id FROM user_project_role WHERE user_id = "' +userId+'"', function (err, rows, fields) { - if (err) throw err; - callback(rows, err); + if (err) throw err + callback(rows, err) }); }, addUserProjectRole: function(data, callback) { dbconn.user.query('INSERT INTO user_project_role SET ?', data, function (err, results, fields){ - if (err) throw err; - callback(err); + if (err) throw err + callback(err) + }) + }, + getVerificationTokenByUserId: function(userId, callback) { + let token + dbconn.user.query('SELECT token FROM verification WHERE user_id = "' +userId+'"', function (err, rows, fields) { + if (err) { + throw err + } + else { + if (rows.length > 0) { + token = rows[0].token + } + } + callback(token, err) + }) + }, + getUserIdByVerificationToken: function(token, callback) { + let userId + dbconn.user.query('SELECT user_id FROM verification WHERE token = "' +token+'"', function (err, rows, fields) { + if (err) { + throw err + } + else if(rows[0]) { + userId = rows[0].user_id + } + callback(userId, err) + }) + }, + verifyUserAccount: function(userData, callback) { + dbconn.user.beginTransaction(function(err) { // START TRANSACTION + if (err) { throw err } + // update user status + dbconn.user.query('UPDATE user SET ? WHERE id =' +userData.id, userData, function (err, rows, fields) { + if (err) { + return dbconn.user.rollback(function() { throw err }) + } + // delete verification token + dbconn.user.query('DELETE FROM verification WHERE user_id = '+userData.id, function (err, rows, fields) { + if (err) { + return dbconn.user.rollback(function() { throw err }) + } + // COMMIT + dbconn.user.commit(function(err) { + if (err) { + return dbconn.user.rollback(function() { throw err }) + } + }) + }) + }) + callback(err) }) }, // ======================= project db ======================= diff --git a/routes/routes-account.js b/routes/routes-account.js index 43394cac613791892e2b9bb950a3b827ec394e3a..40c54b58c2c32ea7a11ce12758da2ac6987d22cc 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -142,10 +142,18 @@ module.exports = function (app, config, passport, i18n) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ if (!err) { - res.render(lang+'/account/profile', { - user: data, - email: req.user.email - }); + if (data.verificationStatus == 1) { + console.log(data) + res.render(lang+'/account/profile', { + user: data, + email: req.user.email + }) + } + else { + res.render(lang+'/account/home', { + user: data + }); + } } }) } else { @@ -155,63 +163,74 @@ module.exports = function (app, config, passport, i18n) { app.get('/services', function (req, res) { if (req.isAuthenticated()) { - async.waterfall([ - // get userId by email from userdb - function(done) { - methods.getUserIdByEmail(req.user.email, function(userId, err) { - if (!err) { - done(err, userId) - } - }) - }, - // get user-project-role from userdb - function(userId, done) { - methods.getUserProjectRole(userId, function(userProjects, err) { - if (!err) { - done(err, userProjects) - } - }) - }, - // get all projects from projectdb - function(userProjects, done) { - methods.getAllProjects(function(projectsOverview, err) { - if (!err) { - done(err, userProjects, projectsOverview) - } - }) - }, - // create JSON object of projects and user status for front-end - function(userProjects, projectsOverview, done) { - var allProjects = [] // JSON object - - var userProjectId = [] // array of user's project_id - for (var i = 0; i < userProjects.length; i++) { - userProjectId.push(userProjects[i].project_id) + methods.getUserByEmail(req.user.email, function(data, err){ + if (!err) { + if (data.verificationStatus == 1) { + async.waterfall([ + // get userId by email from userdb + function(done) { + methods.getUserIdByEmail(req.user.email, function(userId, err) { + if (!err) { + done(err, userId) + } + }) + }, + // get user-project-role from userdb + function(userId, done) { + methods.getUserProjectRole(userId, function(userProjects, err) { + if (!err) { + done(err, userProjects) + } + }) + }, + // get all projects from projectdb + function(userProjects, done) { + methods.getAllProjects(function(projectsOverview, err) { + if (!err) { + done(err, userProjects, projectsOverview) + } + }) + }, + // create JSON object of projects and user status for front-end + function(userProjects, projectsOverview, done) { + var allProjects = [] // JSON object + + var userProjectId = [] // array of user's project_id + for (var i = 0; i < userProjects.length; i++) { + userProjectId.push(userProjects[i].project_id) + } + + for (var i = 0; i < projectsOverview.length; i++) { + // check if projectId is exist in userProjectId[] + var status = false + if (userProjectId.indexOf(projectsOverview[i].id) > -1) { + status = true + } + // add data to JSON object + allProjects.push({ + id: projectsOverview[i].id, + title: projectsOverview[i].title, + summary: projectsOverview[i].onelinesummary, + cp: projectsOverview[i].contact_email, + userStatus: status + }); + } + + // render the page + res.render(lang+'/account/services', { + user: data, + project: allProjects + }); + } + ]) } - - for (var i = 0; i < projectsOverview.length; i++) { - // check if projectId is exist in userProjectId[] - var status = false - if (userProjectId.indexOf(projectsOverview[i].id) > -1) { - status = true - } - // add data to JSON object - allProjects.push({ - id: projectsOverview[i].id, - title: projectsOverview[i].title, - summary: projectsOverview[i].onelinesummary, - cp: projectsOverview[i].contact_email, - userStatus: status + else { + res.render(lang+'/account/home', { + user: data }); } - - // render the page - res.render(lang+'/account/services', { - user: req.user, - project: allProjects - }); } - ]) + }) } else { res.redirect('/login'); } @@ -219,9 +238,20 @@ module.exports = function (app, config, passport, i18n) { app.get('/security', function (req, res) { if (req.isAuthenticated()) { - res.render(lang+'/account/security', { - user: req.user // useful for view engine, useless for HTML - }); + methods.getUserByEmail(req.user.email, function(data, err){ + if (!err) { + if (data.verificationStatus == 1 && data.m4lab_idp == 1) { + res.render(lang+'/account/security', { + user: data + }) + } + else { + res.render(lang+'/account/home', { + user: data + }); + } + } + }) } else { res.redirect('/login'); } @@ -474,16 +504,11 @@ module.exports = function (app, config, passport, i18n) { }); - // todo: user registration with captcha + // ============= NEW USERS REGISTRATION =========================== app.get('/registration', function(req, res) { res.render(lang+'/account/registration') }) - app.post('/registration', function(req, res) { - // TODO: - // create gitlab account? - // send email to activate profile? - // user data var curDate = new Date() var userData = { @@ -497,27 +522,167 @@ module.exports = function (app, config, passport, i18n) { speciality: req.body.inputSpeciality, createdDate: curDate.toISOString().slice(0,10) } - // encrypt password - bcrypt.genSalt(saltRounds, function(err, salt) { - bcrypt.hash(req.body.inputPassword, salt, function(err, hash) { - // create account - var newAccount = { - profile: userData, - password: hash + + var userEmail = userData.email + var pos = userEmail.indexOf('@') + var emailLength = userEmail.length + var emailDomain = userEmail.slice(pos, emailLength); + + if ( emailDomain.toLowerCase() == "@hft-stuttgart.de") { + req.flash('error', "Fehlgeschlagen: HFT-Account") + res.redirect('/account/registration'); + } + else { + let token + async.waterfall([ + function(done) { + crypto.randomBytes(20, function(err, buf) { + token = buf.toString('hex'); + done(err, token); + }); + }, + // encrypt password + function(token, done) { + bcrypt.genSalt(saltRounds, function(err, salt) { + bcrypt.hash(req.body.inputPassword, salt, function(err, hash) { + var newAccount = { + profile: userData, + password: hash, + verificationToken: token + } + done(err, newAccount) + }); + }); + }, + // save data + function(newAccount, err) { + methods.registerNewUser(newAccount, function(err){ + if (err) { + req.flash('error', "Fehlgeschlagen") + } + else { + // send email + var emailSubject = "Bitte bestätigen Sie Ihr M4_LAB Benutzerkonto" + var emailContent = "Lieber Nutzer,\n\n"+ + "vielen Dank für Ihre Anmeldung am Transferportal der HFT Stuttgart.\n"+ + "Um Ihre Anmeldung zu bestätigen, klicken Sie bitte diesen Link: "+config.app.host+"/verifyAccount?token="+token+"\n"+ + "Ohne Bestätigung Ihres Kontos müssen wir Ihr Konto leider nach 7 Tagen löschen.\n\n"+ + "Sollten Sie sich selbst nicht mit Ihren Daten am Transferportal registriert haben, ignorieren Sie diese E-Mail bitte.\n\n"+mailSignature + + mailer.options.to = req.body.inputEmail; + mailer.options.subject = emailSubject; + mailer.options.text = emailContent; + mailer.transport.sendMail(mailer.options, function(err) { + if (err) { + console.log('cannot send email') + throw err + } + }) + // user feedback + req.flash('success', 'Vielen Dank für Ihre Registrierung!'+'\r\n\r\n'+ + 'Wir haben Ihnen eine E-Mail an Ihre verwendete Adresse gesendet. Diese enthält einen Link zur Bestätigung Ihres Accounts.'+'\r\n'+ + 'Wenn Sie die Mail nicht in ihrem Postfach vorfinden, prüfen Sie bitte auch Ihren Spam-Ordner.') + } + res.redirect('/account/registration') + }) + } + ]) + } + }) + + // ============= USER VERIFICATION ================================ + app.get("/verifyAccount", function(req, res){ + console.log(req.query) + methods.getUserIdByVerificationToken(req.query.token, function(userId, err){ + if (userId) { + let userData = { + id: userId, + verificationStatus: 1 } - methods.registerNewUser(newAccount, function(err){ + methods.verifyUserAccount(userData, function(err){ if (err) { - //req.flash('error', "Failed") - req.flash('error', "Fehlgeschlagen") + console.log("Error: "+err) + res.render(lang+'/account/verification', { + status: false + }); } else { - //req.flash('success', 'Your account has been created. Please log in.') - req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.') + // send welcome email after successful account verification + methods.getUserById(userId, function(data, err){ + if (err) { + console.log("Error: "+err) + } + else { + // send email + var emailSubject = "Herzlich willkommen" + var emailContent = "Lieber Nutzer,\n\n"+ + "herzlich willkommen beim Transferportal der HFT Stuttgart!\n"+ + "Sie können nun alle Dienste des Portals nutzen.\n\n"+mailSignature + + mailer.options.to = data.email; + mailer.options.subject = emailSubject; + mailer.options.text = emailContent; + mailer.transport.sendMail(mailer.options, function(err) { + if (err) { + console.log('cannot send email') + throw err + } + }) + } + }) + + res.render(lang+'/account/verification', { + status: true + }); } - res.redirect('/account/registration'); }) - }); - }); + } + else { + res.render(lang+'/account/verification', { + status: null + }); + } + }) + }) + app.get("/resendVerificationEmail", function(req, res){ + if (req.isAuthenticated()) { + var emailAddress = req.user.email + + methods.getUserIdByEmail(req.user.email, function(userId, err) { + if (!err) { + // get token + methods.getVerificationTokenByUserId(userId, function(token, err){ + if (!err) { + if (token) { + // send email + var emailSubject = "Bitte bestätigen Sie Ihr M4_LAB Benutzerkonto" + var emailContent = "Lieber Nutzer,\n\n"+ + "vielen Dank für Ihre Anmeldung am Transferportal der HFT Stuttgart. "+ + "\nUm Ihre Anmeldung zu bestätigen, klicken Sie bitte diesen Link: "+config.app.host+"/verifyAccount?token="+token+ + "\n\nOhne Bestätigung Ihres Kontos müssen wir Ihr Konto leider nach 7 Tagen löschen.\n\n"+mailSignature + + mailer.options.to = emailAddress; + mailer.options.subject = emailSubject; + mailer.options.text = emailContent; + mailer.transport.sendMail(mailer.options, function(err) { + if (err) { + console.log('cannot send email') + throw err + } + }) + res.send(true) + } + else { + res.send(false) + } + } + else { + console.log(err) + } + }) + } + }) + } }) app.get('/email/:email', function(req, res) { diff --git a/views/DE/404.pug b/views/DE/404.pug index c4178253b9cec40907906ccd33fc39ac6e85c990..28d105ae7464ac0ecc218d73ad5b6f5a0d65f825 100644 --- a/views/DE/404.pug +++ b/views/DE/404.pug @@ -4,7 +4,7 @@ html(lang="de") title= "404 - Page not found" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") style. .container { height: 400px; diff --git a/views/DE/500.pug b/views/DE/500.pug index 704573397c7252fc0a8034428da47602afa9b994..b18e630cbae156b148b0a831253d57ea342744ec 100644 --- a/views/DE/500.pug +++ b/views/DE/500.pug @@ -4,7 +4,7 @@ html(lang="de") title= "500 - Internal Server Error" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") style. .container { height: 400px; diff --git a/views/DE/account/contact.pug b/views/DE/account/contact.pug index 25e4dc9c402ef556088b707e1bbe2ce99b41c2a5..ddf00d4f930fe91f48e285a041829e90ff3d5a63 100644 --- a/views/DE/account/contact.pug +++ b/views/DE/account/contact.pug @@ -4,12 +4,12 @@ html(lang="de") title= "Kontakt" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", type="text/css", href="/css/bootstrap.min.css") link(rel="stylesheet", type="text/css", href="/fonts/ionicons.min.css") link(rel="stylesheet", type="text/css", href="/css/Contact-Form-Clean.css") link(rel="stylesheet", type="text/css", href="/css/Testimonials.css") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") + link(rel="stylesheet", type="text/css", href="/css/custom/login.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/DE/account/forgotPwd.pug b/views/DE/account/forgotPwd.pug index 46210a02d8c8cbbafed3ed8e9b65b3c086ad8246..a0e333baf44847958156baea212cfcdc9b1c98ee 100644 --- a/views/DE/account/forgotPwd.pug +++ b/views/DE/account/forgotPwd.pug @@ -4,8 +4,8 @@ html(lang="de") title= "Forgot Password" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/custom/login.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index fa11d3f7d186ba91c1f1bccae8307e5602df3e24..0d42723272db9b6ae98ae1e784d4556eaf0e4631 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -4,38 +4,48 @@ html(lang="de") title= "User Account" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") body - div(class="container-fluid") - div(class="row min-vh-100 flex-column flex-md-row") - aside(class="col-12 col-md-2 p-0 flex-shrink-1") - nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2") - div(class="collapse navbar-collapse") - ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between") - li(class="nav-item") - a(class="nav-link pl-0 text-nowrap" href="#") - span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname} - li(class="nav-item") - a(class="nav-link pl-0" href="/account/profile") - i(class="fa fa-user fa-fw") - span(class="d-none d-md-inline") Benutzerprofil - li(class="nav-item") - a(class="nav-link pl-0" href="/account/security") - i(class="fa fa-lock fa-fw") - span(class="d-none d-md-inline") Sicherheitseinstellungen - li(class="nav-item") - a(class="nav-link pl-0" href="/account/services") - i(class="fa fa-tasks fa-fw") - span(class="d-none d-md-inline") Projekte und Dienste - li(class="nav-item") - a(class="nav-link pl-0" href="/logout") - i(class="fa fa-sign-out-alt fa-fw") - span(class="d-none d-md-inline") Logout - main(class="col bg-faded py-3 flex-grow-1") - p Willkommen im Benutzerkonto-Bereich des HFT Transferportals - p In diesem Bereich können Sie Ihr Benutzerkonto pflegen.<br/> Dazu finden Sie auf der linken Seite verschiedene Menüs. - p Bei Rückfragen kontaktieren Sie uns bitte unter: <a href="mailto:support-transfer@hft-stuttgart.de">support-transfer@hft-stuttgart.de</a> + div(class="container") + if user.verificationStatus == 0 + div.alert.alert-warning.alert-dismissible + | Willkommen im Benutzerkonto-Bereich des HFT Transferportals + | <br/><br/> + | Wir haben Ihnen eine E-Mail an Ihre verwendete Adresse gesendet. Diese enthält einen Link zur Bestätigung Ihres Accounts. + | Wenn Sie die Mail nicht in ihrem Postfach vorfinden, prüfen Sie bitte auch Ihren Spam-Ordner. + | <br >Falls Sie keine E-Mail von uns erhalten haben, können Sie <a href="javascript:void(0);" onclick="verify();">diese hier</a> erneut anfordern. + div(class="spinner-border text-secondary", role="status", style="display: none") + else + div(class="row min-vh-100 flex-column flex-md-row") + aside(class="col-12 col-md-3 p-0 flex-shrink-1") + nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2") + div(class="collapse navbar-collapse") + ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between") + li(class="nav-item") + a(class="nav-link pl-0 text-nowrap" href="#") + span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname} + li(class="nav-item") + a(class="nav-link pl-0" href="/account/profile") + i(class="fa fa-user fa-fw") + span(class="d-none d-md-inline") Benutzerprofil + if user.m4lab_idp == 1 + li(class="nav-item") + a(class="nav-link pl-0" href="/account/security") + i(class="fa fa-lock fa-fw") + span(class="d-none d-md-inline") Sicherheitseinstellungen + li(class="nav-item") + a(class="nav-link pl-0" href="/account/services") + i(class="fa fa-tasks fa-fw") + span(class="d-none d-md-inline") Projekte und Dienste + li(class="nav-item") + a(class="nav-link pl-0" href="/logout" style="color:red;") + i(class="fa fa-sign-out-alt fa-fw") + span(class="d-none d-md-inline") Logout + main(class="col bg-faded py-3 flex-grow-1") + p Willkommen im Benutzerkonto-Bereich des HFT Transferportals + p In diesem Bereich können Sie Ihr Benutzerkonto pflegen.<br/> Dazu finden Sie auf der linken Seite verschiedene Menüs. + p Bei Rückfragen kontaktieren Sie uns bitte unter: <a href="mailto:support-transfer@hft-stuttgart.de">support-transfer@hft-stuttgart.de</a> // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") @@ -43,4 +53,25 @@ html(lang="de") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/headfoot.js") \ No newline at end of file + script(src="https://m4lab.hft-stuttgart.de/js/headfoot.js") + script. + // call verifyAccount + function verify() { + $(".spinner-border").show() + $.get( "/resendVerificationEmail", function( data ) { + console.log(data) + if (data) { + alert( "Email sent!" ) + } + else { + alert("Please contact support-transfer@hft-stuttgart.de to verify your account.") + } + }) + .fail(function() { + alert( "Something went wrong. Please try again." ) // todo: to DE + }) + .always(function() { + $(".spinner-border").hide() + }) + + } \ No newline at end of file diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index 12f789894c9c8b1348e41bf12e12cd5c81d9433c..5ea7640ab479d2bb4d80c4476ae65f8aba83410b 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -4,32 +4,33 @@ html(lang="de") title= "User Profile" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") body - div(class="container-fluid") + div(class="container") div(class="row min-vh-100 flex-column flex-md-row") - aside(class="col-12 col-md-2 p-0 flex-shrink-1") + aside(class="col-12 col-md-3 p-0 flex-shrink-1") nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2") div(class="collapse navbar-collapse") ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between") li(class="nav-item") - a(class="nav-link pl-0 text-nowrap" href="#") + a(class="nav-link pl-0 text-nowrap" href="/account/") span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname} li(class="nav-item") a(class="nav-link pl-0" href="/account/profile") i(class="fa fa-user fa-fw" style="color:black;") span(class="d-none d-md-inline" style="color:black;") Benutzerprofil - li(class="nav-item") - a(class="nav-link pl-0" href="/account/security") - i(class="fa fa-lock fa-fw") - span(class="d-none d-md-inline") Sicherheitseinstellungen + if user.m4lab_idp == 1 + li(class="nav-item") + a(class="nav-link pl-0" href="/account/security") + i(class="fa fa-lock fa-fw") + span(class="d-none d-md-inline") Sicherheitseinstellungen li(class="nav-item") a(class="nav-link pl-0" href="/account/services") i(class="fa fa-tasks fa-fw") span(class="d-none d-md-inline") Projekte und Dienste li(class="nav-item") - a(class="nav-link pl-0" href="/logout") + a(class="nav-link pl-0" href="/logout" style="color:red;") i(class="fa fa-sign-out-alt fa-fw") span(class="d-none d-md-inline") Logout main(class="col bg-faded py-3 flex-grow-1") @@ -45,7 +46,7 @@ html(lang="de") div(class="form-row") div(class='form-group col-md-2') label(for="title") Anrede - select#inputSalutation(name="inputSalutation", class="form-control", , value=user.salutation) + select#inputSalutation(name="inputSalutation", class="form-control", value=user.salutation) option(value="") - Anrede - option(value="Herr") Herr option(value="Frau") Frau @@ -99,4 +100,4 @@ html(lang="de") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/headfoot.js") \ No newline at end of file + script(src="https://m4lab.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/account/registration.pug b/views/DE/account/registration.pug index 3de3ed5a731a614fc8baa4eea95465e98a6df82f..5d169e73d02c62ab8ddd446c6ac24f4918537ba3 100644 --- a/views/DE/account/registration.pug +++ b/views/DE/account/registration.pug @@ -4,29 +4,9 @@ html(lang="de") title= "Create New Account" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. - .collapse { - display: none; - } - .collapse.in { - display: block; - } - .collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height,visibility; - -o-transition-property: height,visibility; - transition-property: height,visibility; - } .warning { color: red; font-size: 11px; @@ -34,9 +14,12 @@ html(lang="de") body div(class="container-fluid") div(class="row") - div(class="col-md-6 offset-md-2") + div(class="pt-4 pb-4 col-md-6 offset-md-2") h3(class="mb-3 font-weight-bold") Neues Benutzerkonto anlegen div(class="col-md-6 offset-md-3") + div(class="alert alert-info" role="alert") + | Auf dieser Seite können sich Benutzer, die keinen Account an der HFT haben, registrieren.<br/> + | Um sich mit ihrem HFT-Account anzumelden, klicken Sie <a class="font-weight-bold" href="https://transfer.hft-stuttgart.de/account/">hier</a>. if successes for success in successes div.alert.alert-success.alert-dismissible #{ success } @@ -46,7 +29,7 @@ html(lang="de") div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × form(method="POST") - h5(class="mb-3 font-weight-bold") Anmeldedaten + h5(class="pt-2 mb-3 font-weight-bold") Anmeldedaten div(class='form-row') div(class='form-group col-md-6') input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse*", maxlength="45" required) @@ -54,7 +37,7 @@ html(lang="de") div(class="form-group col-md-6") input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Passwort*", maxlength="45" required) span#passwordWarning(class='warning') - h5(class="mb-3 font-weight-bold") Benutzerprofil + h5(class="pt-2 mb-3 font-weight-bold") Benutzerprofil div(class="form-row") div(class='form-group col-md-2') select#inputSalutation(name="inputSalutation", class="form-control") @@ -94,4 +77,4 @@ html(lang="de") // M4_LAB script(src="/js/generalFunction.js") script(src="/js/registration.js") - script(src="/js/headfoot.js") \ No newline at end of file + script(src="https://m4lab.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/account/reset.pug b/views/DE/account/reset.pug index 56aa2d9220f06e178f93b0f985d187d61938828c..ede0800cc345623aed1008a13953d2796e5dd628 100644 --- a/views/DE/account/reset.pug +++ b/views/DE/account/reset.pug @@ -4,8 +4,8 @@ html(lang="de") title= "Reset Password" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/custom/login.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 15c438871580fd7d9edc0ffdfef78a0bbc531827..d060e233172473f1626c71af91290f8d61bac012 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -4,21 +4,21 @@ html(lang="de") title= "User Profile" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .warning { font-size: 11px; } body - div(class="container-fluid") + div(class="container") div(class="row min-vh-100 flex-column flex-md-row") - aside(class="col-12 col-md-2 p-0 flex-shrink-1") + aside(class="col-12 col-md-3 p-0 flex-shrink-1") nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2") div(class="collapse navbar-collapse") ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between") li(class="nav-item") - a(class="nav-link pl-0 text-nowrap" href="#") + a(class="nav-link pl-0 text-nowrap" href="/account/") span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname} li(class="nav-item") a(class="nav-link pl-0" href="/account/profile") @@ -33,7 +33,7 @@ html(lang="de") i(class="fa fa-tasks fa-fw") span(class="d-none d-md-inline") Projekte und Dienste li(class="nav-item") - a(class="nav-link pl-0" href="/logout") + a(class="nav-link pl-0" href="/logout" style="color:red;") i(class="fa fa-sign-out-alt fa-fw") span(class="d-none d-md-inline") Logout main(class="col bg-faded py-3 flex-grow-1") @@ -64,7 +64,7 @@ html(lang="de") span#message div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. input#updateBtn(type="submit", class="btn btn-primary", value="Passwort ändern" disabled) - + // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") @@ -73,7 +73,7 @@ html(lang="de") // M4_LAB script(src="/js/security.js") script(src="/js/generalFunction.js") - script(src="/js/headfoot.js") + script(src="https://m4lab.hft-stuttgart.de/js/headfoot.js") script. // check input fields 'use strict'; diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 8b99f630e68a19498f6f833937b1296b580c962e..bb9dba43c55e48ca14aceee18670ff01aec648ba 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -4,32 +4,33 @@ html(lang="de") title= "User Profile" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") body - div(class="container-fluid") + div(class="container") div(class="row min-vh-100 flex-column flex-md-row") - aside(class="col-12 col-md-2 p-0 flex-shrink-1") + aside(class="col-12 col-md-3 p-0 flex-shrink-1") nav(class="navbar navbar-expand flex-md-column flex-row align-items-start py-2") div(class="collapse navbar-collapse") ul(class="flex-md-column flex-row navbar-nav w-100 justify-content-between") li(class="nav-item") - a(class="nav-link pl-0 text-nowrap" href="#") + a(class="nav-link pl-0 text-nowrap" href="/") span(class="font-weight-bold" style="color:black;") #{user.firstname} #{user.lastname} li(class="nav-item") a(class="nav-link pl-0" href="/account/profile") i(class="fa fa-user fa-fw") span(class="d-none d-md-inline") Benutzerprofil - li(class="nav-item") - a(class="nav-link pl-0" href="/account/security") - i(class="fa fa-lock fa-fw") - span(class="d-none d-md-inline") Sicherheitseinstellungen + if user.m4lab_idp == 1 + li(class="nav-item") + a(class="nav-link pl-0" href="/account/security") + i(class="fa fa-lock fa-fw") + span(class="d-none d-md-inline") Sicherheitseinstellungen li(class="nav-item") a(class="nav-link pl-0" href="/account/services") i(class="fa fa-tasks fa-fw" style="color:black;") span(class="d-none d-md-inline" style="color:black;") Projekte und Dienste li(class="nav-item") - a(class="nav-link pl-0" href="/logout") + a(class="nav-link pl-0" href="/logout" style="color:red;") i(class="fa fa-sign-out-alt fa-fw") span(class="d-none d-md-inline") Logout main(class="col bg-faded py-3 flex-grow-1") @@ -41,4 +42,4 @@ html(lang="de") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/headfoot.js") \ No newline at end of file + script(src="https://m4lab.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/account/verification.pug b/views/DE/account/verification.pug new file mode 100644 index 0000000000000000000000000000000000000000..a5518385d140d8c51d0b485087e46097b01d98ec --- /dev/null +++ b/views/DE/account/verification.pug @@ -0,0 +1,35 @@ +doctype html +html(lang="de") + head + title= "User Verification" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") + style. + .container { + height: 400px; + position: relative; + } + .center { + margin: 0; + position: absolute; + top: 50%; + left: 50%; + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + } + body + div(class="container") + div(class="center", align="center") + a(href="https://m4lab.hft-stuttgart.de") + img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") + br + br + if status == true + p(class="h5") Ihr Benutzerkonto wurde bestätigt. Bitte <a href="https://m4lab.hft-stuttgart.de/account/">melden Sie sich an</a>. + else if status == false + p(class="h5") Ihr Benutzerkonto konnte nicht bestätigt werden, bitte versuchen Sie es erneut. + else + p(class="h5") Ihr Benutzerkonto wude nicht gefunden. + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") \ No newline at end of file diff --git a/views/DE/project/addProjectOverview.pug b/views/DE/project/addProjectOverview.pug index f6517d29faccb116a9e7345b04084ca0a86e53d5..5752e8b9d13e54bf75971a3c0339aa908b4f966c 100644 --- a/views/DE/project/addProjectOverview.pug +++ b/views/DE/project/addProjectOverview.pug @@ -4,7 +4,7 @@ html(lang="de") title= "Add Project Overview" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") // jQuery UI - Datepicker link(rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css") diff --git a/views/DE/project/landingpage.pug b/views/DE/project/landingpage.pug index a835ec04d9823d0f847956b9bf6012eaf92b083f..d00050e9dc26993a9e4e5085e1ba423f8cd0ebe4 100644 --- a/views/DE/project/landingpage.pug +++ b/views/DE/project/landingpage.pug @@ -4,7 +4,7 @@ html(lang="de") title= "Project List" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/DE/project/mailinglists.pug b/views/DE/project/mailinglists.pug index c38c8042e3dead88fbbf9febf47439d6258e1eab..5f24660fb586aad062716a25a04d2490e459762d 100644 --- a/views/DE/project/mailinglists.pug +++ b/views/DE/project/mailinglists.pug @@ -3,7 +3,7 @@ html(lang="de") title= "Mailinglisten" meta(charset="UTF-8") meta(name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") link(rel="stylesheet" href="/fonts/ionicons.min.css") link(rel="stylesheet" href="assets/css/Testimonials.css") diff --git a/views/DE/project/project-simplified.pug b/views/DE/project/project-simplified.pug index cb868f9ab04683fb3d9c4d4cd5c514c91083f284..a7f317b77723ab65a994c6e23bd4dee7b8bb0a1e 100644 --- a/views/DE/project/project-simplified.pug +++ b/views/DE/project/project-simplified.pug @@ -4,7 +4,7 @@ html(lang="de") title= "Project List" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .help .card-title > a:before { diff --git a/views/DE/project/projectOverview.pug b/views/DE/project/projectOverview.pug index e015d1e650c22ff70c32feda6ebff7d2edd7b3b2..beacda4ade66f74fedff45552362b49ec0f6c383 100644 --- a/views/DE/project/projectOverview.pug +++ b/views/DE/project/projectOverview.pug @@ -4,7 +4,7 @@ html(lang="de") title= "Project List" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index c2730b807aa30e4e7446275dc791777989f1c30b..f3693d924585c0e8cccd20a3cd9dd8efd6eb9f70 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -4,7 +4,7 @@ html(lang="de") title= "Project List" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/DE/project/videoconferences.pug b/views/DE/project/videoconferences.pug index e6ee7b6907023ec96a97b4e4345c72d94587491e..20706244c7f9eaffe886c48e1b07d66b4efb82a1 100644 --- a/views/DE/project/videoconferences.pug +++ b/views/DE/project/videoconferences.pug @@ -4,7 +4,7 @@ html(lang="de") title= "Project List" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/account/forgotPwd.pug b/views/EN/account/forgotPwd.pug index 1cde0888090e2046496e472178d2d296a6f8c647..985793b02c8551de670b8d7e05851d81ce6f648f 100644 --- a/views/EN/account/forgotPwd.pug +++ b/views/EN/account/forgotPwd.pug @@ -4,8 +4,8 @@ html(lang="en") title= "Forgot Password" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/custom/login.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/account/home.pug b/views/EN/account/home.pug index d2f3875a5a831fde499fae7baddb5acfbd47e34d..df71fe1840f6c5bd6be7cf0ba88e320669129905 100644 --- a/views/EN/account/home.pug +++ b/views/EN/account/home.pug @@ -4,7 +4,7 @@ html(lang="en") title= "User Account" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/account/profile.pug b/views/EN/account/profile.pug index 47c1f7e8683e370e2fb368337c4fca5d419230fe..60788795491df06cca87c2faa1c76465c6f6f47c 100644 --- a/views/EN/account/profile.pug +++ b/views/EN/account/profile.pug @@ -4,7 +4,7 @@ html(lang="en") title= "User Profile" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/account/registration.pug b/views/EN/account/registration.pug index 88ef5a932c510753f110253fec986dd426f6896f..2e1aba4c72ce4001e89aad36138ac9218b4e4c93 100644 --- a/views/EN/account/registration.pug +++ b/views/EN/account/registration.pug @@ -4,7 +4,7 @@ html(lang="en") title= "Create New Account" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/account/reset.pug b/views/EN/account/reset.pug index b8939ea2200d627786fa64a8feae03da02d5b346..606b304f69f9a56a5ac414cb2869179c2a311f8e 100644 --- a/views/EN/account/reset.pug +++ b/views/EN/account/reset.pug @@ -4,8 +4,8 @@ html(lang="en") title= "Reset Password" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/custom/login.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/account/security.pug b/views/EN/account/security.pug index 2a5c248ce1f9e98b429b52eb9261f322cd38fcf9..c2c997b0ececb95abc04617a40ce0fd373b88ea1 100644 --- a/views/EN/account/security.pug +++ b/views/EN/account/security.pug @@ -4,7 +4,7 @@ html(lang="en") title= "User Profile" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/account/services.pug b/views/EN/account/services.pug index f095144beb05de603a741230ae857d11b543b3f9..c70d729fa83da0e81bf5d82058008a5b14b9d3d5 100644 --- a/views/EN/account/services.pug +++ b/views/EN/account/services.pug @@ -4,7 +4,7 @@ html(lang="en") title= "User Profile" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/project/addProjectOverview.pug b/views/EN/project/addProjectOverview.pug index 7b40b54fc63b3d774caf8d0b8af272f4e3a554ce..d0a4b0ebff6e43d8f1760471c8a6598d584204c3 100644 --- a/views/EN/project/addProjectOverview.pug +++ b/views/EN/project/addProjectOverview.pug @@ -4,7 +4,7 @@ html(lang="de") title= "Add Project Overview" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/project/mailinglists.pug b/views/EN/project/mailinglists.pug index f2ddbd8b8e7eb89a85e4dc16310b96acf74e06e3..fdc0ef2398bf1b2e4495cca2bd66d34d419df497 100644 --- a/views/EN/project/mailinglists.pug +++ b/views/EN/project/mailinglists.pug @@ -3,7 +3,7 @@ html(lang="en") title= "Mailinglisten" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/project/projects.pug b/views/EN/project/projects.pug index 56f65c10de4655b786ec93a865b6e57adc5f5e10..f1ecc57944a7619206f29ed7cadcff181f2c7050 100644 --- a/views/EN/project/projects.pug +++ b/views/EN/project/projects.pug @@ -4,7 +4,7 @@ html(lang="de") title= "Project List" meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="/css/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse {