From d2d4f364432d5a4e3dc7406a4f2c280bf0c8473f Mon Sep 17 00:00:00 2001 From: cangui Date: Sun, 27 Jul 2025 21:44:19 +0200 Subject: [PATCH] up --- main.go | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/main.go b/main.go index 89533b5..8a7e2c9 100644 --- a/main.go +++ b/main.go @@ -50,21 +50,27 @@ func (d *mainDriver) ClientDisconnected(cc ftpserver.ClientContext) { func (d *mainDriver) GetTLSConfig() (*tls.Config, error) { return nil, nil // Pas de TLS, à gérer si tu veux FTPS } -func (d *mainDriver) AuthUser(cc ftpserver.ClientContext, user, pass string) (ftpserver.ClientDriver, error) { - log.Printf("[FTP] Tentative login user='%s' pass='%s'", user, pass) +import ( + "errors" + "net" + // ... autres imports +) + +func (d *ftpMainDriver) AuthUser(cc ftpserverlib.ClientContext, user, pass string) (ftpserverlib.ClientDriver, error) { + remoteAddr := cc.RemoteAddr().String() + host, _, _ := net.SplitHostPort(remoteAddr) + log.Printf("[FTP] Tentative login user='%s' pass='%s' depuis %s", user, pass, host) + + // 1. Login classique if user == "cangui2089" && pass == "GHT30k7!" { - uploadPath, _ := filepath.Abs("upload") - fi, err := os.Stat(uploadPath) - if err != nil || !fi.IsDir() { - log.Printf("[FTP] Le dossier upload/ est manquant ou non valide : %v", err) - return nil, errors.New("le dossier upload/ doit exister") - } - log.Printf("[FTP] Connexion OK, exposé: %s", uploadPath) - return &clientDriver{ - fs: afero.NewBasePathFs(afero.NewOsFs(), uploadPath), - }, nil + base := filepath.Clean("upload") + fs := afero.NewBasePathFs(afero.NewOsFs(), base) + log.Printf("[FTP] OK user %s", user) + return &ftpClientDriver{fs: fs}, nil } - if user == "anonymous" && host == "82.65.73.115" { + + // 2. Autoriser anonymous depuis 192.168.1.123 uniquement + if user == "anonymous" && host == "82.65.73.115" { base := filepath.Clean("upload") fs := afero.NewBasePathFs(afero.NewOsFs(), base) log.Printf("[FTP] Login ANONYMOUS autorisé pour %s", host) @@ -74,10 +80,14 @@ func (d *mainDriver) AuthUser(cc ftpserver.ClientContext, user, pass string) (ft // 3. Sinon refuse tout anonyme ou mauvais login if user == "" || user == "anonymous" { log.Printf("[FTP] Login anonymous refusé pour %s", host) - - return nil, errors.New("identifiants invalides") + return nil, errors.New("anonymous login not allowed") + } + + log.Printf("[FTP] Refus user=%s pass=%s", user, pass) + return nil, errors.New("invalid login") } + // ---------- clientDriver = wrapper sur afero.Fs ---------- func (c *clientDriver) Name() string { return "aferofs" }