Allow setting server admins from server's config.json
parent
826c13db98
commit
cba92412a8
|
@ -185,7 +185,8 @@ class BBJ(object):
|
|||
|
||||
{
|
||||
"instance_name": (string), // a title set by the server owner
|
||||
"allow_anon": (bool) // whether anonymous participation is allowed
|
||||
"allow_anon": (bool), // whether anonymous participation is allowed
|
||||
"admins": (list) // usernames of those who have admin rights on the server
|
||||
}
|
||||
"""
|
||||
response = self("instance_info")
|
||||
|
@ -434,7 +435,7 @@ class BBJ(object):
|
|||
If the user element isnt found, ValueError is raised.
|
||||
See also `user_is_registered`
|
||||
"""
|
||||
response = self("user_get", user=user_id_or_name)
|
||||
response = self("user_get", target_user=user_id_or_name)
|
||||
return response["data"]
|
||||
|
||||
|
||||
|
|
|
@ -2243,6 +2243,7 @@ class ActionBox(urwid.ListBox):
|
|||
elif keyl == "f12":
|
||||
app.loop.stop()
|
||||
call("clear", shell=True)
|
||||
motherfucking_rainbows(obnoxious_logo)
|
||||
readline.set_completer(rlcompleter.Completer().complete)
|
||||
readline.parse_and_bind("tab: complete")
|
||||
interact(banner=version + "\n(BBJ Interactive Console)", local=globals())
|
||||
|
@ -2466,11 +2467,12 @@ def bbjrc(mode, **params):
|
|||
values = json.load(_in)
|
||||
# update it with new keys if necessary
|
||||
for key, default_value in default_prefs.items():
|
||||
# HACK: checking if they == None should not be necessary, as the program
|
||||
# should never store a preference value as a NoneType. However ~vilmibm
|
||||
# encountered the editor being stored as None, so there is a misstep somewhere
|
||||
# and this will at least keep the program from continuing to crash should
|
||||
# anyone else ever run into it
|
||||
# The application will never store a config value
|
||||
# as the NoneType, so users may set an option as
|
||||
# null in their file to reset it to default.
|
||||
# Also covers a previous encounter a user
|
||||
# had with having a NoneType set in their
|
||||
# config by accident, crashing the program.
|
||||
if key not in values or values[key] == None:
|
||||
values[key] = default_value
|
||||
# else make one
|
||||
|
|
30
server.py
30
server.py
|
@ -12,7 +12,8 @@ dbname = "data.sqlite"
|
|||
|
||||
# any values here may be overrided in the config.json. Any values not listed
|
||||
# here will have no effect on the server.
|
||||
app_config = {
|
||||
default_config = {
|
||||
"admins": [],
|
||||
"port": 7099,
|
||||
"host": "127.0.0.1",
|
||||
"instance_name": "BBJ",
|
||||
|
@ -20,13 +21,22 @@ app_config = {
|
|||
"debug": False
|
||||
}
|
||||
|
||||
|
||||
try:
|
||||
with open("config.json") as _conf:
|
||||
app_config.update(json.load(_conf))
|
||||
with open("config.json", "r") as _in:
|
||||
app_config = json.load(_in)
|
||||
# update the file with new keys if necessary
|
||||
for key, default_value in default_config.items():
|
||||
# The application will never store a config value
|
||||
# as the NoneType, so users may set an option as
|
||||
# null in their file to reset it to default
|
||||
if key not in app_config or app_config[key] == None:
|
||||
app_config[key] = default_value
|
||||
# else just use the defaults
|
||||
except FileNotFoundError:
|
||||
with open("config.json", "w") as _conf:
|
||||
json.dump(app_config, _conf, indent=2)
|
||||
app_config = default_prefs
|
||||
finally:
|
||||
with open("config.json", "w") as _out:
|
||||
json.dump(app_config, _out, indent=2)
|
||||
|
||||
|
||||
def api_method(function):
|
||||
|
@ -192,7 +202,8 @@ class API(object):
|
|||
"""
|
||||
return {
|
||||
"allow_anon": app_config["allow_anon"],
|
||||
"instance_name": app_config["instance_name"]
|
||||
"instance_name": app_config["instance_name"],
|
||||
"admins": app_config["admins"]
|
||||
}
|
||||
|
||||
@api_method
|
||||
|
@ -667,10 +678,11 @@ API_CONFIG = {
|
|||
|
||||
|
||||
def run():
|
||||
# user anonymity is achieved in the laziest possible way: a literal user
|
||||
# named anonymous. may god have mercy on my soul.
|
||||
_c = sqlite3.connect(dbname)
|
||||
try:
|
||||
db.set_admins(_c, app_config["admins"])
|
||||
# user anonymity is achieved in the laziest possible way: a literal user
|
||||
# named anonymous. may god have mercy on my soul.
|
||||
db.anon = db.user_resolve(_c, "anonymous")
|
||||
if not db.anon:
|
||||
db.anon = db.user_register(
|
||||
|
|
15
src/db.py
15
src/db.py
|
@ -411,6 +411,21 @@ def user_update(connection, user_object, parameters):
|
|||
return user_resolve(connection, user_id)
|
||||
|
||||
|
||||
def set_admins(connection, users):
|
||||
"""
|
||||
Set the server admins to be the content of `users`.
|
||||
Any other users that previously had admin rights
|
||||
not included in `users` will have their privledge
|
||||
revoked.
|
||||
"""
|
||||
connection.execute("UPDATE users SET is_admin = 0")
|
||||
for user in users:
|
||||
connection.execute(
|
||||
"UPDATE users SET is_admin = 1 WHERE user_name = ?",
|
||||
(user,))
|
||||
connection.commit()
|
||||
|
||||
|
||||
def user_externalize(user_object):
|
||||
"""
|
||||
Cleanse private/internal data from a user object
|
||||
|
|
Loading…
Reference in New Issue