From 68a459023cb6c62055d3b5c302c221e3bc53e39c Mon Sep 17 00:00:00 2001 From: Harvey Tindall Date: Mon, 29 Jun 2020 00:35:51 +0100 Subject: [PATCH] Add option to use email address as username Added option email/no_username to disable username input on form, and instead use the provided email address as the username. Also added missing 'packaging' dep from pevious update. --- README.md | 5 +++- jellyfin_accounts/__init__.py | 4 +++ jellyfin_accounts/data/config-default.ini | 4 ++- jellyfin_accounts/data/templates/form.html | 7 ++++- jellyfin_accounts/web.py | 2 +- poetry.lock | 30 +++++++++++++++++++++- pyproject.toml | 3 ++- 7 files changed, 49 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a1f066c..ffbd42a 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ A basic account management system for [Jellyfin](https://github.com/jellyfin/jel * pytz * python-dateutil * watchdog +* packaging ``` ### Install @@ -120,6 +121,8 @@ contact_message = Need help? contact me. help_message = Enter your details to create an account. ; Displayed when an account is created. success_message = Your account has been created. Click below to continue to Jellyfin. +; When true, disables username input on invite form and sets the Jellyfin username to the email address +no_username = false [password_validation] ; Enables password validation. @@ -182,7 +185,7 @@ api_key = your api key encryption = starttls server = smtp.jellyf.in ; Uses SMTP_SSL, so make sure the port is for this, not starttls. -port = 587 +port = 465 password = smtp password [files] diff --git a/jellyfin_accounts/__init__.py b/jellyfin_accounts/__init__.py index 4d86ef9..f35352d 100755 --- a/jellyfin_accounts/__init__.py +++ b/jellyfin_accounts/__init__.py @@ -106,6 +106,10 @@ for key in ["user_configuration", "user_displayprefs"]: log.debug(f"Using default {key}") config["files"][key] = str(data_dir / (key + ".json")) +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: diff --git a/jellyfin_accounts/data/config-default.ini b/jellyfin_accounts/data/config-default.ini index ce8da3b..3c1541d 100644 --- a/jellyfin_accounts/data/config-default.ini +++ b/jellyfin_accounts/data/config-default.ini @@ -49,7 +49,9 @@ number = 1 special = 0 [email] -; Leave this whole section if you aren't using any email-related features. +; When true, disables username input on invite form and sets the Jellyfin username to the email address +no_username = false +; Leave the rest of this section if you aren't using any email-related features. use_24h = true ; Date format follows datetime's strftime. date_format = %d/%m/%y diff --git a/jellyfin_accounts/data/templates/form.html b/jellyfin_accounts/data/templates/form.html index ce6e1ca..8397c28 100644 --- a/jellyfin_accounts/data/templates/form.html +++ b/jellyfin_accounts/data/templates/form.html @@ -68,12 +68,14 @@
- +
+ {% if username %}
+ {% endif %}
@@ -133,6 +135,9 @@ toggleSpinner(); var send = $("form").serializeObject(); send['code'] = code; + {% if not username %} + send['email'] = send['username']; + {% endif %} send = JSON.stringify(send); $.ajax('/newUser', { data : send, diff --git a/jellyfin_accounts/web.py b/jellyfin_accounts/web.py index e9c64bb..3a328a0 100644 --- a/jellyfin_accounts/web.py +++ b/jellyfin_accounts/web.py @@ -1,4 +1,3 @@ -import json from pathlib import Path from flask import Flask, send_from_directory, render_template from jellyfin_accounts import config, app, g, css, data_store @@ -69,6 +68,7 @@ def inviteProxy(path): validate=config.getboolean("password_validation", "enabled"), requirements=validator.getCriteria(), email=email, + username=(not config.getboolean("email", "no_username")), ) elif "admin.html" not in path and "admin.html" not in path: return app.send_static_file(path) diff --git a/poetry.lock b/poetry.lock index a6024e9..4a611f1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -189,6 +189,18 @@ version = "0.3.1" [package.dependencies] pynvim = ">=0.3.1" +[[package]] +category = "main" +description = "Core utilities for Python packages" +name = "packaging" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "20.4" + +[package.dependencies] +pyparsing = ">=2.0.2" +six = "*" + [[package]] category = "main" description = "comprehensive password hashing framework supporting over 30 schemes" @@ -259,6 +271,14 @@ six = ">=1.5.2" docs = ["sphinx", "sphinx-rtd-theme"] test = ["flaky", "pretend", "pytest (>=3.0.1)"] +[[package]] +category = "main" +description = "Python parsing module" +name = "pyparsing" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "2.4.7" + [[package]] category = "main" description = "Extensions to the standard Python datetime module" @@ -380,7 +400,7 @@ dev = ["pytest", "pytest-timeout", "coverage", "tox", "sphinx", "pallets-sphinx- watchdog = ["watchdog"] [metadata] -content-hash = "f07c7cafa4edc558a016b9b7742290d7f28579b4e350762d2afbdce21f71796b" +content-hash = "847ce2a6a3927efdfb3b78935b348e9b4dc63d7e60959af6cc8b9fbc5a24567b" python-versions = "^3.6" [metadata.files] @@ -556,6 +576,10 @@ msgpack = [ neovim = [ {file = "neovim-0.3.1.tar.gz", hash = "sha256:a6a0e7a5b4433bf4e6ddcbc5c5ff44170be7d84259d002b8e8d8fb4ee78af60f"}, ] +packaging = [ + {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, + {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, +] passlib = [ {file = "passlib-1.7.2-py2.py3-none-any.whl", hash = "sha256:68c35c98a7968850e17f1b6892720764cc7eed0ef2b7cb3116a89a28e43fe177"}, {file = "passlib-1.7.2.tar.gz", hash = "sha256:8d666cef936198bc2ab47ee9b0410c94adf2ba798e5a84bf220be079ae7ab6a8"}, @@ -578,6 +602,10 @@ pyopenssl = [ {file = "pyOpenSSL-19.1.0-py2.py3-none-any.whl", hash = "sha256:621880965a720b8ece2f1b2f54ea2071966ab00e2970ad2ce11d596102063504"}, {file = "pyOpenSSL-19.1.0.tar.gz", hash = "sha256:9a24494b2602aaf402be5c9e30a0b82d4a5c67528fe8fb475e3f3bc00dd69507"}, ] +pyparsing = [ + {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, + {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, +] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, diff --git a/pyproject.toml b/pyproject.toml index 544b647..dfbe439 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "jellyfin-accounts" -version = "0.2.2" +version = "0.2.3" readme = "README.md" description = "A simple account management system for Jellyfin" authors = ["Harvey Tindall "] @@ -29,6 +29,7 @@ pytz = "^2020.1" python-dateutil = "^2.8.1" watchdog = "^0.10.2" waitress = "^1.4.3" +packaging = "^20.4" [tool.poetry.dev-dependencies] neovim = "^0.3.1"