munyal-client/config.py

138 lines
3.6 KiB
Python
Raw Normal View History

2019-07-28 16:18:49 +00:00
import os
2020-12-09 01:43:20 +00:00
import shutil
2020-12-09 01:42:02 +00:00
import sys
import pathlib
import pickle
2020-12-09 02:47:09 +00:00
from hashlib import sha256
from tkinter import Button, Entry, Label, StringVar, Tk, filedialog
2019-07-28 16:18:49 +00:00
2020-12-09 02:47:09 +00:00
from uuid import uuid4
from PIL import Image, ImageTk
2019-07-28 16:18:49 +00:00
2020-12-09 03:37:51 +00:00
from misc import alert
from misc import get_os
from misc import path_join
def __get_config_folder():
_os = get_os()
if _os == "linux":
2020-12-09 03:37:51 +00:00
folder = path_join(os.getenv("HOME"), ".munyal")
else:
2020-12-09 03:37:51 +00:00
folder = path_join(os.path.expandvars("%APPDATA%"), "Munyal")
return folder
2020-12-09 01:42:02 +00:00
def __get_files_folder():
2020-12-09 03:37:51 +00:00
folder = path_join(os.path.expanduser("~"), "Munyal")
2020-12-09 01:45:31 +00:00
return folder
def get_config():
2020-12-09 01:45:31 +00:00
for _ in range(3):
config = __get_config()
if not config:
gui_config()
else:
return config
def __get_config():
folder = __get_config_folder()
2020-12-09 03:37:51 +00:00
config_file = path_join(folder, "config")
if os.path.exists(config_file):
config_bytes = open(config_file, "rb")
config = pickle.load(config_bytes)
config_bytes.close()
return config
def __validate_values(user, password):
return True
def _set_config(root, user, password, folder):
passwd_hash = sha256(password.get().encode("utf-8")).hexdigest()
if not user:
alert(root, "Introduce tu usuario de la red Munyal")
elif not password:
alert(root, "Introduce tu contraseña")
elif not folder:
alert(root, "Elige la carpeta que quieres sincronizar")
elif not __validate_values(user, passwd_hash):
alert(
root,
"Tu usuario o contraseña son incorrectos, favor de reintentarlo")
else:
password.set("")
folder_config = __get_config_folder()
path = pathlib.Path(folder_config)
path.mkdir(parents=True, exist_ok=True)
2020-12-09 03:37:51 +00:00
with open(path_join(folder_config, "config"), "wb") as config_file:
config_file.write(
pickle.dumps({
"login": {
"user": user,
"password": passwd_hash
},
2020-12-09 02:47:09 +00:00
"folder": folder,
"uuid": str(uuid4())
}))
root.destroy()
def gui_config():
2019-07-28 16:18:49 +00:00
root = Tk()
root.geometry("250x420")
2019-07-28 16:18:49 +00:00
img_logo = Image.open("img/logo.png")
img_tk = ImageTk.PhotoImage(img_logo.resize((200, 150), Image.ANTIALIAS))
2019-07-28 16:18:49 +00:00
host = StringVar()
host.set("localhost")
host_field = Entry(root, textvariable=host)
2019-07-28 16:18:49 +00:00
passwd = StringVar()
passwd_field = Entry(root, textvariable=passwd, show="*")
2019-07-28 16:18:49 +00:00
folder = StringVar()
2020-12-09 01:42:02 +00:00
folder.set(__get_files_folder())
folder_field = Entry(root, textvariable=folder)
btn_folder = Button(root,
text="Examinar",
command=lambda: search_folder(folder))
2019-07-28 16:18:49 +00:00
connect = Button(
root,
text="Conectar",
command=lambda: _set_config(root, host.get(), passwd, folder.get()))
2019-07-28 16:18:49 +00:00
Label(root, text="MUNYAL").pack()
Label(root, image=img_tk).pack()
2019-07-28 16:18:49 +00:00
Label(root, text="").pack()
Label(root, text="Ruta del servidor").pack()
2019-07-28 16:18:49 +00:00
host_field.pack()
Label(root, text="").pack()
Label(root, text="Contraseña").pack()
passwd_field.pack()
Label(root, text="").pack()
Label(root, text="Carpeta a sincronizar").pack()
folder_field.pack()
btn_folder.pack()
2019-07-28 16:18:49 +00:00
Label(root, text="").pack()
connect.pack()
root.mainloop()
def search_folder(field):
path = filedialog.askdirectory()
field.set(path)
if __name__ == "__main__":
2020-12-09 01:42:02 +00:00
if "--restart" in sys.argv:
if __get_config():
2020-12-09 01:45:31 +00:00
shutil.rmtree(__get_config_folder())
print(get_config())