munyal-client/config.py

138 lines
3.6 KiB
Python

import os
import shutil
import sys
import pathlib
import pickle
from hashlib import sha256
from tkinter import Button, Entry, Label, StringVar, Tk, filedialog
from uuid import uuid4
from PIL import Image, ImageTk
from misc import alert
from misc import get_os
from misc import path_join
def __get_config_folder():
_os = get_os()
if _os == "linux":
folder = path_join(os.getenv("HOME"), ".munyal")
else:
folder = path_join(os.path.expandvars("%APPDATA%"), "Munyal")
return folder
def __get_files_folder():
folder = path_join(os.path.expanduser("~"), "Munyal")
return folder
def get_config():
for _ in range(3):
config = __get_config()
if not config:
gui_config()
else:
return config
def __get_config():
folder = __get_config_folder()
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)
with open(path_join(folder_config, "config"), "wb") as config_file:
config_file.write(
pickle.dumps({
"login": {
"user": user,
"password": passwd_hash
},
"folder": folder,
"uuid": str(uuid4())
}))
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(__get_files_folder())
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__":
if "--restart" in sys.argv:
if __get_config():
shutil.rmtree(__get_config_folder())
print(get_config())