132 lines
3.5 KiB
Python
132 lines
3.5 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 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_files_folder():
|
|
folder = os.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 = 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(__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())
|