added config-base file and config.ini generator

This commit is contained in:
2020-06-29 22:05:40 +01:00
parent 00ba11940a
commit 4606415a38
8 changed files with 701 additions and 31 deletions

View File

@@ -11,7 +11,7 @@ import signal
import sys
import json
from pathlib import Path
from flask import Flask, g
from flask import Flask, jsonify, g
from jellyfin_accounts.data_store import JSONStorage
parser = argparse.ArgumentParser(description="jellyfin-accounts")
@@ -110,18 +110,21 @@ if "no_username" not in config["email"]:
config["email"]["no_username"] = "false"
log.debug("Set no_username to false")
with open(config["files"]["invites"], "r") as f:
temp_invites = json.load(f)
if "invites" in temp_invites:
new_invites = {}
log.info("Converting invites.json to new format, temporary.")
for el in temp_invites["invites"]:
i = {"valid_till": el["valid_till"]}
if "email" in el:
i["email"] = el["email"]
new_invites[el["code"]] = i
with open(config["files"]["invites"], "w") as f:
f.write(json.dumps(new_invites, indent=4, default=str))
try:
with open(config["files"]["invites"], "r") as f:
temp_invites = json.load(f)
if "invites" in temp_invites:
new_invites = {}
log.info("Converting invites.json to new format, temporary.")
for el in temp_invites["invites"]:
i = {"valid_till": el["valid_till"]}
if "email" in el:
i["email"] = el["email"]
new_invites[el["code"]] = i
with open(config["files"]["invites"], "w") as f:
f.write(json.dumps(new_invites, indent=4, default=str))
except FileNotFoundError:
pass
data_store = JSONStorage(
@@ -195,6 +198,18 @@ if (
config["jellyfin"]["public_server"] = config["jellyfin"]["server"]
def resp(success=True, code=500):
if success:
r = jsonify({"success": True})
if code == 500:
r.status_code = 200
else:
r.status_code = code
else:
r = jsonify({"success": False})
r.status_code = code
return r
def main():
if args.get_defaults:
import json

View File

@@ -79,7 +79,10 @@ class Jellyfin:
"User-Agent": self.useragent,
"X-Emby-Authorization": self.auth,
}
self.info = requests.get(self.server + "/System/Info/Public").json()
try:
self.info = requests.get(self.server + "/System/Info/Public").json()
except:
pass
def getUsers(self, username: str = "all", userId: str = "all", public: bool = True):
"""

View File

@@ -1,9 +1,8 @@
from flask import request, jsonify, render_template
from configparser import RawConfigParser
from jellyfin_accounts.jf_api import Jellyfin
from jellyfin_accounts import config, config_path, app, first_run
from jellyfin_accounts import config, config_path, app, first_run, resp
from jellyfin_accounts import web_log as log
from jellyfin_accounts.web_api import resp
import os
if first_run:

View File

@@ -4,24 +4,11 @@ import json
import datetime
import secrets
import time
from jellyfin_accounts import config, config_path, app, g, data_store
from jellyfin_accounts import config, config_path, app, g, data_store, resp, configparser
from jellyfin_accounts import web_log as log
from jellyfin_accounts.validate_password import PasswordValidator
def resp(success=True, code=500):
if success:
r = jsonify({"success": True})
if code == 500:
r.status_code = 200
else:
r.status_code = code
else:
r = jsonify({"success": False})
r.status_code = code
return r
def checkInvite(code, delete=False):
current_time = datetime.datetime.now()
invites = dict(data_store.invites)
@@ -327,4 +314,34 @@ def setDefaults():
return resp()
import jellyfin_accounts.setup
@app.route("/modifyConfig", methods=["POST"])
@auth.login_required
def modifyConfig():
log.info("Config modification requested")
data = request.get_json()
temp_config = configparser.RawConfigParser(comment_prefixes="/", allow_no_value=True)
temp_config.read(config_path)
for section in data:
if section in temp_config:
for item in data[section]:
if item in temp_config[section]:
temp_config[section][item] = data[section][item]
data[section][item] = True
log.debug(f"{section}/{item} modified")
else:
data[section][item] = False
log.debug(f"{section}/{item} does not exist in config")
with open(config_path, "w") as config_file:
temp_config.write(config_file)
log.info("Config written, reloading")
config.read(config_path)
log.info("Config reloaded.")
return resp()
@app.route('/getConfig', methods=["GET"])
@auth.login_required
def getConfig():
log.debug('Config requested')
return jsonify(config._sections), 200