diff --git a/db.py b/db.py index eb8a50d..c6f903f 100644 --- a/db.py +++ b/db.py @@ -15,86 +15,85 @@ class DB(object): 'ticketfrei.sqlite') self.conn = sqlite3.connect(dbfile) self.cur = self.conn.cursor() - self.cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='user';") - if self.cur.fetchall() == []: - self.create() - print("Initialized new sqlite database.") + self.create() self.secret = urandom(32) self.config = ticketfrei.get_config() def create(self): # init db - self.cur.executescript('\ - CREATE TABLE "user" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `email` TEXT,\ - `passhash` TEXT,\ - `enabled` INTEGER DEFAULT 1\ - );\ - CREATE TABLE "twitter_request_tokens" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `user_id` INTEGER,\ - `request_token` TEXT,\ - FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ - );\ - CREATE TABLE "twitter_accounts" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `user_id` INTEGER,\ - `client_id` TEXT,\ - `client_secret` TEXT,\ - FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ - );\ - CREATE TABLE "trigger_good" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `user_id` INTEGER,\ - `words` TEXT,\ - FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ - );\ - CREATE TABLE "trigger_bad" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `user_id` INTEGER,\ - `words` TEXT,\ - FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ - );\ - CREATE TABLE "mastodon_instances" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `instance` TEXT,\ - `client_id` TEXT,\ - `client_secret` TEXT\ - );\ - CREATE TABLE "mastodon_accounts" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `user_id` INTEGER,\ - `access_token` TEXT,\ - `instance_id` TEXT,\ - `active` INTEGER,\ - FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` ),\ - FOREIGN KEY(`instance_id`) REFERENCES `mastodon_instances` ( `id` )\ - );\ - CREATE TABLE "seen_toots" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `user_id` INTEGER,\ - `mastodon_accounts_id` INTEGER,\ - `toot_id` TEXT,\ - FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` ),\ - FOREIGN KEY(`mastodon_accounts_id`) REFERENCES `mastodon_accounts` ( `id` )\ - );\ - CREATE TABLE "mail" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `user_id` INTEGER,\ - `email` TEXT,\ - `active` INTEGER,\ - FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ - );\ - CREATE TABLE "seen_tweets" (\ - `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ - `user_id` INTEGER,\ - `twitter_accounts_id` INTEGER,\ - `tweet_id` TEXT,\ - FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ - FOREIGN KEY(`twitter_accounts_id`) REFERENCES `twitter_accounts` ( `id` )\ - );\ - ') + self.cur.executescript(''' + CREATE TABLE IF NOT EXISTS user ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + email TEXT, + passhash TEXT, + enabled INTEGER DEFAULT 1 + ); + CREATE TABLE IF NOT EXISTS twitter_request_tokens ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + user_id INTEGER, + request_token TEXT, + FOREIGN KEY(user_id) REFERENCES user(id) + ); + CREATE TABLE IF NOT EXISTS twitter_accounts ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + user_id INTEGER, + client_id TEXT, + client_secret TEXT, + FOREIGN KEY(user_id) REFERENCES user(id) + ); + CREATE TABLE IF NOT EXISTS trigger_good ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + user_id INTEGER, + words TEXT, + FOREIGN KEY(user_id) REFERENCES user(id) + ); + CREATE TABLE IF NOT EXISTS trigger_bad ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + user_id INTEGER, + words TEXT, + FOREIGN KEY(user_id) REFERENCES user(id) + ); + CREATE TABLE IF NOT EXISTS mastodon_instances ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + instance TEXT, + client_id TEXT, + client_secret TEXT + ); + CREATE TABLE IF NOT EXISTS mastodon_accounts ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + user_id INTEGER, + access_token TEXT, + instance_id TEXT, + active INTEGER, + FOREIGN KEY(user_id) REFERENCES user(id), + FOREIGN KEY(instance_id) REFERENCES mastodon_instances(id) + ); + CREATE TABLE IF NOT EXISTS seen_toots ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + user_id INTEGER, + mastodon_accounts_id INTEGER, + toot_id TEXT, + FOREIGN KEY(user_id) REFERENCES user(id), + FOREIGN KEY(mastodon_accounts_id) + REFERENCES mastodon_accounts(id) + ); + CREATE TABLE IF NOT EXISTS mail ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + user_id INTEGER, + email TEXT, + active INTEGER, + FOREIGN KEY(user_id) REFERENCES user(id) + ); + CREATE TABLE IF NOT EXISTS seen_tweets ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + user_id INTEGER, + twitter_accounts_id INTEGER, + tweet_id TEXT, + FOREIGN KEY(user_id) REFERENCES user(id) + FOREIGN KEY(twitter_accounts_id) + REFERENCES twitter_accounts(id) + ); + ''') def token(self, email, password): return jwt.encode({ @@ -117,7 +116,7 @@ class DB(object): row = self.cur.fetchone() if not row: return None # No user with this email - if not scrypt_mcf_check(row[1].encode("utf-8"), + if not scrypt_mcf_check(row[1].encode('ascii'), password.encode('utf-8')): return None # Wrong passphrase return User(self, row[0])