Skip to content

Commit

Permalink
Automate DB creation
Browse files Browse the repository at this point in the history
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
  • Loading branch information
iiegn committed Apr 24, 2019
1 parent 083d8e8 commit 33e04b0
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
10 changes: 10 additions & 0 deletions data/lexonomy.sqlite.schema
Original file line number Diff line number Diff line change
@@ -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);
26 changes: 25 additions & 1 deletion website/adminscripts/init.js
Original file line number Diff line number Diff line change
Expand Up @@ -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<siteconfig.admins.length; i++){
var email=siteconfig.admins[i];
insertUser(db, email, password, passwordHash);
Expand Down
2 changes: 2 additions & 0 deletions website/siteconfig.json.template
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
"rootPath": "/",
"port": 8080,
"dataDir": "../data/",
"dbSchemaFile": "lexonomy.sqlite.schema",
"dbFile": "lexonomy.sqlite",
"verbose": true,
"admins": ["root@localhost"],
"trackingCode": "",
Expand Down

0 comments on commit 33e04b0

Please sign in to comment.