from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler from pyftpdlib.servers import FTPServer import os import time import string class CustomFTPHandler(FTPHandler): def on_connect(self): super().on_connect() self.username = "user" print("Cliente conectado.") def on_login(self, username): super().on_login(username) self.username = username self.user_dir = os.path.join(self.authorizer.get_home_dir(username), 'inbox') # Send the default server directory path to the client default_server_dir = "/home/eric/ProyectoJuanjoSegundoTrimestre/usuario" # Cambiar esto al directorio predeterminado self.send_response("DEFAULT_DIR", default_server_dir) print(f"Directorio predeterminado del servidor enviado al cliente: {default_server_dir}") def send_response(self, code, message): resp = f"{code} {message}\r\n" self.push(resp) def on_file_sent(self, file): super().on_file_sent(file) self.broadcast_file_sent(os.path.basename(file)) def broadcast_file_sent(self, filename): print(f"File '{filename}' sent") def list_files_in_user_inbox(self): files = [] try: files = os.listdir(self.user_dir) except FileNotFoundError: pass return files def normalize_filename(self, filename): valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits) filename = ''.join(c for c in filename if c in valid_chars) filename = filename[:255] # Limit filename length to 255 characters return filename def save_file(self, filename, data): try: filename = self.normalize_filename(filename) with open(os.path.join(self.user_dir, filename), 'wb') as file: file.write(data) print(f"File '{filename}' saved to {self.username}'s inbox.") except Exception as e: print(f"Error saving file: {e}") def run_ftp_server(): authorizer = DummyAuthorizer() # Creamos un Ășnico usuario authorizer.add_user("user", "password", "/home/eric/ProyectoJuanjoSegundoTrimestre/usuario", perm="lradw") # Cambia "/path/to/home/directory" al directorio que desees handler = CustomFTPHandler handler.authorizer = authorizer server = FTPServer(("127.0.0.1", 12345), handler) server.max_cons_per_ip = 5 server.serve_forever() if __name__ == "__main__": run_ftp_server()