moved config to a json, which makes adding more variables easier, but perhaps otherwise adds complexity
This commit is contained in:
54
forum/db/config.py
Normal file
54
forum/db/config.py
Normal file
@@ -0,0 +1,54 @@
|
||||
import json
|
||||
import shutil
|
||||
|
||||
|
||||
class Config:
|
||||
def __init__(self, path):
|
||||
self.path = path
|
||||
self.config_values = [
|
||||
"version",
|
||||
"server_name",
|
||||
"server_description",
|
||||
"secret_key",
|
||||
"captcha_key",
|
||||
"registration_enabled",
|
||||
"login_required",
|
||||
"threads_per_page",
|
||||
"user_css",
|
||||
]
|
||||
self._update_class(self._read_values())
|
||||
|
||||
def get_config(self):
|
||||
current = self._read_values()
|
||||
self._update_class(current)
|
||||
return self
|
||||
|
||||
def set_config(self, **kwargs):
|
||||
for key in kwargs:
|
||||
if key not in self.config_values:
|
||||
raise ValueError(f"Unknown config key {key}!")
|
||||
|
||||
current = self._read_values()
|
||||
current.update(kwargs)
|
||||
self._update_class(current)
|
||||
self._write_values(current)
|
||||
|
||||
def set_config_secrets(self, secret_key, captcha_key):
|
||||
current = self._read_values()
|
||||
current["secret_key"] = secret_key
|
||||
current["captcha_key"] = captcha_key
|
||||
self._update_class(current)
|
||||
self._write_values(current)
|
||||
|
||||
def _read_values(self):
|
||||
with open(self.path, "rt") as fp:
|
||||
return json.load(fp)
|
||||
|
||||
def _write_values(self, values):
|
||||
shutil.copy(self.path, self.path + ".bkp")
|
||||
with open(self.path, "wt") as fp:
|
||||
json.dump(values, fp, indent=2, sort_keys=True)
|
||||
|
||||
def _update_class(self, values):
|
||||
for item in values:
|
||||
setattr(self, item, values[item])
|
||||
@@ -1,4 +1,5 @@
|
||||
import sqlite3
|
||||
from db.config import Config
|
||||
|
||||
|
||||
class DB:
|
||||
@@ -6,16 +7,16 @@ class DB:
|
||||
self.conn = conn
|
||||
pass
|
||||
|
||||
def get_config(self):
|
||||
return (
|
||||
self._db()
|
||||
.execute(
|
||||
"""
|
||||
select version, name, description, secret_key, captcha_key, registration_enabled, login_required from config
|
||||
"""
|
||||
)
|
||||
.fetchone()
|
||||
)
|
||||
# ~ def get_config(self):
|
||||
# ~ return (
|
||||
# ~ self._db()
|
||||
# ~ .execute(
|
||||
# ~ """
|
||||
# ~ select version, name, description, secret_key, captcha_key, registration_enabled, login_required from config
|
||||
# ~ """
|
||||
# ~ )
|
||||
# ~ .fetchone()
|
||||
# ~ )
|
||||
|
||||
def get_forums(self):
|
||||
return self._db().execute(
|
||||
@@ -48,7 +49,7 @@ class DB:
|
||||
)
|
||||
|
||||
def get_thread_forum(self, thread_id):
|
||||
""" Returns forum_id of a thread """
|
||||
"""Returns forum_id of a thread"""
|
||||
return (
|
||||
self._db()
|
||||
.execute(
|
||||
@@ -104,7 +105,16 @@ class DB:
|
||||
|
||||
def get_thread(self, thread):
|
||||
db = self._db()
|
||||
title, text, author, author_id, create_time, modify_time, hidden, forum_id = db.execute(
|
||||
(
|
||||
title,
|
||||
text,
|
||||
author,
|
||||
author_id,
|
||||
create_time,
|
||||
modify_time,
|
||||
hidden,
|
||||
forum_id,
|
||||
) = db.execute(
|
||||
"""
|
||||
select title, text, name, author_id, create_time, modify_time, hidden, forum_id
|
||||
from threads, users
|
||||
@@ -139,7 +149,7 @@ class DB:
|
||||
modify_time,
|
||||
comments,
|
||||
hidden,
|
||||
forum_id
|
||||
forum_id,
|
||||
)
|
||||
|
||||
def get_thread_title(self, thread_id):
|
||||
@@ -525,14 +535,16 @@ class DB:
|
||||
Add a user if registrations are enabled.
|
||||
"""
|
||||
try:
|
||||
config = Config(os.getenv("CONF"))
|
||||
if not config.registration_enable:
|
||||
return None
|
||||
|
||||
db = self._db()
|
||||
c = db.cursor()
|
||||
c.execute(
|
||||
"""
|
||||
insert into users(name, password, join_time)
|
||||
select lower(?), ?, ?
|
||||
from config
|
||||
where registration_enabled = 1
|
||||
values lower(?), ?, ?
|
||||
""",
|
||||
(username, password, time),
|
||||
)
|
||||
@@ -616,25 +628,25 @@ class DB:
|
||||
)
|
||||
db.commit()
|
||||
|
||||
def set_config(
|
||||
self, server_name, server_description, registration_enabled, login_required
|
||||
):
|
||||
return self.change_one(
|
||||
"""
|
||||
update config
|
||||
set name = ?, description = ?, registration_enabled = ?, login_required = ?
|
||||
""",
|
||||
(server_name, server_description, registration_enabled, login_required),
|
||||
)
|
||||
# ~ def set_config(
|
||||
# ~ self, server_name, server_description, registration_enabled, login_required
|
||||
# ~ ):
|
||||
# ~ return self.change_one(
|
||||
# ~ """
|
||||
# ~ update config
|
||||
# ~ set name = ?, description = ?, registration_enabled = ?, login_required = ?
|
||||
# ~ """,
|
||||
# ~ (server_name, server_description, registration_enabled, login_required),
|
||||
# ~ )
|
||||
|
||||
def set_config_secrets(self, secret_key, captcha_key):
|
||||
return self.change_one(
|
||||
"""
|
||||
update config
|
||||
set secret_key = ?, captcha_key = ?
|
||||
""",
|
||||
(secret_key, captcha_key),
|
||||
)
|
||||
# ~ def set_config_secrets(self, secret_key, captcha_key):
|
||||
# ~ return self.change_one(
|
||||
# ~ """
|
||||
# ~ update config
|
||||
# ~ set secret_key = ?, captcha_key = ?
|
||||
# ~ """,
|
||||
# ~ (secret_key, captcha_key),
|
||||
# ~ )
|
||||
|
||||
def set_user_ban(self, user_id, until):
|
||||
return self.change_one(
|
||||
|
||||
Reference in New Issue
Block a user