diff --git a/main.go b/main.go index 9dbc54d..30debfc 100644 --- a/main.go +++ b/main.go @@ -39,31 +39,51 @@ func (d *ftpMainDriver) ClientConnected(cc ftpserverlib.ClientContext) (string, } func (d *ftpMainDriver) ClientDisconnected(cc ftpserverlib.ClientContext) {} func (d *ftpMainDriver) GetTLSConfig() (*tls.Config, error) { return nil, nil } -func (d *ftpMainDriver) AuthUser(cc ftpserverlib.ClientContext, user, pass string) (ftpserverlib.ClientDriver, error) { - log.Printf("[FTP] Tentative login user='%s' pass='%s'", user, pass) +// func (d *ftpMainDriver) AuthUser(cc ftpserverlib.ClientContext, user, pass string) (ftpserverlib.ClientDriver, error) { +// log.Printf("[FTP] Tentative login user='%s' pass='%s'", user, pass) - if user == "cangui2089" { - base := filepath.Clean("upload") - absBase, err := filepath.Abs(base) - if err != nil { - log.Printf("[FTP] ERREUR : Impossible de résoudre le chemin absolu de 'upload' : %v", err) - return nil, errors.New("erreur chemin upload") - } - // Vérifie que le dossier existe vraiment et est accessible - info, err := os.Stat(absBase) - if err != nil { - log.Printf("[FTP] ERREUR : Le dossier upload n'existe pas (%s) : %v", absBase, err) - return nil, errors.New("le dossier upload est absent") - } - if !info.IsDir() { - log.Printf("[FTP] ERREUR : Le chemin upload (%s) n'est pas un dossier", absBase) - return nil, errors.New("upload n'est pas un dossier") - } - log.Printf("[FTP] OK dossier upload : %s (mode %v, owner UID=%d)", absBase, info.Mode(), info.Sys()) - fs := afero.NewBasePathFs(afero.NewOsFs(), absBase) - return &ftpClientDriver{fs: fs}, nil +// if user == "cangui2089" { +// base := filepath.Clean("upload") +// absBase, err := filepath.Abs(base) +// if err != nil { +// log.Printf("[FTP] ERREUR : Impossible de résoudre le chemin absolu de 'upload' : %v", err) +// return nil, errors.New("erreur chemin upload") +// } +// // Vérifie que le dossier existe vraiment et est accessible +// info, err := os.Stat(absBase) +// if err != nil { +// log.Printf("[FTP] ERREUR : Le dossier upload n'existe pas (%s) : %v", absBase, err) +// return nil, errors.New("le dossier upload est absent") +// } +// if !info.IsDir() { +// log.Printf("[FTP] ERREUR : Le chemin upload (%s) n'est pas un dossier", absBase) +// return nil, errors.New("upload n'est pas un dossier") +// } +// log.Printf("[FTP] OK dossier upload : %s (mode %v, owner UID=%d)", absBase, info.Mode(), info.Sys()) +// fs := afero.NewBasePathFs(afero.NewOsFs(), absBase) +// return &ftpClientDriver{fs: fs}, nil +// } +// return nil, errors.New("invalid login")} +func (d *ftpMainDriver) AuthUser(cc ftpserverlib.ClientContext, user, pass string) (ftpserverlib.ClientDriver, error) { + log.Printf("[FTP] Tentative login user='%s' pass='%s'", user, pass) + base := filepath.Clean("upload") + absBase, err := filepath.Abs(base) + if err != nil { + log.Printf("[FTP] Erreur chemin upload: %v", err) + return nil, errors.New("erreur chemin upload") } - return nil, errors.New("invalid login")} + info, err := os.Stat(absBase) + if err != nil || !info.IsDir() { + log.Printf("[FTP] Dossier absent ou non dir: %v", err) + return nil, errors.New("le dossier upload est absent ou non accessible") + } + files, _ := os.ReadDir(absBase) + for _, f := range files { + log.Printf("[FTP] Fichier trouvé: %s (dir=%v)", f.Name(), f.IsDir()) + } + fs := afero.NewBasePathFs(afero.NewOsFs(), absBase) + return &ftpClientDriver{fs: fs}, nil +} func (c *ftpClientDriver) Name() string { return "aferofs" } func (c *ftpClientDriver) Create(name string) (afero.File, error) { return c.fs.Create(name) }