added clipcascade
This commit is contained in:
Executable
+214
@@ -0,0 +1,214 @@
|
||||
import getpass
|
||||
import os
|
||||
import re
|
||||
|
||||
from core.config import Config
|
||||
from cli.info import CustomDialog
|
||||
from core.constants import *
|
||||
|
||||
|
||||
class LoginForm:
|
||||
def __init__(
|
||||
self,
|
||||
config: Config,
|
||||
on_login_callback=None,
|
||||
on_quit_callback=None,
|
||||
):
|
||||
self.config = config
|
||||
self.on_login_callback = on_login_callback
|
||||
self.on_quit_callback = on_quit_callback
|
||||
|
||||
@staticmethod
|
||||
def remove_trailing_slash(entry):
|
||||
return re.sub(r"/+$", "", entry)
|
||||
|
||||
@staticmethod
|
||||
def is_positive_integer(value):
|
||||
if value.isdigit() and int(value) > 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def bool_to_str(value):
|
||||
return "y" if value else "n"
|
||||
|
||||
@staticmethod
|
||||
def str_to_bool(value):
|
||||
return value.lower().strip() == "y"
|
||||
|
||||
@staticmethod
|
||||
def is_positive_integer(value):
|
||||
if value.isdigit() and int(value) > 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def mainloop(self):
|
||||
# save data to config
|
||||
self.config.data["username"] = (
|
||||
input(f"username [{self.config.data['username']}]: ")
|
||||
or self.config.data["username"]
|
||||
)
|
||||
|
||||
self.config.data["password"] = getpass.getpass("password: ")
|
||||
|
||||
server_url = (
|
||||
input(f"server url [{self.config.data['server_url']}]: ")
|
||||
or self.config.data["server_url"]
|
||||
)
|
||||
self.config.data["server_url"] = LoginForm.remove_trailing_slash(
|
||||
server_url.strip()
|
||||
)
|
||||
|
||||
self.config.data["cipher_enabled"] = LoginForm.str_to_bool(
|
||||
input(
|
||||
f"enabled encryption(recommended) [{LoginForm.bool_to_str(self.config.data['cipher_enabled'])}]: "
|
||||
)
|
||||
or LoginForm.bool_to_str(self.config.data["cipher_enabled"])
|
||||
)
|
||||
|
||||
self.config.data["notification"] = LoginForm.str_to_bool(
|
||||
input(
|
||||
f"enabled notification [{LoginForm.bool_to_str(self.config.data['notification'])}]: "
|
||||
)
|
||||
or LoginForm.bool_to_str(self.config.data["notification"])
|
||||
)
|
||||
|
||||
# extra fields
|
||||
show_extra_fields = input(f"show extra fields [n]: ") or "n"
|
||||
if not LoginForm.str_to_bool(show_extra_fields):
|
||||
CustomDialog("Logging in...").mainloop()
|
||||
return
|
||||
|
||||
# Validate hash_rounds
|
||||
while True:
|
||||
hash_rounds = input(
|
||||
f"hash rounds [{self.config.data['hash_rounds']}]: "
|
||||
) or str(
|
||||
""
|
||||
if self.config.data["hash_rounds"] is None
|
||||
else str(self.config.data["hash_rounds"])
|
||||
)
|
||||
hash_rounds = hash_rounds.strip()
|
||||
|
||||
if not LoginForm.is_positive_integer(hash_rounds):
|
||||
CustomDialog(
|
||||
"Invalid Input\nHash Rounds must be a positive integer.",
|
||||
msg_type="error",
|
||||
)
|
||||
continue
|
||||
|
||||
self.config.data["hash_rounds"] = int(hash_rounds)
|
||||
break
|
||||
|
||||
self.config.data["salt"] = (
|
||||
input(f"salt [{self.config.data['salt']}]: ") or self.config.data["salt"]
|
||||
)
|
||||
|
||||
self.config.data["save_password"] = LoginForm.str_to_bool(
|
||||
input(
|
||||
f"store password locally(not recommended; only works if encryption is disabled) [{LoginForm.bool_to_str(self.config.data['save_password'])}]: "
|
||||
)
|
||||
or LoginForm.bool_to_str(self.config.data["save_password"])
|
||||
)
|
||||
|
||||
# Validate max_clipboard_size_local_limit_bytes
|
||||
while True:
|
||||
saved_mcsll = str(
|
||||
""
|
||||
if self.config.data["max_clipboard_size_local_limit_bytes"] is None
|
||||
else str(self.config.data["max_clipboard_size_local_limit_bytes"])
|
||||
)
|
||||
|
||||
max_clipboard_size_local_limit_bytes = (
|
||||
input(
|
||||
f"maximum clipboard size local limit (in bytes) [{saved_mcsll}]: "
|
||||
)
|
||||
or saved_mcsll
|
||||
)
|
||||
max_clipboard_size_local_limit_bytes = (
|
||||
max_clipboard_size_local_limit_bytes.strip()
|
||||
)
|
||||
if max_clipboard_size_local_limit_bytes == "":
|
||||
self.config.data["max_clipboard_size_local_limit_bytes"] = None
|
||||
break
|
||||
|
||||
if not LoginForm.is_positive_integer(max_clipboard_size_local_limit_bytes):
|
||||
CustomDialog(
|
||||
"Invalid Input\nMax Clipboard Size Local Limit must be a positive integer.",
|
||||
msg_type="error",
|
||||
)
|
||||
continue
|
||||
|
||||
self.config.data["max_clipboard_size_local_limit_bytes"] = int(
|
||||
max_clipboard_size_local_limit_bytes
|
||||
)
|
||||
break
|
||||
|
||||
self.config.data["enable_image_sharing"] = LoginForm.str_to_bool(
|
||||
input(
|
||||
f"enable image sharing [{LoginForm.bool_to_str(self.config.data['enable_image_sharing'])}]: "
|
||||
)
|
||||
or LoginForm.bool_to_str(self.config.data["enable_image_sharing"])
|
||||
)
|
||||
|
||||
self.config.data["enable_file_sharing"] = LoginForm.str_to_bool(
|
||||
input(
|
||||
f"enable file sharing [{LoginForm.bool_to_str(self.config.data['enable_file_sharing'])}]: "
|
||||
)
|
||||
or LoginForm.bool_to_str(self.config.data["enable_file_sharing"])
|
||||
)
|
||||
|
||||
# Validate default file download location
|
||||
while True:
|
||||
default_file_download_location = (
|
||||
input(
|
||||
f"default file download location [{self.config.data['default_file_download_location']}]: "
|
||||
)
|
||||
or self.config.data["default_file_download_location"]
|
||||
)
|
||||
|
||||
default_file_download_location = default_file_download_location.strip()
|
||||
if default_file_download_location == "":
|
||||
self.config.data["default_file_download_location"] = ""
|
||||
break
|
||||
|
||||
if not os.path.isdir(default_file_download_location):
|
||||
CustomDialog(
|
||||
"Invalid directory path.",
|
||||
msg_type="error",
|
||||
).mainloop()
|
||||
continue
|
||||
|
||||
self.config.data["default_file_download_location"] = (
|
||||
default_file_download_location
|
||||
)
|
||||
break
|
||||
|
||||
while True:
|
||||
ssl_ca_bundle = (
|
||||
input(
|
||||
f"ssl ca bundle path (optional) [{self.config.data.get('ssl_ca_bundle') or ''}]: "
|
||||
)
|
||||
or (self.config.data.get("ssl_ca_bundle") or "")
|
||||
).strip()
|
||||
if ssl_ca_bundle == "":
|
||||
self.config.data["ssl_ca_bundle"] = ""
|
||||
break
|
||||
if not os.path.isfile(ssl_ca_bundle):
|
||||
CustomDialog(
|
||||
"Invalid Input\nSSL CA bundle path is not a file or does not exist.",
|
||||
msg_type="error",
|
||||
).mainloop()
|
||||
continue
|
||||
self.config.data["ssl_ca_bundle"] = ssl_ca_bundle
|
||||
break
|
||||
|
||||
CustomDialog("Logging in...").mainloop()
|
||||
|
||||
def on_quit(self):
|
||||
pass
|
||||
|
||||
def close(self):
|
||||
pass
|
||||
Reference in New Issue
Block a user