Added support for authentication in --share mode (via auth.json)
This commit is contained in:
parent
2f58ac2334
commit
fbbaf86232
1
.gitignore
vendored
1
.gitignore
vendored
@ -45,3 +45,4 @@ experiment.py
|
|||||||
/node_modules
|
/node_modules
|
||||||
/package-lock.json
|
/package-lock.json
|
||||||
/.coverage*
|
/.coverage*
|
||||||
|
/auth.json
|
||||||
|
6
auth-example.json
Normal file
6
auth-example.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"user": "sitting-duck-1",
|
||||||
|
"pass": "very-bad-publicly-known-password-change-it"
|
||||||
|
}
|
||||||
|
]
|
@ -1 +1 @@
|
|||||||
version = '2.1.738'
|
version = '2.1.739'
|
||||||
|
40
modules/auth.py
Normal file
40
modules/auth.py
Normal 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]
|
@ -1,3 +1,7 @@
|
|||||||
|
# 2.1.739
|
||||||
|
|
||||||
|
* Added support for authentication in --share mode (via auth.json).
|
||||||
|
|
||||||
# 2.1.737
|
# 2.1.737
|
||||||
|
|
||||||
* Allowed customizing resolutions in config.
|
* Allowed customizing resolutions in config.
|
||||||
|
4
webui.py
4
webui.py
@ -18,6 +18,7 @@ import args_manager
|
|||||||
from modules.sdxl_styles import legal_style_names
|
from modules.sdxl_styles import legal_style_names
|
||||||
from modules.private_logger import get_current_html_path
|
from modules.private_logger import get_current_html_path
|
||||||
from modules.ui_gradio_extensions import reload_javascript
|
from modules.ui_gradio_extensions import reload_javascript
|
||||||
|
from modules.auth import auth_enabled, check_auth
|
||||||
|
|
||||||
|
|
||||||
def generate_clicked(*args):
|
def generate_clicked(*args):
|
||||||
@ -376,5 +377,6 @@ shared.gradio_root.launch(
|
|||||||
inbrowser=args_manager.args.auto_launch,
|
inbrowser=args_manager.args.auto_launch,
|
||||||
server_name=args_manager.args.listen,
|
server_name=args_manager.args.listen,
|
||||||
server_port=args_manager.args.port,
|
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
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user