diff --git a/database/alter.sql b/database/alter.sql deleted file mode 100644 index 80d0ad77f1d270830b410505fc2123fc972731fa..0000000000000000000000000000000000000000 --- a/database/alter.sql +++ /dev/null @@ -1,4 +0,0 @@ -// add `salutation` column and alter `title` to be not mandatory -ALTER TABLE `userdb`.`user` -ADD COLUMN `salutation` VARCHAR(45) NULL DEFAULT NULL AFTER `email`, -CHANGE COLUMN `title` `title` VARCHAR(45) NULL DEFAULT NULL ; \ No newline at end of file diff --git a/database/userdb.mwb b/database/userdb.mwb deleted file mode 100644 index 6cb9b9285114f37d969bc9d563909cf62cb71fe5..0000000000000000000000000000000000000000 Binary files a/database/userdb.mwb and /dev/null differ diff --git a/database/userdb.png b/database/userdb.png deleted file mode 100644 index 917f4596421b323f05ba15b5a7d03fcc524b7cb5..0000000000000000000000000000000000000000 Binary files a/database/userdb.png and /dev/null differ diff --git a/database/userdb.sql b/database/userdb.sql deleted file mode 100644 index 88d6a99a52ce4c23fd199abb5a3736e67ef899b2..0000000000000000000000000000000000000000 --- a/database/userdb.sql +++ /dev/null @@ -1,89 +0,0 @@ --- MySQL Workbench Forward Engineering - -SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; -SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; -SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; - --- ----------------------------------------------------- --- Schema userdb --- ----------------------------------------------------- - --- ----------------------------------------------------- --- Schema userdb --- ----------------------------------------------------- -CREATE SCHEMA IF NOT EXISTS `userdb` DEFAULT CHARACTER SET utf8 ; --- ----------------------------------------------------- --- Schema userdb --- ----------------------------------------------------- -USE `userdb` ; - --- ----------------------------------------------------- --- Table `userdb`.`user` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`user` ( - `id` INT NOT NULL AUTO_INCREMENT, - `active` VARCHAR(45) NOT NULL DEFAULT '1', - `email` VARCHAR(45) NOT NULL, - `title` VARCHAR(45) NOT NULL, - `firstname` VARCHAR(45) NOT NULL, - `lastname` VARCHAR(45) NOT NULL, - `industry` VARCHAR(45) NULL, - `organisation` VARCHAR(45) NULL, - `speciality` VARCHAR(100) NULL, - `createdDate` DATE NOT NULL, - PRIMARY KEY (`id`)) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `userdb`.`credential` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`credential` ( - `password` VARCHAR(255) NOT NULL, - `resetPasswordToken` VARCHAR(255) NULL, - `resetPasswordExpires` BIGINT(11) NULL, - `user_id` INT NOT NULL, - PRIMARY KEY (`user_id`), - CONSTRAINT `fk_credential_user` - FOREIGN KEY (`user_id`) - REFERENCES `userdb`.`user` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `userdb`.`role` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`role` ( - `id` INT NOT NULL, - `name` VARCHAR(45) NOT NULL, - PRIMARY KEY (`id`)) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `userdb`.`user_project_role` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`user_project_role` ( - `project_id` INT NOT NULL, - `user_id` INT NOT NULL, - `role_id` INT NOT NULL, - PRIMARY KEY (`user_id`, `role_id`), - INDEX `fk_user_project_role_role1_idx` (`role_id` ASC) VISIBLE, - CONSTRAINT `fk_user_project_role_user1` - FOREIGN KEY (`user_id`) - REFERENCES `userdb`.`user` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION, - CONSTRAINT `fk_user_project_role_role1` - FOREIGN KEY (`role_id`) - REFERENCES `userdb`.`role` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - -SET SQL_MODE=@OLD_SQL_MODE; -SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; -SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/database/userdb_121219.sql b/database/userdb_121219.sql deleted file mode 100644 index 17182485d251f87aa2fc13b94f88cc88234ea75e..0000000000000000000000000000000000000000 --- a/database/userdb_121219.sql +++ /dev/null @@ -1,169 +0,0 @@ --- MySQL dump 10.13 Distrib 5.7.28, for Linux (x86_64) --- --- Host: localhost Database: userdb --- ------------------------------------------------------ --- Server version 5.7.28-0ubuntu0.16.04.2 - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `credential` --- - -DROP TABLE IF EXISTS `credential`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `credential` ( - `password` varchar(255) NOT NULL, - `resetPasswordToken` varchar(255) DEFAULT NULL, - `resetPasswordExpires` bigint(11) DEFAULT NULL, - `user_id` int(11) NOT NULL, - PRIMARY KEY (`user_id`), - CONSTRAINT `fk_credential_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `credential` --- - -LOCK TABLES `credential` WRITE; -/*!40000 ALTER TABLE `credential` DISABLE KEYS */; -INSERT INTO `credential` VALUES ('$2a$10$aaazJI39YqSX4E4IioZLyeij7PNVJOftflRoyR8cnEsJcnfiCEkJG',NULL,NULL,1),('$2a$10$mwSQgaevI6TMlADnNV4wXOHSbU0vMPFk0gXvF7k8uO7rq2nlq4i1m',NULL,NULL,2),('$2a$10$HdtI166dTpiDJ0DJ3iUdN.egdlVISeqKTdiVjK0pO3YCka4leCMqa',NULL,NULL,3),('$2a$10$.B64LLuZjih.N7mIiECfrOJreHS2wl/Tuq8Y3dQBR0Ibo7Qiyu46G',NULL,NULL,4),('$2a$10$9nr4ZPwwIFCmI9ui3cMSYOOm/4A87zEuXjUKITWrednzVgN9TkSdC',NULL,NULL,5),('$2a$10$jbh/nfxvQd.38I/7xjoPG..ouy5IEBHx/IXXKeDJRB7gyeLIXYgzS',NULL,NULL,6),('$2a$10$q.Az8ugqSV/pIJJUFL6zsuKNeOyRqkJ5VwETX5qgTrw87GFkJe.oa',NULL,NULL,7),('$2a$10$.2F7VAwc1coUEqApy0WKxOS3aa469IA/HS/5.55k9KSETXGNzHzc2',NULL,NULL,8),('$2a$10$N/pEeFf09M4JleRr7nWoqOgFE9BJ9CrCqmMwD6WVA0PIq9sn7TKzO',NULL,NULL,9),('$2a$10$aaazJI39YqSX4E4IioZLyeij7PNVJOftflRoyR8cnEsJcnfiCEkJG','4492472ebff697897f79b90221eed62c92daf4ce',1576064194107,10),('$2a$10$1IOasn3XS80V49A4R5c3terXZ.U9cw6tnulwvpH0hojFRiLDOaiGS',NULL,NULL,11),('$2a$10$PRScebJjV45CCkn0E2x0.OCasH131Mbu1.K.o.6TO3.SnAZKpGXS2',NULL,NULL,12),('$2a$10$79/hpCUI3pe7w4uKqntdC.6uvxXPj3/pqxgrE5Q8QRp7mFeeOeHeG',NULL,NULL,13),('$2a$10$AjfyBato1aDfZmRVQky24.6xHspwxmDg0OuauTlU2QE6.W/0.Nfj6',NULL,NULL,14),('$2a$10$dyJeMvCcwfFLs0T0z2aXSeQPVkXzltQhA5zzFzUUEAddjG.5bvwUW',NULL,NULL,15),('$2a$10$.B64LLuZjih.N7mIiECfrOJreHS2wl/Tuq8Y3dQBR0Ibo7Qiyu46G',NULL,NULL,16),('$2a$10$jGcRXSLA0l4cOb7Y1/c6Wehml/8O3b9J17zJbfQLfv6PCOQF3/rYq',NULL,NULL,18),('$2a$10$JIMQ7fHiQWpbEijzvViVMeSFcprSFNjQFdfPjtgZCEGtOHv.NTL/i',NULL,NULL,19); -/*!40000 ALTER TABLE `credential` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `role` --- - -DROP TABLE IF EXISTS `role`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `role` ( - `id` int(11) NOT NULL, - `name` varchar(45) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `role` --- - -LOCK TABLES `role` WRITE; -/*!40000 ALTER TABLE `role` DISABLE KEYS */; -INSERT INTO `role` VALUES (1,'ADMIN'),(2,'USER'); -/*!40000 ALTER TABLE `role` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `user` --- - -DROP TABLE IF EXISTS `user`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `active` varchar(45) NOT NULL DEFAULT '1', - `email` varchar(45) NOT NULL, - `title` varchar(45) NOT NULL, - `firstname` varchar(45) NOT NULL, - `lastname` varchar(45) NOT NULL, - `industry` varchar(45) DEFAULT NULL, - `organisation` varchar(45) DEFAULT NULL, - `speciality` varchar(100) DEFAULT NULL, - `createdDate` date NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `user` --- - -LOCK TABLES `user` WRITE; -/*!40000 ALTER TABLE `user` DISABLE KEYS */; -INSERT INTO `user` VALUES (1,'1','testi@testmann.de','Herr','Testi','Testmann','testing','HFT Stuttgart','test-driven testing','2019-12-11'),(2,'1','test@email.de','Frau','Test','Lastname','','','','2019-12-11'),(3,'1','christine.kraus@hft-stuttgart.de','Frau','Christine','Kraus','Bildung','HFT','Innovationslabor M4_LAB','2019-12-11'),(4,'1','volker.coors@hft-stuttgart.de','Prof. Dr.','Volker','Coors','Bildung','HfT Stuttgart','3D-Geodateninfrastrukturen, Visualisierung raumbezogener Daten','2019-12-11'),(5,'1','uta.bronner@hft-stuttgart.de','Prof. Dr.','Uta','Bronner','Bildung','HfT Stuttgart','Human Resources Management','2019-12-11'),(6,'1','michael.bossert@hft-stuttgart.de','Herr','Michael','Bossert','Bildung','HfT Stuttgart','m4_lab','2019-12-11'),(7,'1','patrick.wuerstle@hft-stuttgart.de','Herr','Patrick','Würstle','Bildung','HfT Stuttgart','Geoinformatik','2019-12-11'),(8,'1','thunyathep.santhanavanich@hft-stuttgart.de','Herr','Joe Thunyathep','Santhanavanich','Bildung','HfT Stuttgart','Geoinformatik','2019-12-11'),(9,'1','janto.skowronek@hft-stuttgart.de','Herr','Janto','Skowronek','','','','2019-12-11'),(10,'1','wolfgang.knopki@hft-stuttgart.de','Herr','Wolfgang','Knopki','Bildung','HfT Stuttgart','Administration','2019-12-11'),(11,'1','muddsairsharif@gmail.com','Herr','Muddsair','Sharif','','','','2019-12-11'),(12,'1','hans.mueller@hft-stuttgart.de','Herr','hans','Müller','Bildung','HfT Stuttgart','keines','2019-12-11'),(13,'1','rosanny.sihombing@hft-stuttgart.de','Frau','Rosanny','Sihombing','','','','2019-12-11'),(14,'1','82shhi1mst@hft-stuttgart.de','Frau','Himanshi','Sharma','Software Technology','HFT','','2019-12-11'),(15,'1','hft_gitlab@ericduminil.com','Herr','Eric','Duminil','zafh.net','HfT Stuttgart','urbane simulation','2019-12-11'),(16,'1','volker.coors@arcor.de','Prof. Dr.','Volker','Coors','','Herr','','2019-12-11'),(18,'1','matthias.betz@hft-stuttgart.de','Herr','Matthias','Betz','','HFT','','2019-12-11'),(19,'1','mail@khbrassel.de','Herr','Kai-Holger','Brassel','','','','2019-12-11'); -/*!40000 ALTER TABLE `user` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `user_groups` --- - -DROP TABLE IF EXISTS `user_groups`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user_groups` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `groups_string` longtext, - `user_id` int(11) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `user_id` (`user_id`), - CONSTRAINT `user_groups_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `user_groups` --- - -LOCK TABLES `user_groups` WRITE; -/*!40000 ALTER TABLE `user_groups` DISABLE KEYS */; -INSERT INTO `user_groups` VALUES (1,'jira-software-users,confluence-users,jira-administrators,confluence-administrators',10),(2,'jira-software-users,confluence-users',9),(3,'jira-software-users,confluence-users',1); -/*!40000 ALTER TABLE `user_groups` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `user_project_role` --- - -DROP TABLE IF EXISTS `user_project_role`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user_project_role` ( - `project_id` int(11) NOT NULL, - `user_id` int(11) NOT NULL, - `role_id` int(11) NOT NULL, - PRIMARY KEY (`user_id`,`role_id`), - KEY `fk_user_project_role_role1_idx` (`role_id`), - CONSTRAINT `fk_user_project_role_role1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, - CONSTRAINT `fk_user_project_role_user1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `user_project_role` --- - -LOCK TABLES `user_project_role` WRITE; -/*!40000 ALTER TABLE `user_project_role` DISABLE KEYS */; -INSERT INTO `user_project_role` VALUES (1,1,1),(1,2,2),(1,3,2),(1,4,2),(1,5,2),(1,6,2),(1,7,2),(1,8,2),(1,9,2),(1,10,2),(1,11,2),(1,12,2),(1,13,2),(1,14,2),(1,15,2),(1,16,2),(1,18,2),(1,19,2); -/*!40000 ALTER TABLE `user_project_role` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Dumping routines for database 'userdb' --- -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2019-12-12 10:24:07 diff --git a/database/userdb_role.sql b/database/userdb_role.sql new file mode 100644 index 0000000000000000000000000000000000000000..be18e685ca0e5b100bf1164972733c9720bb6b63 --- /dev/null +++ b/database/userdb_role.sql @@ -0,0 +1,51 @@ +-- MySQL dump 10.13 Distrib 8.0.15, for Win64 (x86_64) +-- +-- Host: localhost Database: userdb +-- ------------------------------------------------------ +-- Server version 8.0.15 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; + SET NAMES utf8 ; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `role` +-- + +DROP TABLE IF EXISTS `role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; + SET character_set_client = utf8mb4 ; +CREATE TABLE `role` ( + `id` int(11) NOT NULL, + `name` varchar(45) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `role` +-- + +LOCK TABLES `role` WRITE; +/*!40000 ALTER TABLE `role` DISABLE KEYS */; +INSERT INTO `role` VALUES (1,'ADMIN'),(2,'USER'),(3,'OVERVIEW_CREATOR'); +/*!40000 ALTER TABLE `role` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2020-03-19 9:21:39 diff --git a/routes/api.js b/routes/api.js index ddedf46c1ea1ff827297feb6107ad20fa6722aa6..5a6ee24d95d8e35431ea2c408e3f0f5792e1fe7a 100644 --- a/routes/api.js +++ b/routes/api.js @@ -7,13 +7,13 @@ module.exports = function (app) { app.get('/api/v1/profile', function (req, res) { if (req.isAuthenticated()) { - // read data based on ID - dbconn.user.query('SELECT title, firstname, lastname, email, industry, organisation, speciality FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { + // read data based on email + dbconn.user.query('SELECT * FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { if (err) throw err res.send(rows[0]) }) } else { - res.redirect('/account/'); + res.send('authentication required'); } }); diff --git a/routes/methods.js b/routes/methods.js index d377d61cd79360dd27609a2ab7426607901a9fc6..59709d7d78802cc2232f63afb5c4c16a7431eaf2 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -132,6 +132,12 @@ var methods = { 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); + }) + }, // ======================= project db ======================= getAllProjects: function(callback) { dbconn.project.query('CALL getAllprojects', function (err, rows, fields){ @@ -146,9 +152,10 @@ var methods = { }) }, addProjectOverview: function(data, callback) { - dbconn.project.query('INSERT INTO project_overview SET ?', data, function (err, rows, fields){ + dbconn.project.query('INSERT INTO project_overview SET ?', data, function (err, results, fields){ if (err) throw err; - callback(err); + //console.log(results.insertId) + callback(results.insertId, err); }) } }; diff --git a/routes/routes-account.js b/routes/routes-account.js index edba628a284d1302dc4af590ae0f4c14bfde4e9e..7984d39e514c349e0dbc4b11c8a498d6e846278d 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -9,7 +9,7 @@ const salt = 64; // salt length // forgot pwd const async = require('async') const crypto = require('crypto') -const mailer = require('./mailer') +const nodemailer = require('nodemailer') module.exports = function (app, config, passport, i18n) { @@ -74,17 +74,28 @@ module.exports = function (app, config, passport, i18n) { res.status(200).send(spMetadata); } ); - - // ================ test i18n ================== - i18n.setLocale('de'); - app.get('/de', function(req, res) { - var greeting = i18n.__('Hello World') - res.send(greeting) + + // ======== NODEMAILER ==================== + var smtpTransport = nodemailer.createTransport({ + host: config.mailer.host, + secureConnection: config.mailer.secureConnection, + port: config.mailer.port, + auth: { + user: config.mailer.authUser, + pass: config.mailer.authPass + }, + tls: { + ciphers: config.mailer.tlsCiphers + } }); - var lang = 'DE' + var mailOptions = { + to: "", + from: config.mailer.from, + subject: "", + text: "" + }; - // ======== APP ROUTES - ACCOUNT ==================== var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert." var mailSignature = "Mit den besten Grüßen,\ndas Transferportal-Team der HFT Stuttgart\n\n"+ "Transferportal der Hochschule für Technik Stuttgart\n"+ @@ -93,7 +104,17 @@ module.exports = function (app, config, passport, i18n) { "m4lab@hft-stuttgart.de\n"+ "https://transfer.hft-stuttgart.de" var updatePasswordMailContent = "Lieber Nutzer,\n\n"+"Ihr Passwort wurde erfolgreich geändert.\n\n"+mailSignature + + // ================ test i18n ================== + i18n.setLocale('de'); + app.get('/de', function(req, res) { + var greeting = i18n.__('Hello World') + res.send(greeting) + }); + + var lang = 'DE' + // ======== APP ROUTES - ACCOUNT ==================== app.get('/', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ @@ -124,7 +145,7 @@ module.exports = function (app, config, passport, i18n) { if (req.user == null) { return res.redirect('/account/'); } - + req.user.nameID = req.user.id; req.user.nameIDFormat = req.user.idFormat; return samlStrategy.logout(req, function(err, uri) { @@ -311,11 +332,11 @@ module.exports = function (app, config, passport, i18n) { else { //req.flash('success', "Pasword updated!") req.flash('success', "Passwort aktualisiert!") - mailer.options.to = req.user.email + mailOptions.to = req.user.email //mailOptions.subject = "Your M4_LAB Password has been updated." - mailer.options.subject = updatePasswordMailSubject - mailer.options.text = updatePasswordMailContent - mailer.transport.sendMail(mailer.options, function(err) { + mailOptions.subject = updatePasswordMailSubject + mailOptions.text = updatePasswordMailContent + smtpTransport.sendMail(mailOptions, function(err) { if (err) { console.log(err) } @@ -386,10 +407,10 @@ module.exports = function (app, config, passport, i18n) { }); // send email - mailer.options.to = emailAddress; - mailer.options.subject = emailSubject; - mailer.options.text = emailContent; - mailer.transport.sendMail(mailer.options, function(err) { + mailOptions.to = emailAddress; + mailOptions.subject = emailSubject; + mailOptions.text = emailContent; + smtpTransport.sendMail(mailOptions, function(err) { done(err, 'done'); }); } @@ -449,10 +470,10 @@ module.exports = function (app, config, passport, i18n) { //req.flash('success', "Your pasword has been updated.") req.flash('success', "Passwort aktualisiert!") // send notifiaction email - mailer.options.to = user.email - mailer.options.subject = updatePasswordMailSubject - mailer.options.text = updatePasswordMailContent - mailer.transport.sendMail(mailer.options, function(err) { + mailOptions.to = user.email + mailOptions.subject = updatePasswordMailSubject + mailOptions.text = updatePasswordMailContent + smtpTransport.sendMail(mailOptions, function(err) { if (err) { console.log(err) } @@ -530,5 +551,146 @@ module.exports = function (app, config, passport, i18n) { } }) }) + app.get('/mailinglists', function (req, res) { + async.waterfall([ + function(done) { + methods.getAllMailinglists(function(mailinglistOverview, err) { + if (!err) { + done(err, mailinglistOverview) + } + }) + }, + // create JSON object of mailinglists for front-end + function(mailinglistOverview, done) { + var allMailingLists = [] // JSON object + for (let i = 0; i < mailinglistOverview.length; i++) { + // add data to JSON object + allMailingLists.push({ + id: mailinglistOverview[i].id, + name: mailinglistOverview[i].name, + src: mailinglistOverview[i].src, + projectstatus: mailinglistOverview[i].projectstatus, + project_title: mailinglistOverview[i].project_title + }); + } + + res.render(lang+'/mailinglists', { + isUserAuthenticated: req.isAuthenticated(), + user: req.user, + mailinglists: allMailingLists + }); + } + ]) + }); + + // ======== APP ROUTES - PROJECT ==================== + app.get('/project', function (req, res) { + async.waterfall([ + // get all projects from projectdb + function(done) { + methods.getAllProjects(function(projectsOverview, err) { + if (!err) { + done(err, projectsOverview) + } + }) + }, + // create JSON object for front-end + function(projectsOverview, done) { + var activeProjects = [] + var nonActiveProjects = [] + + for (var i = 0; i < projectsOverview.length; i++) { + var project = { + id: projectsOverview[i].id, + logo: projectsOverview[i].logo, + akronym: projectsOverview[i].pname, + title: projectsOverview[i].title, + summary: projectsOverview[i].onelinesummary, + category: projectsOverview[i].category, + cp: projectsOverview[i].contact_email, + gitlab: projectsOverview[i].gitlab + } + if (projectsOverview[i].projectstatus == 0) { + nonActiveProjects.push(project) + } + else if (projectsOverview[i].projectstatus == 1) { + activeProjects.push(project) + } + } + + // render the page + if (req.isAuthenticated()) { + res.render(lang+'/project/projects', { + isUserAuthenticated: true, + nonActive: nonActiveProjects, + active: activeProjects + }); + } + else { + res.render(lang+'/project/projects', { + isUserAuthenticated: false, + nonActive: nonActiveProjects, + active: activeProjects + }); + } + } + ]) + }) + + app.get('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + res.render(lang+'/project/addProjectOverview') + } + else { + res.redirect('/account/login') + } + }) + + app.post('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + var wiki = 0 + if (req.body.wiki) + wiki = 1 + + var projectOverviewData = { + pname: req.body.pname, + title: req.body.title, + onelinesummary: req.body.summary, + category: req.body.category, + logo: req.body.logo, + gitlab: req.body.gitlabURL, + wiki: wiki, + overview: req.body.overview, + question: req.body.question, + approach: req.body.approach, + result: req.body.result, + keywords: req.body.keywords, + announcement: req.body.announcement, + term: req.body.term, + further_details: req.body.furtherDetails, + website: req.body.website, + src: req.body.src, + caption: req.body.caption, + contact_firstname: req.body.contactFirstname, + contact_lastname: req.body.contactLastname, + contact_email: req.body.contactEmail, + leader_firstname: req.body.leaderFirstname, + leader_lastname: req.body.leaderLastname, + leader_email: req.body.leaderEmail + } + + methods.addProjectOverview(projectOverviewData, function(err){ + if (err) { + //req.flash('error', "Failed") + req.flash('error', "Fehlgeschlagen") + res.redirect('/account/addProjectOverview'); + } + else { + req.flash('success', 'Your project has been created.') + res.redirect('/account/project'); + } + }) + } + }) }; \ No newline at end of file diff --git a/routes/routes-project.js b/routes/routes-project.js index f05c4c060eec5da360a332611befc1ee72158957..f68aecdcfd3a935245b93dddbaeccda1b7864334 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -146,6 +146,83 @@ module.exports = function (app) { } }) + app.post('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + var wiki = 0 + if (req.body.wiki) + wiki = 1 + + var projectTerm = req.body.termForm + " - " + req.body.termTo + var projectOverviewData = { + pname: req.body.pname, + title: req.body.title, + onelinesummary: req.body.summary, + category: req.body.category, + logo: req.body.logo, + gitlab: req.body.gitlabURL, + wiki: wiki, + overview: req.body.overview, + question: req.body.question, + approach: req.body.approach, + result: req.body.result, + keywords: req.body.keywords, + announcement: req.body.announcement, + term: projectTerm, + further_details: req.body.furtherDetails, + website: req.body.website, + src: req.body.src, + caption: req.body.caption, + contact_lastname: req.body.contactName, + contact_email: req.body.contactEmail, + leader_lastname: req.body.leaderName, + leader_email: req.body.leaderEmail + } + + /* RS: Temporary solution while Project DB is still in early phase. + When User DB and Project DB are integrated and quite stabil, this operation should be done in 1 transaction. + */ + var userId // todo: make this global variable? + async.waterfall([ + // get userId by email from userdb + function(done) { + methods.getUserIdByEmail(req.user.email, function(id, err) { + if (!err) { + userId = id + done(err) + } + }) + }, + // add project overview + function(done) { + methods.addProjectOverview(projectOverviewData, function(projectOverviewId, err){ + if (!err) { + done(err, projectOverviewId) + } + }) + }, + // assign the created overview to logged-in user + function(projectOverviewId, done) { + var userProjectRoleData = { + project_id: projectOverviewId, + user_id: userId, + role_id: 3 // OVERVIEW_CREATOR + } + methods.addUserProjectRole(userProjectRoleData, function(userProjects, err) { + if (err) { + //req.flash('error', "Failed") + req.flash('error', "Fehlgeschlagen") + res.redirect('/addProjectOverview'); + } + else { + req.flash('success', 'Your project has been created.') + res.redirect('/project'); + } + }) + } + ]) + } + }) + app.get('/updateprojectoverview', function (req, res) { // only their own project }) diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index f08d9ee7937aee1b391b8cfd40bbb004173df5d6..58b2427c3063a835f93a8be4ad87515929121978 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -34,9 +34,9 @@ html(lang="de") h5 span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") p content goes here diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index e4d7e2609827baefef68378e4b42cdd06b84d8f9..32a2aff116c487f82b6c6b2bd6d50637c5cedd2f 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -35,8 +35,8 @@ html(lang="de") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/registration.pug b/views/DE/account/registration.pug index 077e41386e08e6d5e278d781d87133efaf398cfd..108afdeffadfd5b56e906cc7d307206ffa49726d 100644 --- a/views/DE/account/registration.pug +++ b/views/DE/account/registration.pug @@ -49,10 +49,10 @@ html(lang="de") h5(class="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*" required) + input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse*", maxlength="45" required) span#emailWarning(class='warning') div(class="form-group col-md-6") - input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Passwort*" required) + 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 div(class="form-row") @@ -70,15 +70,15 @@ html(lang="de") option(value="Dipl.-Ing.") Dipl.-Ing. option(value="etc.") etc. div(class='form-group col-md-4') - input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname*" required) + input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname*", maxlength="45" required) div(class='form-group col-md-4') - input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname*" required) + input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname*", maxlength="45" required) div(class="form-group") - input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen") + input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen", maxlength="45") div(class="form-group") - input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche") + input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche", maxlength="45") div(class="form-group") - input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete") + input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete", maxlength="100") p <em><small>* Pflichtfeld</small></em> input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Senden" disabled) br diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 6db09112136b41451ea1fd381e768d36282626f3..560d32bc554c360f2cc32783f4aeda33b546d0fe 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -37,9 +37,9 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 6ab101f30c8da9f6c5b53d526af7c4dd8178936b..55f5a1b66458fb86a0bd9a6e2069da57a4d370ea 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -34,8 +34,8 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes