--- /dev/null
+# Ftp server\r
+import os,socket\r
+import ext.crud as crud\r
+import time,textwrap\r
+import ext.pyperclip.__init__ as pyperclip\r
+import webbrowser,pickle\r
+import os,subprocess,getpass\r
+import ext.x64.x64_encoding as x64\r
+import io\r
+from ext.pyftpdlib.authorizers import DummyAuthorizer\r
+from ext.pyftpdlib.handlers import FTPHandler\r
+from ext.pyftpdlib.servers import FTPServer\r
+\r
+users_count=0\r
+\r
+def authorizer_def():\r
+ global authorizer\r
+ authorizer = DummyAuthorizer()\r
+authorizer_def()\r
+error=0\r
+\r
+FTP_PORT = 2121\r
+#---------------------------------------------------------------------------------------#\r
+\r
+def ip_def():\r
+ return socket.gethostbyname(socket.gethostname())\r
+ \r
+#---------------------------------------------------------------------------------------#\r
+\r
+def main():\r
+ global server,FTP_DIRECTORY,status,users_count,annonimus\r
+ if users_count==0:\r
+ newuser()\r
+ annonimus=anonim.get()\r
+ newuser()\r
+ handler = FTPHandler\r
+ handler.authorizer = authorizer\r
+ handler.banner = 'Servidor FTP Listo'\r
+ handler.passive_ports = range(60000, 65535)\r
+ address = (ip_var.get(), port.get())\r
+ server = FTPServer(address, handler)\r
+\r
+ server.max_cons = 256\r
+ server.max_cons_per_ip = 5\r
+ save_all()\r
+ \r
+ ftp_name=textwrap.wrap(FTP_DIRECTORY,60)\r
+ ftp_=""\r
+ for i in ftp_name:\r
+ ftp_=ftp_+i+"\n"\r
+\r
+ web=Label(text="ftp://"+ip_var.get()+":"+str(port.get()),relief="sunken",justify="center",bg=color,fg=color2,width=53)\r
+ pyper=Button(text="Copiar",command=lambda:pyperclip.copy("ftp://"+ip_var.get()+":"+str(port.get())),bg=color,fg=color2,overrelief="sunken",width=25)\r
+ pyper2=Button(text="Abrir navegador",command=lambda:webbrowser.open("ftp://"+ip_var.get()+":"+str(port.get())),bg=color,fg=color2,overrelief="sunken",width=25)\r
+ \r
+ root.geometry("620x710")\r
+ pyper.place(x=120,y=620)\r
+ pyper2.place(x=312,y=620)\r
+ web.place(x=120,y=590)\r
+ messagebox.showinfo("Ftp","El servidor inicio correctamente")\r
+ server.serve_forever()\r
+ web.place_forget()\r
+ pyper.place_forget()\r
+ pyper2.place_forget()\r
+ status="off"\r
+ authorizer_def()\r
+ root.geometry("620x610")\r
+ #No se asusten este error es para matar el hilo š¤£š¤£š¤£\r
+ raise(ValueError)\r
+\r
+ \r
+def man():\r
+ try:\r
+ print(ipauth.get(),12)\r
+ if ipauth.get()=="1":\r
+ ip_var.set(ip_def())\r
+ else:\r
+ pass\r
+ main()\r
+ except OSError as error:\r
+ if ipauth.get()=="0":\r
+ messagebox.showwarning("IP","La direcciĆ³n IP que puso ya esta en uso, por favor escriba otra.")\r
+ print(error)\r
+ ftp.config(text="Start Ftp-server",command=ftpstart)\r
+ else:\r
+ port.set(int(port.get())+1)\r
+ if ip_def()==ip_var.get():\r
+ man()\r
+ else:\r
+ messagebox.showwarning("IP","La direcciĆ³n IP que puso ya esta en uso, por favor escriba otra.")\r
+ ftp.config(text="Iniciar Servidor",command=ftpstart)\r
+ main()\r
+ \r
+\r
+\r
+#---------------------------------------------------------------------------------------#\r
+\r
+from tkinter import Label,Entry,Tk,Button,StringVar,IntVar,Checkbutton,Menu,Spinbox,Menubutton,PhotoImage\r
+from tkinter import messagebox,filedialog\r
+import threading,io\r
+import shutil\r
+\r
+\r
+status=""\r
+\r
+\r
+from ext.color import Color\r
+\r
+\r
+\r
+\r
+def conn():\r
+ global theme2,color,color2,banner,banner1,banner_name2\r
+ try:\r
+ theme=io.open("configs\\themes\\theme.thm","r")\r
+ theme2=theme.readlines()\r
+ print("THEME-NAME: ",theme2[0].rstrip(" \n"))\r
+ color_class=Color(theme2[1].rstrip(" \n"))\r
+ color=color_class.get()\r
+ print(len(color))\r
+ color2_class=Color(theme2[2].rstrip("\n"))\r
+ color2=color2_class.get()\r
+ banner=Color(theme2[3].rstrip("\n"))\r
+ banner1=Color(theme2[4].rstrip("\n"))\r
+ banner=banner.get()\r
+ banner1=banner1.get()\r
+ banner_name2=theme2[5].rstrip("\n")\r
+ theme.close()\r
+ del(theme)\r
+ except ValueError:\r
+ messagebox.showwarning("ColorError","Uno/s color no esta bien escrito")\r
+ ifoff=messagebox.askokcancel("Alerta","Se le restablecera el tema")\r
+ if ifoff==True:\r
+ theme=io.open("configs\\themes\\theme.thm","w")\r
+ theme.write("Photoshop-theme\n#5e5c5c\n#ffffff\n#5e5c5c\n#ffffff\nSERVIDOR FTP V10")\r
+ else:\r
+ pass\r
+ except:\r
+ try:\r
+ os.mkdir("configs")\r
+ except:\r
+ pass\r
+ try:\r
+ os.mkdir("configs\\themes")\r
+ except:\r
+ pass\r
+ theme=io.open("configs\\themes\\theme.thm","w")\r
+ theme.write("Photoshop-theme\n#5e5c5c\n#ffffff\n#5e5c5c\n#ffffff\nSERVIDOR FTP V10")\r
+ theme.close()\r
+ theme=io.open("configs\\themes\\theme.thm","r")\r
+ theme2=theme.readlines()\r
+ theme.close()\r
+\r
+ color_class=Color(theme2[1].rstrip(" \n"))\r
+ color=color_class.get()\r
+ color2_class=Color(theme2[2].rstrip(" \n"))\r
+ color2=color2_class.get()\r
+ banner=Color(theme2[3].rstrip("\n"))\r
+ banner1=Color(theme2[4].rstrip("\n"))\r
+ banner=banner.get()\r
+ banner1=banner1.get()\r
+ banner_name2=theme2[5].rstrip(" \n")\r
+ del(theme)\r
+ print("THEME-NAME: ",theme2[0].rstrip(" \n"))\r
+conn()\r
+\r
+\r
+\r
+\r
+#color="#bde0e9"\r
+\r
+\r
+\r
+root=Tk()\r
+root.geometry("620x610")\r
+root.config(bg=color)\r
+root.resizable(0,0)\r
+root.title("FTP server")\r
+root.iconbitmap("image\\logo.ico")\r
+\r
+#DEFS\r
+def ftpstart():\r
+ global status,t,FTP_USER,FTP_PASSWORD,FTP_DIRECTORY\r
+ print(1)\r
+ FTP_USER = user.get()\r
+ FTP_PASSWORD = pass2.get()\r
+ FTP_DIRECTORY = directory.get()\r
+ \r
+ ftp.config(text="Parar servidor",command=ftpstop)\r
+ if status=="on":\r
+ pass\r
+ else:\r
+ status="on"\r
+ t=threading.Thread(target=man)\r
+ t.start()\r
+def anonimo():\r
+ if anonim.get()=="1":\r
+ Pass.config(show="A")\r
+ status1.place_forget()\r
+ User.config(show="A")\r
+ else:\r
+ Pass.config(show="")\r
+ status1.place(x=245,y=240)\r
+ t=threading.Thread(target=while_)\r
+ t.start()\r
+ User.config(show="")\r
+def user_auth():\r
+ user.set(getpass.getuser())\r
+def ftpstop():\r
+ global t\r
+ ftp.config(text="Iniciar Servidor",command=ftpstart)\r
+ server.close_all()\r
+ del(t)\r
+ authorizer_def()\r
+def show():\r
+ crud.connect("configs\\cfg.db")\r
+ if show_.get()=="1" and anonim.get()=="0":\r
+ Pass.config(show="")\r
+ crud.update("configs","show","'"+show_.get()+"'","id",1)\r
+ elif show_.get()=="0" and anonim.get()=="0":\r
+ Pass.config(show="*")\r
+ crud.update("configs","show","'"+show_.get()+"'","id",1)\r
+ else:\r
+ if show_.get()=="0":\r
+ show_.set("1")\r
+ elif show_.get()=="1":\r
+ show_.set("0")\r
+ crud.save()\r
+ crud.close()\r
+def change():\r
+ global annonimus\r
+ annonimus=anonim.get()\r
+def selecdir():\r
+ dire=filedialog.askdirectory(initial=directory.get())\r
+ if dire=="":\r
+ directory.set(os.getcwd())\r
+ dir()\r
+ else:\r
+ directory.set(dire)\r
+ dir()\r
+def pass_auth_def():\r
+ pass2.set(crud.password(10))\r
+def aut():\r
+ crud.connect("configs\\cfg.db")\r
+ crud.update("configs","cfg_aut",run_open.get(),"id",1)\r
+ crud.save()\r
+ crud.close()\r
+def ann():\r
+ anonimo()\r
+ crud.connect("configs\\cfg.db")\r
+ crud.update("configs","cfg_ann",anonim.get(),"id",1)\r
+ crud.save()\r
+ change()\r
+ crud.close()\r
+def ip_ch():\r
+ crud.connect("configs\\cfg.db")\r
+ crud.update("configs","cfg_ip","'"+ip_var.get()+"'","id",1)\r
+ crud.save()\r
+ crud.close()\r
+def port_ch():\r
+ crud.connect("configs\\cfg.db")\r
+ crud.update("configs","cfg_port",port.get(),"id",1)\r
+ crud.save()\r
+ crud.close()\r
+def dir():\r
+ crud.connect("configs\\cfg.db")\r
+ crud.update("configs","cfg_dir","'"+directory.get()+"'","id",1)\r
+ crud.save()\r
+ crud.close()\r
+def usr():\r
+ crud.connect("configs\\cfg.db")\r
+ crud.update("configs","cfg_usr","'"+x64.encode_b64_x64(user.get())+"'","id",1)\r
+ crud.save()\r
+ crud.close()\r
+def pss():\r
+ crud.connect("configs\\cfg.db")\r
+ crud.update("configs","cfg_pass","'"+x64.encode_b64_x64(pass2.get())+"'","id",1)\r
+ crud.save()\r
+ crud.close()\r
+\r
+def ip_port_auth():\r
+ crud.connect("configs\\cfg.db")\r
+ crud.update("configs","cfg_auth","'"+ipauth.get()+"'","id",1)\r
+ crud.save()\r
+ crud.close()\r
+\r
+def save_perm():\r
+ crud.connect("configs\\cfg.db")\r
+ crud.update("configs","perm","'"+perm.get()+"'","id",1)\r
+ crud.save()\r
+ crud.close()\r
+def save_all():\r
+ ip_port_auth()\r
+ ip_ch()\r
+ port_ch()\r
+ dir()\r
+ usr()\r
+ pss()\r
+ save_perm()\r
+def newuser():\r
+ global users_count,FTP_USER,FTP_PASSWORD,FTP_DIRECTORY,annonimus,status\r
+ annonimus=anonim.get()\r
+ print(annonimus)\r
+ FTP_USER = user.get()\r
+ FTP_PASSWORD = pass2.get()\r
+ if FTP_PASSWORD=="":\r
+ sino=messagebox.askokcancel("NoPassword","A puesto una contraseƱa en blanco,\nQuiere que sea creado un usuario anonimo?")\r
+ if sino==True:\r
+ anonim.set(1)\r
+ change()\r
+ pass2.set("admin")\r
+ else:\r
+ pass2.set("admin")\r
+ FTP_PASSWORD = pass2.get()\r
+ FTP_DIRECTORY = directory.get()\r
+ if FTP_DIRECTORY=="":\r
+ FTP_DIRECTORY=os.getcwd()\r
+ directory.set(os.getcwd())\r
+ if ip_var.get()=="":\r
+ ipauth.set("on")\r
+ ip_def()\r
+ try:\r
+ if annonimus=="1":\r
+ authorizer.add_anonymous(FTP_DIRECTORY, perm=perm.get())\r
+ messagebox.showinfo("Usuario aƱadido","El usuario anonimo fue aƱadido con exito\nPermiso:"+perm.get())\r
+ users_count=users_count+1\r
+ else:\r
+ authorizer.add_user(FTP_USER, FTP_PASSWORD, FTP_DIRECTORY, perm=perm.get())\r
+ messagebox.showinfo("Usuario aƱadido","El usuario "+user.get()+" fue aƱadido con exito\nPermiso: "+perm.get()+"\n"+"Password: "+"*"*len(pass2.get()))\r
+ users_count=users_count+1\r
+ except ValueError:\r
+ status="off"\r
+ print("ValueError1")\r
+ save_all()\r
+def remove():\r
+ try:\r
+ authorizer.remove_user(user.get())\r
+ messagebox.showinfo("Sucess!!","El usuario "+user.get()+" ha sido eliminado correctamente")\r
+ except:\r
+ messagebox.showwarning("UserError","El usuario no existe")\r
+def actualizar():\r
+ try:\r
+ authorizer.remove_user(user.get())\r
+ server.close_all()\r
+ authorizer_def()\r
+ newuser()\r
+ ftpstart()\r
+ except:\r
+ messagebox.showwarning("UserError","El usuario no existe")\r
+ \r
+ \r
+def reset():\r
+ ip_var.set(ip_def())\r
+ port.set(2121)\r
+ directory.set(os.getcwd())\r
+ user.set("admin")\r
+ pass2.set("ADMIN999.")\r
+ perm.set("elradfmw")\r
+ run_open.set("0")\r
+ ipauth.set(1)\r
+ show_.set(1)\r
+ anonim.set(0)\r
+ save_all()\r
+def preview():\r
+ global banner_\r
+ conn()\r
+ banner_=banner_name2\r
+ bann()\r
+ del(banner_)\r
+ configure.config(bg=color,fg=color2)\r
+ ftp1.config(bg=color,fg=color2)\r
+ ayuda.config(bg=color,fg=color2)\r
+ b1.config(bg=color,fg=color2)\r
+ b2.config(bg=color,fg=color2)\r
+ b3.config(bg=color,fg=color2)\r
+ b4.config(bg=color,fg=color2)\r
+ b5.config(bg=color,fg=color2)\r
+ b6.config(bg=color,fg=color2)\r
+ b7.config(bg=color,fg=color2)\r
+ b8.config(bg=color,fg=color2)\r
+ #b9.config(bg=color,fg=color2)\r
+\r
+ l1.config(bg=color,fg=color2)\r
+ l2.config(bg=color,fg=color2)\r
+ l3.config(bg=color,fg=color2)\r
+ l4.config(bg=color,fg=color2)\r
+ l5.config(bg=color,fg=color2)\r
+ l6.config(bg=color,fg=color2)\r
+ l7.config(bg=color,fg=color2)\r
+ l8.config(bg=color,fg=color2)\r
+ l9.config(bg=color,fg=color2)\r
+ \r
+ c1.config(bg=color,fg=color2,selectcolor=color)\r
+ c2.config(bg=color,fg=color2,selectcolor=color)\r
+ c3.config(bg=color,fg=color2,selectcolor=color)\r
+ c4.config(bg=color,fg=color2,selectcolor=color)\r
+ ip_ent.config(bg=color,fg=color2)\r
+ Dir.config(bg=color,fg=color2)\r
+ Port.config(bg=color,fg=color2,buttonbackground=color)\r
+ User.config(bg=color,fg=color2)\r
+ Perm.config(bg=color,fg=color2)\r
+ Pass.config(bg=color,fg=color2)\r
+ menu.config(fg=color2,bg=color)\r
+ ftp.config(bg=color,fg=color2)\r
+ Banner.config(bg=banner,fg=banner1,text=b23)\r
+ root.config(bg=color)\r
+ status1.config(bg=color,fg=color2)\r
+def tkinter_config():\r
+ subprocess.Popen(["pythonw","config.pyw"])\r
+ preview()\r
+ #Este error es para matar el hilo no se asusten š¤£\r
+ raise(ValueError)\r
+def tkinter_init():\r
+ t2=threading.Thread(target=tkinter_config)\r
+ t2.start()\r
+\r
+\r
+#Banner\r
+#Clasic theme\r
+#FG-Banner:323836\r
+#BG-Banner:bee2b3.\r
+b23=""\r
+count=0\r
+banner_=banner_name2\r
+def bann():\r
+ global b23\r
+ if len(banner_)<=23 and banner_!="":\r
+ b23=banner_\r
+ else:\r
+ b23="Servidor FTP V11"\r
+bann()\r
+del(banner_)\r
+Banner=Label(text=b23,bg=banner,width=25)\r
+Banner.config(fg=banner1,font=("Army",19))\r
+if len(b23)<=23 and len(b23)>=20:\r
+ Banner.place(x=105,y=40)\r
+elif len(b23)<=20 and len(b23)>16:\r
+ Banner.place(x=100,y=40)\r
+elif len(b23)<=16 and len(b23)>10:\r
+ Banner.place(x=95,y=40)\r
+elif len(b23)<=10 and len(b23)>5:\r
+ Banner.place(x=105,y=40)\r
+elif len(b23)<=5 and len(b23)>3:\r
+ Banner.place(x=105,y=40)\r
+elif len(b23)<=3 and len(b23)>=1:\r
+ Banner.place(x=105,y=40)\r
+del(b23)\r
+del(count)\r
+\r
+#StringVar and IntVar\r
+ip_var=StringVar()\r
+directory=StringVar() \r
+user=StringVar()\r
+pass2=StringVar()\r
+port=IntVar()\r
+portauth=StringVar()\r
+run_open=StringVar()\r
+anonim=StringVar()\r
+show_=StringVar()\r
+ipauth=StringVar()\r
+perm=StringVar()\r
+#Variables\r
+annonimus=anonim.get()\r
+portauth.set("off")\r
+\r
+def save_an():\r
+ arch=filedialog.asksaveasfile(initialdir=directory.get(),filetypes=(("FTP Config File","*.fcfg"),("Other Config File","*.*")))\r
+ if arch==None:\r
+ pass\r
+ else:\r
+ arch.write(str(ip_var.get())+"\n"+\r
+ str(port.get())+"\n"+\r
+ str(directory.get())+"\n"+\r
+ str(user.get())+"\n"+\r
+ str(pass2.get())+"\n"+\r
+ str(perm.get())+"\n"+\r
+ str(anonim.get())+":"+\r
+ str(show_.get())+":"+\r
+ str(ipauth.get())+":"+\r
+ str(run_open.get()))\r
+\r
+def analsis():\r
+ arch=filedialog.askopenfile(initialdir=directory.get(),filetypes=(("FTP Config File","*.fcfg"),("Other Config File","*.*")))\r
+ if arch==None:\r
+ pass\r
+ else:\r
+ archivo=arch\r
+ archivo=archivo.readlines()\r
+ ip_var.set(archivo[0].split(":")[0])\r
+ port.set(archivo[0].split(":")[1].replace("\n",""))\r
+ directory.set(archivo[1].replace("\n",""))\r
+ user.set(archivo[2].split(":")[0].replace("\n",""))\r
+ pass2.set(archivo[3].replace("\n",""))\r
+ perm.set(archivo[2].split(":")[1].replace("\n",""))\r
+ anonim.set(archivo[4].split(":")[0].replace("\n",""))\r
+ show_.set(archivo[4].split(":")[1].replace("\n",""))\r
+ ipauth.set(archivo[4].split(":")[2].replace("\n",""))\r
+ run_open.set(archivo[4].split(":")[3].replace("\n",""))\r
+\r
+\r
+\r
+#Labels\r
+l1=Label(text="__________________________________________________________________________",justify="left",bg=color,fg=color2)\r
+l1.place(y=310,x=120)\r
+l2=Label(text="__________________________________________________________________________",justify="left",bg=color,fg=color2)\r
+l2.place(y=570,x=120)\r
+l3=Label(text="IP",bg=color,fg=color2)\r
+l3.place(x=170,y=100)\r
+l4=Label(text=":",font=("Arial",15),bg=color,fg=color2)\r
+l4.place(x=362,y=93)\r
+l5=Label(text="P",bg=color,fg=color2)\r
+l5.place(x=357,y=179)\r
+l6=Label(text="Directorio",bg=color,fg=color2)\r
+l6.place(x=170,y=140)\r
+l7=Label(text="User",bg=color,fg=color2)\r
+l7.place(x=170,y=180)\r
+l8=Label(text="Password",bg=color,fg=color2)\r
+l8.place(x=170,y=220)\r
+l9=Label(text="__________________________________________________________________________",justify="left",bg=color,fg=color2)\r
+l9.place(y=395,x=120)\r
+#Checkbuttons\r
+c1=Checkbutton(text="Ejecutar servidor al abrir",variable=run_open,onvalue="1",offvalue="0",command=aut,bg=color,fg=color2,overrelief="sunken",selectcolor=color,anchor="w",width=18)\r
+c1.place(y=370,x=150)\r
+c2=Checkbutton(text="IP y Puerto AutomƔticos",variable=ipauth,onvalue=1,offvalue=0,bg=color,command=ip_port_auth,fg=color2,overrelief="sunken",selectcolor=color,anchor="w",width=18)\r
+c2.place(x=315,y=340)\r
+c3=Checkbutton(text="Mostrar contraseƱa",variable=show_,onvalue=1,offvalue=0,command=show,bg=color,fg=color2,overrelief="sunken",selectcolor=color,anchor="w",width=18)\r
+c3.place(y=370,x=315) \r
+c4=Checkbutton(text="Anonimo",variable=anonim,onvalue=1,offvalue=0,command=ann,bg=color,fg=color2,overrelief="sunken",selectcolor=color,anchor="w",width=18)\r
+c4.place(y=340,x=150)\r
+#Buttons\r
+ftp=Button(text="Iniciar Servidor",command=ftpstart,bg=color,fg=color2,overrelief="sunken")\r
+ftp.place(x=260,y=280)\r
+b1=Button(text="Seleccionar Directorio",command=lambda:selecdir(),bg=color,fg=color2,width=20,overrelief="sunken")\r
+b1.place(x=155,y=460)\r
+b2=Button(text="Guardar cambios",command=lambda:save_all(),bg=color,fg=color2,width=20,overrelief="sunken")\r
+b2.place(x=155,y=490)\r
+b3=Button(text="AƱadir usuario",command=lambda:newuser(),bg=color,fg=color2,width=20,overrelief="sunken")\r
+b3.place(x=320,y=460)\r
+b4=Button(text="Resetear cambios",command=lambda:reset(),bg=color,fg=color2,width=20,overrelief="sunken")\r
+b4.place(x=320,y=490)\r
+b5=Button(text="Actualizar usuario",command=lambda:actualizar(),bg=color,fg=color2,width=20,overrelief="sunken")\r
+b5.place(x=155,y=520)\r
+b6=Button(text="Eliminar usuario",command=lambda:remove(),bg=color,fg=color2,width=20,overrelief="sunken")\r
+b6.place(x=320,y=520)\r
+b7=Button(text="Usuario de PC",command=user_auth,bg=color,fg=color2,overrelief="sunken",width=20)\r
+b7.place(y=430,x=155)\r
+b8=Button(text="Crear ContraseƱa",command=pass_auth_def,bg=color,fg=color2,overrelief="sunken",width=20)\r
+b8.place(y=430,x=320)\r
+b9=Button(text="Cargar FCFG",command=analsis,bg=color,fg=color2,overrelief="sunken",width=20)\r
+b9.place(y=550,x=155)\r
+b10=Button(text="Exportar FCFG",command=save_an,bg=color,fg=color2,overrelief="sunken",width=20)\r
+b10.place(y=550,x=320)\r
+#Menu\r
+"""\r
+\r
+abc=Menubutton(fg=color2,bg=color,text="Editar",font=("ARial",10))\r
+abc.place(x=0,y=5)\r
+abc1=Menubutton(fg=color2,bg=color,text="Servidor",font=("ARial",10))\r
+abc1.place(x=50,y=5)\r
+abc2=Menubutton(fg=color2,bg=color,text="Ayuda",font=("ARial",10))\r
+abc2.place(x=110,y=5)\r
+\r
+menu=Menu(abc,tearoff=0)\r
+menu1=Menu(abc1,tearoff=0)\r
+menu2=Menu(abc2,tearoff=0)\r
+\r
+\r
+abc.config(menu=menu)\r
+abc1.config(menu=menu1)\r
+abc2.config(menu=menu2)\r
+\r
+menu.config(fg=color2,bg=color)\r
+menu1.config(fg=color2,bg=color)\r
+menu2.config(fg=color2,bg=color)\r
+\r
+configure=Menu(menu,tearoff=0,fg=color2,bg=color)\r
+\r
+#menu.add_cascade(label="Editar",menu=menu)\r
+#ftp1=Menu(menu,tearoff=0,fg=color2,bg=color)\r
+ftp1=menu1\r
+ftp1.add_command(label="Iniciar servidor",command=lambda:ftpstart())\r
+ftp1.add_command(label="Parar servidor",command=lambda:ftpstop())\r
+ftp1.add_separator()\r
+ftp1.add_command(label="Cerrar APP",command=lambda:root.destroy())\r
+#menu.add_cascade(label="Servidor",menu=ftp1)\r
+\r
+#ayuda=Menu(menu,tearoff=0,fg=color2,bg=color)\r
+ayuda=menu2\r
+ayuda.add_command(label="Puntuar app",command=lambda:subprocess.Popen(["pythonw","ext\\puntua.py"]))\r
+ayuda.add_command(label="Acerca de...",command=lambda:subprocess.Popen(["pythonw","ext\\acerca_de.py"]))\r
+ayuda.add_separator()\r
+ayuda.add_command(label="IP",command=lambda:subprocess.Popen(["pythonw","ext\\Ftp_help.py"]))\r
+ayuda.add_command(label="Directorio",command=lambda:subprocess.Popen(["pythonw","ext\\Ftp_help1.py"]))\r
+ayuda.add_command(label="Usuario",command=lambda:subprocess.Popen(["pythonw","ext\\Ftp_help2.py"]))\r
+ayuda.add_command(label="Permisos",command=lambda:subprocess.Popen(["pythonw","ext\\Ftp_help3.py"]))\r
+#menu.add_cascade(label="Ayuda",menu=ayuda)\r
+menu.add_command(label="ConfiguraciĆ³n",command=tkinter_init)\r
+"""\r
+menu=Menu(root)\r
+menu.config(fg=color2,bg=color)\r
+root.config(menu=menu)\r
+configure=Menu(menu,tearoff=0,fg=color2,bg=color)\r
+menu.add_cascade(label="Editar",menu=configure)\r
+ftp1=Menu(menu,tearoff=0,fg=color2,bg=color)\r
+ftp1.add_command(label="Iniciar servidor",command=lambda:ftpstart())\r
+ftp1.add_command(label="Parar servidor",command=lambda:ftpstop())\r
+ftp1.add_separator()\r
+ftp1.add_command(label="Cerrar APP",command=lambda:root.destroy())\r
+menu.add_cascade(label="Servidor",menu=ftp1)\r
+ayuda=Menu(menu,tearoff=0,fg=color2,bg=color)\r
+ayuda.add_command(label="Puntuar app",command=lambda:subprocess.Popen(["pythonw","ext\\puntua.pyw"]))\r
+ayuda.add_command(label="Acerca de...",command=lambda:subprocess.Popen(["pythonw","ext\\acerca_de.pyw"]))\r
+ayuda.add_separator()\r
+ayuda.add_command(label="IP",command=lambda:subprocess.Popen(["pythonw","ext\\Ftp_help.pyw"]))\r
+ayuda.add_command(label="Directorio",command=lambda:subprocess.Popen(["pythonw","ext\\Ftp_help1.pyw"]))\r
+ayuda.add_command(label="Usuario",command=lambda:subprocess.Popen(["pythonw","ext\\Ftp_help2.pyw"]))\r
+ayuda.add_command(label="Permisos",command=lambda:subprocess.Popen(["pythonw","ext\\Ftp_help3.pyw"]))\r
+menu.add_cascade(label="Ayuda",menu=ayuda)\r
+configure.add_command(label="ConfiguraciĆ³n",command=tkinter_init)\r
+\r
+ip_ent=Entry(textvariable=ip_var,bg=color,fg=color2,width=16)\r
+Port=Spinbox(justify="center",textvariable=port,width=8,bg=color,fg=color2,to=9999,buttonbackground=color)\r
+Dir=Entry(textvariable=directory,width=29,bg=color,fg=color2)\r
+Dir.place(x=260,y=140)\r
+User=Entry(textvariable=user,width=15,bg=color,justify="center",fg=color2)\r
+Perm=Entry(textvariable=perm,width=10,bg=color,justify="center",fg=color2)\r
+Pass=Entry(textvariable=pass2,width=29,justify="center",bg=color,fg=color2)\r
+Port.place(x=375,y=100)\r
+User.place(x=260,y=180)\r
+Perm.place(x=375,y=180)\r
+ip_ent.place(x=260,y=100)\r
+Pass.place(x=260,y=220)\r
+\r
+status1=Label(text="password",fg=color2,bg=color,width=29,justify="center")\r
+status1.place(x=245,y=240)\r
+pass2_status=""\r
+def while_():\r
+ global pass2_status,pass2\r
+ while True:\r
+ time.sleep(0.5)\r
+ if pass2_status==pass2.get() and anonim.get()=="0":\r
+ pass\r
+ elif anonim.get()=="1":\r
+ raise(ValueError)\r
+ #Este error es para matar el hilo no se asusten š¤£\r
+ else:\r
+ pass2_status=pass2.get()\r
+ status1.config(text=crud.check_password_potential(pass2.get()))\r
+t=threading.Thread(target=while_)\r
+t.start()\r
+\r
+#Llamadas a funciones necesarias\r
+\r
+try:\r
+ os.mkdir("configs")\r
+except:\r
+ pass\r
+crud.connect("configs\\cfg.db")\r
+def connect_db():\r
+ try:\r
+ crud.runcode("""CREATE TABLE configs(\r
+ id INTEGER PRIMARY KEY AUTOINCREMENT,\r
+ cfg_aut boolean,\r
+ cfg_ann boolean,\r
+ cfg_ip,\r
+ cfg_port INTEGER,\r
+ cfg_dir,\r
+ cfg_usr,\r
+ cfg_pass,\r
+ show,\r
+ cfg_auth INTEGER,\r
+ perm\r
+ )""")\r
+ \r
+ crud.create("configs","NULL,FALSE,TRUE,'"+ip_def()+"',2121,"+"'"+os.getcwd()+"'"+",'"+x64.encode_b64_x64("admin")+"','"+x64.encode_b64_x64("admin")+"','off',1,'elradfmw'")\r
+ crud.save()\r
+ read_db=crud.read("configs")\r
+ print(read_db)\r
+ b64=read_db[0][6],read_db[0][7]\r
+ b64=x64.decode_list_x64(b64)\r
+\r
+ run_open.set(str(read_db[0][1]))\r
+ anonim.set(str(read_db[0][2]))\r
+\r
+ ip_var.set(read_db[0][3])\r
+\r
+ port.set(read_db[0][4])\r
+\r
+ directory.set(read_db[0][5])\r
+\r
+ user.set(b64[0])\r
+ pass2.set(b64[1])\r
+\r
+ show_.set(read_db[0][8])\r
+\r
+ ipauth.set(read_db[0][9])\r
+\r
+\r
+ perm.set(read_db[0][10])\r
+\r
+ show()\r
+ crud.close()\r
+ except:\r
+ read_db=crud.read("configs")\r
+ print(read_db)\r
+ b64=read_db[0][6],read_db[0][7]\r
+ b64=x64.decode_list_x64(b64)\r
+\r
+ run_open.set(str(read_db[0][1]))\r
+ anonim.set(str(read_db[0][2]))\r
+\r
+ ip_var.set(read_db[0][3])\r
+\r
+ port.set(read_db[0][4])\r
+\r
+ directory.set(read_db[0][5])\r
+\r
+ user.set(b64[0])\r
+ pass2.set(b64[1])\r
+\r
+ show_.set(read_db[0][8])\r
+\r
+ ipauth.set(read_db[0][9])\r
+\r
+\r
+ perm.set(read_db[0][10])\r
+\r
+ show()\r
+ crud.close()\r
+\r
+\r
+\r
+connect_db()\r
+anonimo()\r
+show()\r
+if run_open.get()=="1":\r
+ ftpstart()\r
+else:\r
+ print(run_open.get())\r
+def close_app():\r
+ try:\r
+ ftpstop()\r
+ except:\r
+ pass\r
+ root.destroy()\r
+ anonim.set(1)\r
+ anonimo()\r
+ raise(ValueError)\r
+\r
+class HoverButton(Button):\r
+ def __init__(self, master, **kw):\r
+ Button.__init__(self,master=master,**kw)\r
+ self.defaultBackground = self["background"]\r
+ self.bind("<Enter>", self.on_enter)\r
+ self.bind("<Leave>", self.on_leave)\r
+\r
+ def on_enter(self, e):\r
+ self["background"] = self["activebackground"]\r
+\r
+ def on_leave(self, e):\r
+ self["background"] = self.defaultBackground\r
+\r
+#b9=HoverButton(root,text="x",fg=color2,bg=color,command=close_app,height=1,width=4,font=("Arial",15),relief="flat",overrelief="flat",highlightcolor=Color("red").get(),activebackground=Color("red_strong").get(),activeforeground="#ffffff")\r
+#print(b9.config())\r
+#b9.place(y=0,x=566)\r
+#root.overrideredirect(1)\r
+root.protocol('WM_DELETE_WINDOW',close_app)\r
+root.mainloop()\r