♻️ refactor

This commit is contained in:
JMARyA 2022-08-31 17:05:47 +02:00
parent ecb01dfc75
commit 06d7867378
Signed by: jmarya
GPG key ID: 901B2ADDF27C2263
6 changed files with 113 additions and 97 deletions

3
.gitignore vendored
View file

@ -135,3 +135,6 @@ cython_debug/
/db/ /db/
.vscode .vscode
/data /data
# Cached Files
/src/static

5
src/fn.py Normal file
View file

@ -0,0 +1,5 @@
import flask
def is_onion(req: flask.globals.request) -> bool:
return req.host.endswith("onion")

60
src/html_fn.py Normal file
View file

@ -0,0 +1,60 @@
import requests
import os
from htmlpy import *
# Wrapper for Base HTML
def buildSite(content, title=None):
return Document(
head=Head(
[
Title(title),
Meta(
name="viewport",
content="user-scalable=no, width=device-width, initial-scale=1.0",
),
BOOTSTRAP,
]
),
body=Body(
content,
global_attr=GlobalAttributes(
css_class="bg-dark text-white justify-content-center text-center"
),
),
)
def download_file(url, file):
os.makedirs("/app/static/", exist_ok=True)
r = requests.get(url, allow_redirects=True)
open(file, "wb").write(r.content)
# Downloads all bootstrap files to flasks static directory
def cache_bootstrap():
download_file(
"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css",
"/app/static/bootstrap.min.css",
)
download_file(
"https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css",
"/app/static/bootstrap-icons.css",
)
download_file(
"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js",
"/app/static/bootstrap.bundle.min.js",
)
# Bootstrap CSS
BOOTSTRAP = [
Reference(
"/static/bootstrap.min.css",
"stylesheet",
),
Reference(
"/static/bootstrap-icons.css",
"stylesheet",
),
Script(src="/static/bootstrap.bundle.min.js"),
]

View file

@ -1,83 +1,17 @@
from flask import request, session, Blueprint, Response, redirect, escape
from htmlpy import *
from config import CONFIG
from os.path import exists from os.path import exists
import os
import datetime
import requests
import gnupg import gnupg
from flask import request, Blueprint, Response, redirect
from htmlpy import *
from config import CONFIG
from html_fn import buildSite
from msg import encrypt, save_message
from notification import notify
main_pages = Blueprint("main", __name__) main_pages = Blueprint("main", __name__)
def download_file(url, file):
os.makedirs("/app/static/", exist_ok=True)
r = requests.get(url, allow_redirects=True)
open(file, "wb").write(r.content)
# Downloads all bootstrap files to flasks static directory
def cache_bootstrap():
download_file(
"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css",
"/app/static/bootstrap.min.css",
)
download_file(
"https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css",
"/app/static/bootstrap-icons.css",
)
download_file(
"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js",
"/app/static/bootstrap.bundle.min.js",
)
# Bootstrap CSS
BOOTSTRAP = [
Reference(
"/static/bootstrap.min.css",
"stylesheet",
),
Reference(
"/static/bootstrap-icons.css",
"stylesheet",
),
Script(src="/static/bootstrap.bundle.min.js"),
]
# Encrypt msg with GPG
def encrypt(msg):
pgp = gnupg.GPG()
pgp.import_keys(open("/config/pub.key").read())
return str(pgp.encrypt(msg, pgp.list_keys()[0]["fingerprint"]))
# Save msg in `/data/messages`
def save_message(msg, name=""):
os.makedirs("/data/messages", exist_ok=True)
dt = datetime.datetime.now().strftime("%Y-%m-%d.%H-%M")
f = open(f"/data/messages/{name}-{dt}.asc", "w")
f.write(msg)
# Send Notification to all handlers
def notify(msg, title=None):
try:
gotify_notification(msg, title)
except:
pass
# Gotify Notification Handler
def gotify_notification(msg, title=None):
token = CONFIG["notify"]["gotify"]["token"]
url = CONFIG["notify"]["gotify"]["host"]
requests.post(
f"https://{url}/message?token={token}",
{"title": title, "message": msg, "priority": "5"},
)
# Message Sending Page # Message Sending Page
@main_pages.route("/message", methods=["GET", "POST"]) @main_pages.route("/message", methods=["GET", "POST"])
def send_message(): def send_message():
@ -139,28 +73,6 @@ def send_message():
).to_code() ).to_code()
# Wrapper for Base HTML
def buildSite(content, title=None):
return Document(
head=Head(
[
Title(title),
Meta(
name="viewport",
content="user-scalable=no, width=device-width, initial-scale=1.0",
),
BOOTSTRAP,
]
),
body=Body(
content,
global_attr=GlobalAttributes(
css_class="bg-dark text-white justify-content-center text-center"
),
),
)
# Public Key Page # Public Key Page
@main_pages.route("/public_key", methods=["GET"]) @main_pages.route("/public_key", methods=["GET"])
def public_key(): def public_key():

17
src/msg.py Normal file
View file

@ -0,0 +1,17 @@
import datetime
import os
import gnupg
# Encrypt msg with GPG
def encrypt(msg):
pgp = gnupg.GPG()
pgp.import_keys(open("/config/pub.key").read())
return str(pgp.encrypt(msg, pgp.list_keys()[0]["fingerprint"]))
# Save msg in `/data/messages`
def save_message(msg, name=""):
os.makedirs("/data/messages", exist_ok=True)
dt = datetime.datetime.now().strftime("%Y-%m-%d.%H-%M")
f = open(f"/data/messages/{name}-{dt}.asc", "w")
f.write(msg)

19
src/notification.py Normal file
View file

@ -0,0 +1,19 @@
from config import CONFIG
import requests
# Send Notification to all handlers
def notify(msg, title=None):
try:
gotify_notification(msg, title)
except:
pass
# Gotify Notification Handler
def gotify_notification(msg, title=None):
token = CONFIG["notify"]["gotify"]["token"]
url = CONFIG["notify"]["gotify"]["host"]
requests.post(
f"https://{url}/message?token={token}",
{"title": title, "message": msg, "priority": "5"},
)