mirror of
https://github.com/hrfee/jellyfin-accounts.git
synced 2024-12-22 09:00:14 +00:00
dynamically generate default config on first run
This commit is contained in:
parent
4606415a38
commit
55d26b541a
6
.gitignore
vendored
6
.gitignore
vendored
@ -4,13 +4,13 @@ MANIFEST.in
|
|||||||
dist/
|
dist/
|
||||||
build/
|
build/
|
||||||
test.txt
|
test.txt
|
||||||
data/node_modules/
|
jellyfin_accounts/data/node_modules/
|
||||||
|
jellyfin_accounts/data/config-default.ini
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
pw-reset/
|
pw-reset/
|
||||||
jfa/
|
jfa/
|
||||||
colors.txt
|
colors.txt
|
||||||
theme.css
|
theme.css
|
||||||
data/static/bootstrap-jf.css
|
jellyfin_accounts/data/static/bootstrap-jf.css
|
||||||
old/
|
old/
|
||||||
.jf-accounts/
|
.jf-accounts/
|
||||||
tools/__pycache__/
|
|
||||||
|
@ -49,10 +49,13 @@ first_run = False
|
|||||||
if data_dir.exists() is False or (data_dir / "config.ini").exists() is False:
|
if data_dir.exists() is False or (data_dir / "config.ini").exists() is False:
|
||||||
if not data_dir.exists():
|
if not data_dir.exists():
|
||||||
Path.mkdir(data_dir)
|
Path.mkdir(data_dir)
|
||||||
print(f"Config dir not found, so created at {str(data_dir)}")
|
print(f"Config dir not found, so generating at {str(data_dir)}")
|
||||||
if args.config is None:
|
if args.config is None:
|
||||||
config_path = data_dir / "config.ini"
|
config_path = data_dir / "config.ini"
|
||||||
shutil.copy(str(local_dir / "config-default.ini"), str(config_path))
|
from jellyfin_accounts.generate_ini import generate_ini
|
||||||
|
default_path = local_dir / "config-default.ini"
|
||||||
|
generate_ini(local_dir / "config-base.json", default_path)
|
||||||
|
shutil.copy(str(default_path), str(config_path))
|
||||||
print("Setup through the web UI, or quit and edit the configuration manually.")
|
print("Setup through the web UI, or quit and edit the configuration manually.")
|
||||||
first_run = True
|
first_run = True
|
||||||
else:
|
else:
|
||||||
|
@ -1,118 +1,115 @@
|
|||||||
[jellyfin]
|
[jellyfin]
|
||||||
; It is reccommended to create a limited admin account for this program.
|
; settings for connecting to jellyfin
|
||||||
|
; it is recommended to create a limited admin account for this program.
|
||||||
username = username
|
username = username
|
||||||
password = password
|
password = password
|
||||||
; Jellyfin server address. Can be public, or local for security purposes.
|
; jellyfin server address. can be public, or local for security purposes.
|
||||||
server = http://jellyfin.local:8096
|
server = http://jellyfin.local:8096
|
||||||
; Publicly accessible Jellyfin address, used on invite form.
|
; publicly accessible jellyfin address for invite form. leave blank to reuse the above address.
|
||||||
; Leave blank to use the same address as above.
|
|
||||||
public_server = https://jellyf.in:443
|
public_server = https://jellyf.in:443
|
||||||
|
; this and below settings will show on the jellyfin dashboard when the program connects. you may as well leave them alone.
|
||||||
client = jf-accounts
|
client = jf-accounts
|
||||||
version = 0.1
|
version = 0.2.4
|
||||||
device = jf-accounts
|
device = jf-accounts
|
||||||
device_id = jf-accounts-0.1
|
device_id = jf-accounts-0.2.4
|
||||||
|
|
||||||
[ui]
|
[ui]
|
||||||
; Set 0.0.0.0 to run localhost
|
; settings related to the ui and program functionality.
|
||||||
|
; set 0.0.0.0 to run on localhost
|
||||||
host = 0.0.0.0
|
host = 0.0.0.0
|
||||||
port = 8056
|
port = 8056
|
||||||
; Enable this to use Jellyfin users instead of the below username and pw.
|
; enable this to use jellyfin users instead of the below username and pw.
|
||||||
jellyfin_login = true
|
jellyfin_login = true
|
||||||
; Allows only admin users on Jellyfin to access admin page.
|
; allows only admin users on jellyfin to access the admin page.
|
||||||
admin_only = true
|
admin_only = true
|
||||||
; Username to use on admin page... (leave blank if using jellyfin_login)
|
; username for admin page (leave blank if using jellyfin_login)
|
||||||
username = your username
|
username = your username
|
||||||
; ..and its corresponding password (leave blank if using jellyfin_login)
|
; password for admin page (leave blank if using jellyfin_login)
|
||||||
password = your password
|
password = your password
|
||||||
|
|
||||||
debug = false
|
debug = false
|
||||||
|
; displayed at bottom of all pages except admin
|
||||||
; Displayed at the bottom of all pages except admin
|
|
||||||
contact_message = Need help? contact me.
|
contact_message = Need help? contact me.
|
||||||
; Displayed at top of form page.
|
; display at top of invite form.
|
||||||
help_message = Enter your details to create an account.
|
help_message = Enter your details to create an account.
|
||||||
; Displayed when an account is created.
|
; displayed when a user creates an account
|
||||||
success_message = Your account has been created. Click below to continue to Jellyfin.
|
success_message = Your account has been created. Click below to continue to Jellyfin.
|
||||||
|
|
||||||
[password_validation]
|
[password_validation]
|
||||||
; Enables password validation.
|
; password validation (minimum length, etc.)
|
||||||
enabled = true
|
enabled = true
|
||||||
; Min. password length
|
|
||||||
min_length = 8
|
min_length = 8
|
||||||
; Min. number of uppercase characters
|
|
||||||
upper = 1
|
upper = 1
|
||||||
; Min. number of lowercase characters
|
|
||||||
lower = 0
|
lower = 0
|
||||||
; Min. number of numbers
|
|
||||||
number = 1
|
number = 1
|
||||||
; Min. number of special characters
|
|
||||||
special = 0
|
special = 0
|
||||||
|
|
||||||
[email]
|
[email]
|
||||||
; When true, disables username input on invite form and sets the Jellyfin username to the email address
|
; general email settings. ignore if not using email features.
|
||||||
|
; use email address from invite form as username on jellyfin.
|
||||||
no_username = false
|
no_username = false
|
||||||
; Leave the rest of this section if you aren't using any email-related features.
|
|
||||||
use_24h = true
|
use_24h = true
|
||||||
; Date format follows datetime's strftime.
|
; date format used in emails. follows datetime.strftime format.
|
||||||
date_format = %d/%m/%y
|
date_format = %d/%m/%y
|
||||||
; Displayed at bottom of emails
|
; message displayed at bottom of emails.
|
||||||
message = Need help? contact me.
|
message = Need help? contact me.
|
||||||
; Mail methods: mailgun, smtp
|
; method of sending email to use.
|
||||||
method = smtp
|
method = smtp
|
||||||
; Address to send from
|
; address to send emails from
|
||||||
address = jellyfin@jellyf.in
|
address = jellyfin@jellyf.in
|
||||||
; The name of the sender
|
; the name of the sender
|
||||||
from = Jellyfin
|
from = Jellyfin
|
||||||
|
|
||||||
[password_resets]
|
[password_resets]
|
||||||
; Enable to store provided email addresses, monitor jellyfin directory for pw-resets, and send pin
|
; settings for the password reset handler.
|
||||||
|
; enable to store provided email addresses, monitor jellyfin directory for pw-resets, and send reset pins
|
||||||
enabled = true
|
enabled = true
|
||||||
; Directory to monitor for passwordReset*.json files. Usually the jellyfin config directory
|
; path to the folder jellyfin puts password-reset files.
|
||||||
watch_directory = /path/to/jellyfin
|
watch_directory = /path/to/jellyfin
|
||||||
; Path to custom email html. If blank, uses the internal template.
|
; path to custom email html
|
||||||
email_html =
|
email_html =
|
||||||
; Path to alternate plaintext email. If blank, uses the internal template.
|
; path to custom email in plain text
|
||||||
email_text =
|
email_text =
|
||||||
; Subject of emails
|
; subject of password reset emails.
|
||||||
subject = Password Reset - Jellyfin
|
subject = Password Reset - Jellyfin
|
||||||
|
|
||||||
[invite_emails]
|
[invite_emails]
|
||||||
; If enabled, allows one to send an invite directly to an email address.
|
; settings for sending invites directly to users.
|
||||||
enabled = true
|
enabled = true
|
||||||
; Path to custom email html. If blank, uses the internal template.
|
; path to custom email html
|
||||||
email_html =
|
email_html =
|
||||||
; Path to alternate plaintext email. If blank, uses the internal template.
|
; path to custom email in plain text
|
||||||
email_text =
|
email_text =
|
||||||
|
; subject of invite emails.
|
||||||
subject = Invite - Jellyfin
|
subject = Invite - Jellyfin
|
||||||
; Base url for jf-accounts. This necessary because most will use a reverse proxy, so the program has no other way of knowing what URL to send.
|
; base url for jf-accounts. this is necessary because using a reverse proxy means the program has no way of knowing the url itself.
|
||||||
url_base = http://accounts.jellyf.in:8056/invite
|
url_base = http://accounts.jellyf.in:8056/invite
|
||||||
|
|
||||||
[mailgun]
|
[mailgun]
|
||||||
|
; mailgun api connection settings
|
||||||
api_url = https://api.mailgun.net...
|
api_url = https://api.mailgun.net...
|
||||||
api_key = your api key
|
api_key = your api key
|
||||||
|
|
||||||
[smtp]
|
[smtp]
|
||||||
; Choose between ssl_tls and starttls. Your provider should tell you which to use, but generally SSL/TLS is 465, STARTTLS 587
|
; smtp server connection settings.
|
||||||
|
; your email provider should provide different ports for each encryption method. generally 465 for ssl_tls, 587 for starttls.
|
||||||
encryption = starttls
|
encryption = starttls
|
||||||
|
; smtp server address.
|
||||||
server = smtp.jellyf.in
|
server = smtp.jellyf.in
|
||||||
; Uses SMTP_SSL, so make sure the port is for this, not starttls.
|
|
||||||
port = 465
|
port = 465
|
||||||
password = smtp password
|
password = smtp password
|
||||||
|
|
||||||
[files]
|
[files]
|
||||||
; When the below paths are left blank, files are stored in ~/.jf-accounts/.
|
; optional settings for changing storage locations.
|
||||||
|
; location of stored invites (json).
|
||||||
; Path to store valid invites.
|
|
||||||
invites =
|
invites =
|
||||||
; Path to store emails addresses in JSON
|
; location of stored email addresses (json).
|
||||||
emails =
|
emails =
|
||||||
; Path to the user policy template. Can be acquired with get-defaults (jf-accounts -g).
|
; location of stored user policy template (json).
|
||||||
user_template =
|
user_template =
|
||||||
; Path to the user configuration template (part of homescreen layout). Can be acquired with get-defaults (jf-accounts -g).
|
; location of stored user configuration template (used for setting homescreen layout) (json)
|
||||||
user_configuration =
|
user_configuration =
|
||||||
; Path to the user display preferences template (part of homescreen layout). Can be acquired with get-defaults (jf-accounts -g).
|
; location of stored displaypreferences template (also used for homescreen layout) (json)
|
||||||
user_displayprefs =
|
user_displayprefs =
|
||||||
; Path to custom bootstrap.css
|
; location of custom bootstrap css.
|
||||||
custom_css =
|
custom_css =
|
||||||
|
|
||||||
|
32
jellyfin_accounts/generate_ini.py
Normal file
32
jellyfin_accounts/generate_ini.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import configparser
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
def generate_ini(base_file, ini_file):
|
||||||
|
"""
|
||||||
|
Generates .ini file from config-base file.
|
||||||
|
"""
|
||||||
|
with open(Path(base_file), 'r') as f:
|
||||||
|
config_base = json.load(f)
|
||||||
|
|
||||||
|
ini = configparser.RawConfigParser(allow_no_value=True)
|
||||||
|
|
||||||
|
for section in config_base:
|
||||||
|
ini.add_section(section)
|
||||||
|
for entry in config_base[section]:
|
||||||
|
if 'description' in config_base[section][entry]:
|
||||||
|
ini.set(section,
|
||||||
|
'; ' + config_base[section][entry]['description'])
|
||||||
|
if entry != 'meta':
|
||||||
|
value = config_base[section][entry]['value']
|
||||||
|
if isinstance(value, bool):
|
||||||
|
value = str(value).lower()
|
||||||
|
else:
|
||||||
|
value = str(value)
|
||||||
|
ini.set(section,
|
||||||
|
entry,
|
||||||
|
value)
|
||||||
|
|
||||||
|
with open(Path(ini_file), 'w') as config_file:
|
||||||
|
ini.write(config_file)
|
||||||
|
return True
|
@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "jellyfin-accounts"
|
name = "jellyfin-accounts"
|
||||||
version = "0.2.3"
|
version = "0.2.4"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
description = "A simple account management system for Jellyfin"
|
description = "A simple account management system for Jellyfin"
|
||||||
authors = ["Harvey Tindall <harveyltindall@gmail.com>"]
|
authors = ["Harvey Tindall <harveyltindall@gmail.com>"]
|
||||||
|
115
tools/config.ini
115
tools/config.ini
@ -1,115 +0,0 @@
|
|||||||
[jellyfin]
|
|
||||||
; settings for connecting to jellyfin
|
|
||||||
; it is recommended to create a limited admin account for this program.
|
|
||||||
username = username
|
|
||||||
password = password
|
|
||||||
; jellyfin server address. can be public, or local for security purposes.
|
|
||||||
server = http://jellyfin.local:8096
|
|
||||||
; publicly accessible jellyfin address for invite form. leave blank to reuse the above address.
|
|
||||||
public_server = https://jellyf.in:443
|
|
||||||
; this and below settings will show on the jellyfin dashboard when the program connects. you may as well leave them alone.
|
|
||||||
client = jf-accounts
|
|
||||||
version = 0.2.4
|
|
||||||
device = jf-accounts
|
|
||||||
device_id = jf-accounts-0.2.4
|
|
||||||
|
|
||||||
[ui]
|
|
||||||
; settings related to the ui and program functionality.
|
|
||||||
; set 0.0.0.0 to run on localhost
|
|
||||||
host = 0.0.0.0
|
|
||||||
port = 8056
|
|
||||||
; enable this to use jellyfin users instead of the below username and pw.
|
|
||||||
jellyfin_login = true
|
|
||||||
; allows only admin users on jellyfin to access the admin page.
|
|
||||||
admin_only = true
|
|
||||||
; username for admin page (leave blank if using jellyfin_login)
|
|
||||||
username = your username
|
|
||||||
; password for admin page (leave blank if using jellyfin_login)
|
|
||||||
password = your password
|
|
||||||
debug = false
|
|
||||||
; displayed at bottom of all pages except admin
|
|
||||||
contact_message = Need help? contact me.
|
|
||||||
; display at top of invite form.
|
|
||||||
help_message = Enter your details to create an account.
|
|
||||||
; displayed when a user creates an account
|
|
||||||
success_message = Your account has been created. Click below to continue to Jellyfin.
|
|
||||||
|
|
||||||
[password_validation]
|
|
||||||
; password validation (minimum length, etc.)
|
|
||||||
enabled = true
|
|
||||||
min_length = 8
|
|
||||||
upper = 1
|
|
||||||
lower = 0
|
|
||||||
number = 1
|
|
||||||
special = 0
|
|
||||||
|
|
||||||
[email]
|
|
||||||
; general email settings. ignore if not using email features.
|
|
||||||
; use email address from invite form as username on jellyfin.
|
|
||||||
no_username = false
|
|
||||||
use_24h = true
|
|
||||||
; date format used in emails. follows datetime.strftime format.
|
|
||||||
date_format = %d/%m/%y
|
|
||||||
; message displayed at bottom of emails.
|
|
||||||
message = Need help? contact me.
|
|
||||||
; method of sending email to use.
|
|
||||||
method = smtp
|
|
||||||
; address to send emails from
|
|
||||||
address = jellyfin@jellyf.in
|
|
||||||
; the name of the sender
|
|
||||||
from = Jellyfin
|
|
||||||
|
|
||||||
[password_resets]
|
|
||||||
; settings for the password reset handler.
|
|
||||||
; enable to store provided email addresses, monitor jellyfin directory for pw-resets, and send reset pins
|
|
||||||
enabled = true
|
|
||||||
; path to the folder jellyfin puts password-reset files.
|
|
||||||
watch_directory = /path/to/jellyfin
|
|
||||||
; path to custom email html
|
|
||||||
email_html =
|
|
||||||
; path to custom email in plain text
|
|
||||||
email_text =
|
|
||||||
; subject of password reset emails.
|
|
||||||
subject = Password Reset - Jellyfin
|
|
||||||
|
|
||||||
[invite_emails]
|
|
||||||
; settings for sending invites directly to users.
|
|
||||||
enabled = true
|
|
||||||
; path to custom email html
|
|
||||||
email_html =
|
|
||||||
; path to custom email in plain text
|
|
||||||
email_text =
|
|
||||||
; subject of invite emails.
|
|
||||||
subject = Invite - Jellyfin
|
|
||||||
; base url for jf-accounts. this is necessary because using a reverse proxy means the program has no way of knowing the url itself.
|
|
||||||
url_base = http://accounts.jellyf.in:8056/invite
|
|
||||||
|
|
||||||
[mailgun]
|
|
||||||
; mailgun api connection settings
|
|
||||||
api_url = https://api.mailgun.net...
|
|
||||||
api_key = your api key
|
|
||||||
|
|
||||||
[smtp]
|
|
||||||
; smtp server connection settings.
|
|
||||||
; your email provider should provide different ports for each encryption method. generally 465 for ssl_tls, 587 for starttls.
|
|
||||||
encryption = starttls
|
|
||||||
; smtp server address.
|
|
||||||
server = smtp.jellyf.in
|
|
||||||
port = 465
|
|
||||||
password = smtp password
|
|
||||||
|
|
||||||
[files]
|
|
||||||
; optional settings for changing storage locations.
|
|
||||||
; location of stored invites (json).
|
|
||||||
invites =
|
|
||||||
; location of stored email addresses (json).
|
|
||||||
emails =
|
|
||||||
; location of stored user policy template (json).
|
|
||||||
user_template =
|
|
||||||
; location of stored user configuration template (used for setting homescreen layout) (json)
|
|
||||||
user_configuration =
|
|
||||||
; location of stored displaypreferences template (also used for homescreen layout) (json)
|
|
||||||
user_displayprefs =
|
|
||||||
; location of custom bootstrap css.
|
|
||||||
custom_css =
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
import configparser, json
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
print("This tool generates a config.ini from the base JSON config format.")
|
|
||||||
|
|
||||||
# path = Path(input("Path to config-base.json: "))
|
|
||||||
path = 'config-base.json'
|
|
||||||
|
|
||||||
with open(path, 'r') as f:
|
|
||||||
config_base = json.load(f)
|
|
||||||
|
|
||||||
ini = configparser.RawConfigParser(allow_no_value=True)
|
|
||||||
|
|
||||||
for section in config_base:
|
|
||||||
ini.add_section(section)
|
|
||||||
for entry in config_base[section]:
|
|
||||||
if 'description' in config_base[section][entry]:
|
|
||||||
ini.set(section,
|
|
||||||
'; ' + config_base[section][entry]['description'])
|
|
||||||
if entry != 'meta':
|
|
||||||
value = config_base[section][entry]['value']
|
|
||||||
print(f'{entry} : {type(value)} : should be {config_base[section][entry]["type"]}')
|
|
||||||
if isinstance(value, bool):
|
|
||||||
value = str(value).lower()
|
|
||||||
else:
|
|
||||||
value = str(value)
|
|
||||||
ini.set(section,
|
|
||||||
entry,
|
|
||||||
value)
|
|
||||||
|
|
||||||
with open('config.ini', 'w') as config_file:
|
|
||||||
ini.write(config_file)
|
|
||||||
print("written.")
|
|
Loading…
Reference in New Issue
Block a user