Use IF NOT EXISTS instead of sqlite specific hack. Clean up formating. Other minor fixes.

This commit is contained in:
Thomas L 2018-03-22 21:15:15 +01:00
parent 235b8524f8
commit 404be47d1b

152
db.py
View file

@ -17,87 +17,86 @@ class DB(object):
# dbfile = ':memory:' # dbfile = ':memory:'
self.conn = sqlite3.connect(dbfile) self.conn = sqlite3.connect(dbfile)
self.cur = self.conn.cursor() 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() self.create()
print("Initialized new sqlite database.")
self.secret = urandom(32) self.secret = urandom(32)
with open('config.toml') as configfile: with open('config.toml') as configfile:
self.config = toml.load(configfile) self.config = toml.load(configfile)
def create(self): def create(self):
# init db # init db
self.cur.executescript('\ self.cur.executescript('''
CREATE TABLE "user" (\ CREATE TABLE IF NOT EXISTS user (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`email` TEXT,\ email TEXT,
`passhash` TEXT,\ passhash TEXT,
`enabled` INTEGER DEFAULT 1\ enabled INTEGER DEFAULT 1
);\ );
CREATE TABLE "twitter_request_tokens" (\ CREATE TABLE IF NOT EXISTS twitter_request_tokens (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`user_id` INTEGER,\ user_id INTEGER,
`request_token` TEXT,\ request_token TEXT,
FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ FOREIGN KEY(user_id) REFERENCES user(id)
);\ );
CREATE TABLE "twitter_accounts" (\ CREATE TABLE IF NOT EXISTS twitter_accounts (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`user_id` INTEGER,\ user_id INTEGER,
`client_id` TEXT,\ client_id TEXT,
`client_secret` TEXT,\ client_secret TEXT,
FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ FOREIGN KEY(user_id) REFERENCES user(id)
);\ );
CREATE TABLE "trigger_good" (\ CREATE TABLE IF NOT EXISTS trigger_good (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`user_id` INTEGER,\ user_id INTEGER,
`words` TEXT,\ words TEXT,
FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ FOREIGN KEY(user_id) REFERENCES user(id)
);\ );
CREATE TABLE "trigger_bad" (\ CREATE TABLE IF NOT EXISTS trigger_bad (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`user_id` INTEGER,\ user_id INTEGER,
`words` TEXT,\ words TEXT,
FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ FOREIGN KEY(user_id) REFERENCES user(id)
);\ );
CREATE TABLE "mastodon_instances" (\ CREATE TABLE IF NOT EXISTS mastodon_instances (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`instance` TEXT,\ instance TEXT,
`client_id` TEXT,\ client_id TEXT,
`client_secret` TEXT\ client_secret TEXT
);\ );
CREATE TABLE "mastodon_accounts" (\ CREATE TABLE IF NOT EXISTS mastodon_accounts (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`user_id` INTEGER,\ user_id INTEGER,
`access_token` TEXT,\ access_token TEXT,
`instance_id` TEXT,\ instance_id TEXT,
`active` INTEGER,\ active INTEGER,
FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` ),\ FOREIGN KEY(user_id) REFERENCES user(id),
FOREIGN KEY(`instance_id`) REFERENCES `mastodon_instances` ( `id` )\ FOREIGN KEY(instance_id) REFERENCES mastodon_instances(id)
);\ );
CREATE TABLE "seen_toots" (\ CREATE TABLE IF NOT EXISTS seen_toots (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`user_id` INTEGER,\ user_id INTEGER,
`mastodon_accounts_id` INTEGER,\ mastodon_accounts_id INTEGER,
`toot_id` TEXT,\ toot_id TEXT,
FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` ),\ FOREIGN KEY(user_id) REFERENCES user(id),
FOREIGN KEY(`mastodon_accounts_id`) REFERENCES `mastodon_accounts` ( `id` )\ FOREIGN KEY(mastodon_accounts_id)
);\ REFERENCES mastodon_accounts(id)
CREATE TABLE "mail" (\ );
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ CREATE TABLE IF NOT EXISTS mail (
`user_id` INTEGER,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`email` TEXT,\ user_id INTEGER,
`active` INTEGER,\ email TEXT,
FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ active INTEGER,
);\ FOREIGN KEY(user_id) REFERENCES user(id)
CREATE TABLE "seen_tweets" (\ );
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,\ CREATE TABLE IF NOT EXISTS seen_tweets (
`user_id` INTEGER,\ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`twitter_accounts_id` INTEGER,\ user_id INTEGER,
`tweet_id` TEXT,\ twitter_accounts_id INTEGER,
FOREIGN KEY(`user_id`) REFERENCES `user` ( `id` )\ tweet_id TEXT,
FOREIGN KEY(`twitter_accounts_id`) REFERENCES `twitter_accounts` ( `id` )\ FOREIGN KEY(user_id) REFERENCES user(id)
);\ FOREIGN KEY(twitter_accounts_id)
') REFERENCES twitter_accounts(id)
);
''')
def token(self, email, password): def token(self, email, password):
return jwt.encode({ return jwt.encode({
@ -120,7 +119,7 @@ class DB(object):
row = self.cur.fetchone() row = self.cur.fetchone()
if not row: if not row:
return None # No user with this email 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')): password.encode('utf-8')):
return None # Wrong passphrase return None # Wrong passphrase
return User(self, row[0]) return User(self, row[0])
@ -135,7 +134,8 @@ class DB(object):
def send_confirmation_mail(self, confirm_link, email): def send_confirmation_mail(self, confirm_link, email):
m = sendmail.Mailer(self.config) m = sendmail.Mailer(self.config)
try: try:
m.send("Complete your registration here: " + confirm_link, email, "[Ticketfrei] Confirm your account") m.send("Complete your registration here: " + confirm_link,
email, "[Ticketfrei] Confirm your account")
except smtplib.SMTPRecipientsRefused: except smtplib.SMTPRecipientsRefused:
return "Please enter a valid E-Mail address." return "Please enter a valid E-Mail address."