diff --git a/app.js b/app.js index 8a1f64e..e1b424a 100644 --- a/app.js +++ b/app.js @@ -9,6 +9,7 @@ var indexRouter = require('./routes/index'); var usersRouter = require('./routes/user'); var messagesRouter = require('./routes/message'); var loginRouter = require('./routes/login'); +var registerRouter = require('./routes/register'); var app = express(); @@ -31,6 +32,7 @@ app.use('/', indexRouter); app.use('/user', usersRouter); app.use('/message', messagesRouter); app.use('/login', loginRouter); +app.use('/register', registerRouter); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/database/socialbot.db b/database/socialbot.db index eb7e245..dc7bafa 100644 Binary files a/database/socialbot.db and b/database/socialbot.db differ diff --git a/migrations/20220209204150-create-session.js b/migrations/20220209204150-create-session.js new file mode 100644 index 0000000..2695cf5 --- /dev/null +++ b/migrations/20220209204150-create-session.js @@ -0,0 +1,30 @@ +'use strict'; +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.createTable('Sessions', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + sessionid: { + type: Sequelize.TEXT + }, + agentid: { + type: Sequelize.TEXT + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + async down(queryInterface, Sequelize) { + await queryInterface.dropTable('Sessions'); + } +}; \ No newline at end of file diff --git a/models/index.js b/models/index.js index a4a0395..c475401 100644 --- a/models/index.js +++ b/models/index.js @@ -26,6 +26,8 @@ fs db.User.belongsToMany(db.Message, {foreignKey: 'UserId', through: 'UserMessages'}); db.Message.belongsTo(db.User, {through: 'UserMessages'}); + db.User.belongsToMany(db.Session, {foreignKey: 'UserId', through: 'UserSessions'}); + db.Session.belongsTo(db.User, {through: 'UserSessions'}); Object.keys(db).forEach(modelName => { if (db[modelName].associate) { diff --git a/models/session.js b/models/session.js new file mode 100644 index 0000000..caa0817 --- /dev/null +++ b/models/session.js @@ -0,0 +1,24 @@ +'use strict'; +const { + Model +} = require('sequelize'); +module.exports = (sequelize, DataTypes) => { + class Session extends Model { + /** + * Helper method for defining associations. + * This method is not a part of Sequelize lifecycle. + * The `models/index` file will call this method automatically. + */ + static associate(models) { + // define association here + } + } + Session.init({ + sessionid: DataTypes.TEXT, + agentid: DataTypes.TEXT + }, { + sequelize, + modelName: 'Session', + }); + return Session; +}; \ No newline at end of file diff --git a/routes/login.js b/routes/login.js index 6475875..6ef9f5b 100644 --- a/routes/login.js +++ b/routes/login.js @@ -1,7 +1,9 @@ var express = require('express'); +const { UniqueConstraintError } = require('sequelize/dist/index.js'); var router = express.Router(); const db = require('../models'); var User = db.User; +const crypto = require('crypto'); /* GET home page. */ router.get('/', function(req, res, next) { @@ -17,7 +19,20 @@ router.post('/', async function(req, res, next) { } }); console.log(user); - res.render('login'); + if(user) { + var uuid = crypto.randomUUID(); + var agentid = req.rawHeaders[3]; + var session = await user.createSession({ + sessionid: uuid, + agentid: agentid + }); + console.log(session); + var maxage = 60 * 60 * 24; + res.cookie('sessionid', session.sessionid, {maxAge: maxage, httpOnly: true}); + res.redirect('/'); + } else { + res.render('login'); + } }); module.exports = router; diff --git a/routes/register.js b/routes/register.js new file mode 100644 index 0000000..93e88d7 --- /dev/null +++ b/routes/register.js @@ -0,0 +1,27 @@ +var express = require('express'); +var router = express.Router(); +const db = require('../models'); +var User = db.User; +var Session = db.Session; + +/* GET home page. */ +router.get('/', function(req, res, next) { + res.render('register'); +}); + +router.post('/', async function(req, res, next) { + console.log(req.body); + if((req.body.username === '') || (req.body.email === '') || (req.body.password === '')) { + res.redirect('/register'); + } else { + var user = await User.create({ + name: req.body.username, + email: req.body.email, + password: req.body.password, + }); + console.log(user); + res.redirect('/login'); + } +}); + +module.exports = router; diff --git a/views/login.ejs b/views/login.ejs index f3bf712..2c4154f 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -27,7 +27,7 @@
diff --git a/views/register.ejs b/views/register.ejs new file mode 100644 index 0000000..31f2612 --- /dev/null +++ b/views/register.ejs @@ -0,0 +1,42 @@ + + + + +