Added support for authentication in --share mode (via auth.json)

This commit is contained in:
MoonRide303 2023-10-24 18:29:37 +02:00
parent 2f58ac2334
commit fbbaf86232
6 changed files with 55 additions and 2 deletions

1
.gitignore vendored
View File

@ -45,3 +45,4 @@ experiment.py
/node_modules
/package-lock.json
/.coverage*
/auth.json

6
auth-example.json Normal file
View File

@ -0,0 +1,6 @@
[
{
"user": "sitting-duck-1",
"pass": "very-bad-publicly-known-password-change-it"
}
]

View File

@ -1 +1 @@
version = '2.1.738'
version = '2.1.739'

40
modules/auth.py Normal file
View File

@ -0,0 +1,40 @@
import json
import hashlib
from os.path import exists
def auth_list_to_dict(auth_list):
auth_dict = {}
for auth_data in auth_list:
if 'user' in auth_data:
if 'hash' in auth_data:
auth_dict |= {auth_data['user']: auth_data['hash']}
elif 'pass' in auth_data:
auth_dict |= {auth_data['user']: hashlib.sha256(bytes(auth_data['pass'], encoding='utf-8')).hexdigest()}
return auth_dict
def load_auth_data(filename=None):
auth_dict = None
if filename != None and exists(filename):
with open(filename, encoding='utf-8') as auth_file:
try:
auth_obj = json.load(auth_file)
if isinstance(auth_obj, list) and len(auth_obj) > 0:
auth_dict = auth_list_to_dict(auth_obj)
except Exception as e:
print('load_auth_data, e: ' + str(e))
return auth_dict
auth_dict = load_auth_data('auth.json')
auth_enabled = auth_dict != None
def check_auth(user, password):
if user not in auth_dict:
return False
else:
return hashlib.sha256(bytes(password, encoding='utf-8')).hexdigest() == auth_dict[user]

View File

@ -1,3 +1,7 @@
# 2.1.739
* Added support for authentication in --share mode (via auth.json).
# 2.1.737
* Allowed customizing resolutions in config.

View File

@ -18,6 +18,7 @@ import args_manager
from modules.sdxl_styles import legal_style_names
from modules.private_logger import get_current_html_path
from modules.ui_gradio_extensions import reload_javascript
from modules.auth import auth_enabled, check_auth
def generate_clicked(*args):
@ -376,5 +377,6 @@ shared.gradio_root.launch(
inbrowser=args_manager.args.auto_launch,
server_name=args_manager.args.listen,
server_port=args_manager.args.port,
share=args_manager.args.share
share=args_manager.args.share,
auth=check_auth if args_manager.args.share and auth_enabled else None
)