-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.js
More file actions
91 lines (79 loc) · 2.25 KB
/
database.js
File metadata and controls
91 lines (79 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// database.js: Creates and manages the database
// Imports
var sqlite3 = require('sqlite3');
var mkdirp = require('mkdirp');
var crypto = require('crypto');
// Create or open database
mkdirp.sync('./database/');
var db = new sqlite3.Database('./database/database.db');
// Hash password function
db.hashPassword = function(password, salt) {
return crypto.pbkdf2Sync(password, salt, 310000, 32, 'sha256');
}
// Create tables
db.serialize(function() {
// Create users table
db.run("CREATE TABLE IF NOT EXISTS users ( \
id INTEGER PRIMARY KEY, \
username TEXT UNIQUE, \
name TEXT, \
email TEXT UNIQUE, \
email_verified INTEGER, \
hashed_password BLOB, \
salt BLOB, \
token TEXT, \
login DATE \
)");
// Create times table
db.run("CREATE TABLE IF NOT EXISTS times ( \
owner_id INTEGER, \
username TEXT, \
time DATE NOT NULL, \
status TEXT, \
PRIMARY KEY (owner_id, time) \
)");
// Chat history
const createTableQuery = `
CREATE TABLE IF NOT EXISTS chat_history (
id INT AUTO_INCREMENT PRIMARY KEY,
room VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL,
message TEXT NOT NULL,
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)`;
db.run(createTableQuery, (err, result) => {
if (err) throw err;
});
// Add user
var salt = crypto.randomBytes(16);
db.run('INSERT OR IGNORE INTO users (username, name, email, hashed_password, salt) VALUES (?, ?, ?, ?, ?)', [
'admin@drinks.chat',
'Tom',
'admin@drinks.chat',
db.hashPassword('Drinks256', salt),
salt
]);
// List users
var query = "SELECT * FROM users";
db.all(query, [], (err, rows) => {
console.log("Users:");
console.log(rows);
});
});
// Rooms
db.storeMessage = function(room, username, message) {
const query = 'INSERT INTO chat_history (room, username, message) VALUES (?, ?, ?)';
db.all(query, [room, username, message], (err, result) => {
if (err) throw err;
console.log("Message in " + room + ": " + message);
});
}
db.loadChatHistory = function(room, callback) {
const query = 'SELECT * FROM chat_history WHERE room = ? ORDER BY timestamp';
db.all(query, [room], (err, results) => {
if (err) throw err;
callback(results);
});
}
// Export
module.exports = db;