diff --git a/auth.py b/auth.py
index 2e30dfb..6ff9786 100644
--- a/auth.py
+++ b/auth.py
@@ -4,19 +4,66 @@ from markupsafe import escape
from mastodon import Mastodon
from email.headerregistry import Address
import jwt
-import shelve
from gevent.pywsgi import WSGIServer
import os
+import sqlite3
+import zulip
+import random
+import string
SECRET = os.environ["SECRET"]
ZULIP = f"https://{os.environ['ZULIP']}/accounts/login/jwt/"
-REDIRECT = f"https://{os.environ['ZULIP']}/callback"
-SHELVE_LOCATION = os.environ.get("DB_DIR", "/var/lib/fedi-zulip")
-PORT = int(os.environ.get("PORT", "5000"))
+REDIRECT = f"https://{os.environ['ZULIP']}/fedi-auth/callback"
+DB = os.environ.get("DB", "/var/lib/fedi-zulip/db/applications")
+
+print(f"""
+Zulip is: {os.environ['ZULIP']}
+DB location is: {DB}
+""")
+
+con = sqlite3.connect(DB)
+cur = con.cursor()
+
+zulip_client = zulip.Client()
+
+def get_zulip_user(handle):
+ zulip_client.call_endpoint(
+ url=f"/users/{handle}",
+ method="GET"
+ )
+
+def create_zulip_user(handle):
+ password = ''.join(random.choices(string.ascii_uppercase + string.digits, k=40))
+ return zulip_client.create_user({
+ "email": handle,
+ "password": password,
+ "full_name": handle.split('@')[0]
+ })
+
+def get_or_create_zulip_user(handle):
+ user = get_zulip_user(handle)
+ if user is None:
+ print(f"User: {handle} created.")
+ user = create_zulip_user(handle)
+ else:
+ print(f"User: {handle} already exists.")
+
+ return user
+
+
+cur.execute("CREATE TABLE IF NOT EXISTS applications(instance TEXT PRIMARY KEY, client TEXT, secret TEXT, disabled BOOLEAN DEFAULT FALSE)")
+
+def get_application(instance):
+ res = cur.execute("SELECT client, secret FROM applications WHERE instance = ?", [instance])
+ return res.fetchone();
+
+def set_application(instance, client, secret):
+ res = cur.execute("INSERT INTO applications(instance, client, secret) values (?, ?, ?)", (instance, client, secret));
+ con.commit();
app = Flask(__name__)
-@app.get("/")
+@app.get("/fedi-auth/")
def index():
return f"""
@@ -27,7 +74,7 @@ def index():
You can use this page to login to {os.environ['ZULIP']} using your
Pleroma, Akkoma or Mastodon handle. Format is nickname@server
.