From 33e04b00b90e493510d0fd194fe37c62edda9175 Mon Sep 17 00:00:00 2001 From: "egon w. stemle" Date: Wed, 24 Apr 2019 20:05:01 +0200 Subject: [PATCH] Automate DB creation This addresses #108 and (partly) #91 - Introduce `siteconfig` vars `dbSchemaFile` and `dbFile` - Add a schema textfile for the DB `dbFile:lexonomy.sqlite` - Use this file during `node adminscripts/init.js` and init the DB --- data/lexonomy.sqlite.schema | 10 ++++++++++ website/adminscripts/init.js | 26 +++++++++++++++++++++++++- website/siteconfig.json.template | 2 ++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 data/lexonomy.sqlite.schema diff --git a/data/lexonomy.sqlite.schema b/data/lexonomy.sqlite.schema new file mode 100644 index 00000000..2b9ea25c --- /dev/null +++ b/data/lexonomy.sqlite.schema @@ -0,0 +1,10 @@ +CREATE TABLE dicts (id TEXT PRIMARY KEY, title TEXT); +CREATE INDEX title ON dicts (title); +CREATE TABLE users (email TEXT PRIMARY KEY, passwordHash TEXT, sessionKey TEXT, sessionLast DATETIME, apiKey TEXT, ske_id INTEGER, ske_username TEXT, consent INTEGER, ske_apiKey TEXT); +CREATE INDEX email_password ON users (email, passwordHash); +CREATE INDEX email_session ON users (email, sessionKey, sessionLast); +CREATE TABLE user_dict (id INTEGER PRIMARY KEY AUTOINCREMENT, dict_id TEXT, user_email TEXT); +CREATE INDEX dict_id ON user_dict (dict_id); +CREATE INDEX user_email ON user_dict (user_email); +CREATE TABLE recovery_tokens (email text, requestAddress text, token text, expiration datetime, usedDate datetime, usedAddress text); +CREATE TABLE register_tokens (email text, requestAddress text, token text, expiration datetime, usedDate datetime, usedAddress text); diff --git a/website/adminscripts/init.js b/website/adminscripts/init.js index 44ac5798..bb983713 100644 --- a/website/adminscripts/init.js +++ b/website/adminscripts/init.js @@ -4,10 +4,34 @@ const sqlite3 = require('sqlite3').verbose(); //https://www.npmjs.com/package/sq const sha1 = require('sha1'); //https://www.npmjs.com/package/sha1 fs.readFile(path.join(__dirname, "../siteconfig.json"), "utf8", function(err, content){ + if (err) { + console.log(err); + } var siteconfig=JSON.parse(content); + var dbFile = path.join(siteconfig.dataDir, siteconfig.dbFile); + + // Prepare to initialise the DB + var db = new sqlite3.Database(dbFile, function(err){ + if (err) { + console.log(err) + return + } + console.log('Connected to ' + dbFile + ' database.') + }); + // Read the DB Schema into a String + var dbSchema = fs.readFileSync(path.join(siteconfig.dataDir, siteconfig.dbSchemaFile), 'utf8'); + // Initialise the DB (in case it already exists this will print warninigs) + db.exec(dbSchema, function(err){ + if (err) { + console.log(err); + console.log("Likely the DB has already been created."); + } else { + console.log("Initialised " + siteconfig.dbFile + " with: \n" + dbSchema); + } + }); + var password="lexonomy"; var passwordHash=sha1(password); - var db=new sqlite3.Database(path.join(siteconfig.dataDir, "lexonomy.sqlite"), sqlite3.OPEN_READWRITE, function(){db.run('PRAGMA foreign_keys=on')}); for(var i=0; i