From 751f9154cc34c44e1afba2ad5f8d900461bd45e7 Mon Sep 17 00:00:00 2001
From: Thomas L <tom@dl6tom.de>
Date: Sat, 24 Mar 2018 15:02:11 +0100
Subject: [PATCH] Add files for deployment. Make testing use memory-DB.

---
 db.py                             | 10 ++++------
 deployment/ticketfrei-web.service | 16 ++++++++++++++++
 deployment/uwsgi.ini              | 11 +++++++++++
 frontend.py                       | 11 ++++++++---
 4 files changed, 39 insertions(+), 9 deletions(-)
 create mode 100644 deployment/ticketfrei-web.service
 create mode 100644 deployment/uwsgi.ini

diff --git a/db.py b/db.py
index 86437b3..49fffc8 100644
--- a/db.py
+++ b/db.py
@@ -2,7 +2,7 @@ from bottle import redirect, request
 from functools import wraps
 from inspect import Signature
 import jwt
-from os import path, urandom
+from os import urandom
 from pylibscrypt import scrypt_mcf, scrypt_mcf_check
 import sqlite3
 import prepare
@@ -10,11 +10,9 @@ from user import User
 
 
 class DB(object):
-    def __init__(self):
+    def __init__(self, dbfile):
         self.config = prepare.get_config()
         self.logger = prepare.get_logger(self.config)
-        dbfile = path.join(path.dirname(path.abspath(__file__)),
-                           self.config['database']['db_path'])
         self.conn = sqlite3.connect(dbfile)
         self.cur = self.conn.cursor()
         self.create()
@@ -149,8 +147,8 @@ class DBPlugin(object):
     name = 'DBPlugin'
     api = 2
 
-    def __init__(self, loginpage):
-        self.db = DB()
+    def __init__(self, dbfile, loginpage):
+        self.db = DB(dbfile)
         self.loginpage = loginpage
 
     def close(self):
diff --git a/deployment/ticketfrei-web.service b/deployment/ticketfrei-web.service
new file mode 100644
index 0000000..9ffbd00
--- /dev/null
+++ b/deployment/ticketfrei-web.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Ticketfrei Web Application
+After=syslog.target network.target
+
+[Service]
+ExecStart=/usr/bin/uwsgi --ini /srv/ticketfrei/deployment/uwsgi.ini
+# Requires systemd version 211 or newer
+RuntimeDirectory=uwsgi
+Restart=always
+KillSignal=SIGQUIT
+Type=notify
+StandardError=syslog
+NotifyAccess=all
+
+[Install]
+WantedBy=multi-user.target
diff --git a/deployment/uwsgi.ini b/deployment/uwsgi.ini
new file mode 100644
index 0000000..bcb8257
--- /dev/null
+++ b/deployment/uwsgi.ini
@@ -0,0 +1,11 @@
+[uwsgi]
+plugins = python3
+master = true
+uid = www-data
+gid = www-data
+processes = 1
+# logto = /var/log/ticketfrei.log
+socket = /var/run/ticketfrei/ticketfrei.sock
+chmod-socket = 660
+wsgi-file = /srv/ticketfrei/frontend.py
+virtualenv = /srv/ticketfrei/venv
diff --git a/frontend.py b/frontend.py
index b57ccfe..21c6be9 100755
--- a/frontend.py
+++ b/frontend.py
@@ -143,6 +143,11 @@ def login_mastodon(user):
         return dict(error='Login to Mastodon failed.')
 
 
-config = prepare.get_config()
-bottle.install(DBPlugin('/'))
-bottle.run(host=config['web']['host'], port=8080)
+if __name__ == '__main__':
+    # testing only
+    bottle.install(DBPlugin(':memory:', '/'))
+    bottle.run(host='localhost', port=8080)
+else:
+    config = prepare.get_config()
+    bottle.install(DBPlugin(config['database']['db_path'], '/'))
+    application = bottle.default_app()