storing sessions

This commit is contained in:
counterweight 2025-02-06 23:23:36 +01:00
parent 1b6f140b25
commit b1ef0821de
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
7 changed files with 1576 additions and 1 deletions

Binary file not shown.

11
database.js Normal file
View file

@ -0,0 +1,11 @@
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: './data/database.sqlite',
define: {
timestamps: false
},
});
module.exports = sequelize;

View file

@ -5,6 +5,8 @@ services:
build: .
ports:
- "3000:3000"
volumes:
- ./container-data:/app/data
caddy:
image: caddy:2

View file

@ -2,18 +2,33 @@ const express = require('express');
const uuid = require("uuid");
const cookieParser = require('cookie-parser');
const sequelize = require('./database');
const Session = require('./models/Session');
const app = express();
const port = 3000;
sequelize.sync()
.then(() => {
console.log('Database synced');
})
.catch(err => {
console.error('Error syncing the database:', err);
});
app.use(cookieParser());
app.set('view engine', 'ejs');
app.set('views', './views');
app.use((req, res, next) => {
app.use(async (req, res, next) => {
if (!req.cookies.sessionUuid) {
const sessionUuid = uuid.v7();
res.cookie('sessionUuid', sessionUuid, { httpOnly: true, maxAge: 86400000 });
const session = await Session.create({
uuid: sessionUuid,
created_at: new Date().toISOString()
})
}
next();
});

17
models/Session.js Normal file
View file

@ -0,0 +1,17 @@
const { DataTypes } = require('sequelize');
const sequelize = require('../database');
const Session = sequelize.define('Session', {
uuid: {
type: DataTypes.UUID,
allowNull: false,
unique: true,
primaryKey: true
},
created_at: {
type: DataTypes.DATE,
allowNull: false
},
});
module.exports = Session;

1528
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -5,6 +5,8 @@
"cookie-parser": "^1.4.7",
"ejs": "^3.1.10",
"express": "^4.17.1",
"sequelize": "^6.37.5",
"sqlite3": "^5.1.7",
"uuid": "^11.0.5"
},
"description": "",