import os import pathlib import pickle from hashlib import sha256 from tkinter import Button, Entry, Label, StringVar, Tk, filedialog from PIL import Image, ImageTk from misc import alert, get_os def __get_config_folder(): _os = get_os() if _os == "linux": folder = os.path.join(os.getenv("HOME"), ".munyal") else: folder = os.path.join(os.path.expandvars("%APPDATA%"), "Munyal") return folder def get_config(): while True: config = __get_config() if not config: gui_config() else: return config def __get_config(): folder = __get_config_folder() config_file = os.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) with open(os.path.join(folder_config, "config"), "wb") as config_file: config_file.write( pickle.dumps({ "login": { "user": user, "password": passwd_hash }, "folder": folder })) root.destroy() def gui_config(): root = Tk() root.geometry("250x420") img_logo = Image.open("img/logo.png") img_tk = ImageTk.PhotoImage(img_logo.resize((200, 150), Image.ANTIALIAS)) host = StringVar() host.set("localhost") host_field = Entry(root, textvariable=host) passwd = StringVar() passwd_field = Entry(root, textvariable=passwd, show="*") folder = StringVar() folder.set(os.path.join(os.getenv("HOME"), "Munyal")) folder_field = Entry(root, textvariable=folder) btn_folder = Button(root, text="Examinar", command=lambda: search_folder(folder)) connect = Button( root, text="Conectar", command=lambda: _set_config(root, host.get(), passwd, folder.get())) Label(root, text="MUNYAL").pack() Label(root, image=img_tk).pack() Label(root, text="").pack() Label(root, text="Ruta del servidor").pack() 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() Label(root, text="").pack() connect.pack() root.mainloop() def search_folder(field): path = filedialog.askdirectory() field.set(path) if __name__ == "__main__": print(get_config())