diff --git a/inc/database.php b/inc/database.php index b946115..0f13124 100755 --- a/inc/database.php +++ b/inc/database.php @@ -9,20 +9,51 @@ class DataBase extends SQLite3 { $sql = " CREATE TABLE IF NOT EXISTS users ( - ID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, - HANDLE TEXT NOT NULL UNIQUE, - NAME TEXT NOT NULL, - ABOUT TEXT NOT NULL + id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, + uuid TEXT UNIQUE, + pass TEXT, + email TEXT UNIQUE, + handle TEXT NOT NULL UNIQUE, + name TEXT NOT NULL, + about TEXT + ); + + CREATE TABLE IF NOT EXISTS personas ( + id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, + uuid TEXT UNIQUE, + userid INTEGER NOT NULL, + handle TEXT NOT NULL, + name TEXT NOT NULL, + about TEXT, + colour INTEGER, + FOREIGN KEY (userid) REFERENCES users(id), + UNIQUE (userid, handle) ); CREATE TABLE IF NOT EXISTS posts ( - ID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, - TIME INTEGER NOT NULL, - USERID INTEGER NOT NULL, - TEXT TEXT NOT NULL + id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, + uuid TEXT UNIQUE, + time INTEGER NOT NULL, + userid INTEGER NOT NULL, + personaid INTEGER, + text TEXT NOT NULL, + FOREIGN KEY (userid) REFERENCES users(id) ); - INSERT OR IGNORE INTO users (ID, HANDLE, NAME, ABOUT) VALUES ('0', 'SYSTEM', 'SYSTEM', ''); + CREATE TABLE IF NOT EXISTS comments ( + id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, + uuid TEXT UNIQUE, + time INTEGER NOT NULL, + userid INTEGER NOT NULL, + personaid INTEGER, + postid INTEGER NOT NULL, + text TEXT NOT NULL, + FOREIGN KEY (postid) REFERENCES posts(id), + FOREIGN KEY (userid) REFERENCES users(id), + FOREIGN KEY (personaid) REFERENCES personas(id) + ); + + INSERT OR IGNORE INTO users (id, handle, name, about, uuid) VALUES ('0', 'SYSTEM', 'SYSTEM', 'SYSTEM', 'SYSTEM'); "; @@ -30,23 +61,47 @@ class DataBase extends SQLite3 { } - function addUser($handle, $name, $about="") { - $sql = "INSERT INTO users (HANDLE, NAME, ABOUT) VALUES ('$handle', '$name', '$about')"; + function addUser($handle, $name, $about=NULL) { + $uuid = $this->uuidGen(); + $sql = "INSERT INTO users (handle, name, about, uuid) VALUES ('$handle', '$name', '$about', '$uuid')"; $ret = $this->exec($sql); if(!$ret) { die($this->lastErrorMsg()); } } - function addPost($contents) { - $userid = 0; + function addPost($userid, $personaid, $contents) { $time = time(); - $sql = "INSERT INTO posts (TIME, USERID, TEXT) values ('$time', '$userid', '$contents')"; + $uuid = $this->uuidGen(); + $sql = "INSERT INTO posts (time, userid, personaid, text, uuid) values ('$time', '$userid', '$personaid', '$contents', '$uuid')"; $ret = $this->exec($sql); if(!$ret) { die($this->lastErrorMsg()); } } + + function passwordSet($userid, $password=NULL) { + $hash = empty($password) ? NULL : password_hash($password, PASSWORD_DEFAULT); + $sql = "UPDATE USERS SET pass='$hash' WHERE id='$userid';"; + $ret = $this->exec($sql); + if(!$ret) { + die($this->lastErrorMsg()); + } + } + + function passwordVerify($userid, $password) { + $sql = "SELECT pass FROM users WHERE id='$userid';"; + $ret = $this->query($sql)->fetchArray(); + if(!$ret) { + return false; + } + $dbhash = $ret[0]; + return password_verify($password, $dbhash); + } + + function uuidGen() { + return base64_encode(random_bytes(12)); + } } ?>