This commit is contained in:
cangui 2025-07-27 21:44:19 +02:00
parent 5134f9aa28
commit d2d4f36443

38
main.go
View File

@ -50,20 +50,26 @@ func (d *mainDriver) ClientDisconnected(cc ftpserver.ClientContext) {
func (d *mainDriver) GetTLSConfig() (*tls.Config, error) { func (d *mainDriver) GetTLSConfig() (*tls.Config, error) {
return nil, nil // Pas de TLS, à gérer si tu veux FTPS 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) { import (
log.Printf("[FTP] Tentative login user='%s' pass='%s'", user, pass) "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!" { if user == "cangui2089" && pass == "GHT30k7!" {
uploadPath, _ := filepath.Abs("upload") base := filepath.Clean("upload")
fi, err := os.Stat(uploadPath) fs := afero.NewBasePathFs(afero.NewOsFs(), base)
if err != nil || !fi.IsDir() { log.Printf("[FTP] OK user %s", user)
log.Printf("[FTP] Le dossier upload/ est manquant ou non valide: %v", err) return &ftpClientDriver{fs: fs}, nil
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
} }
// 2. Autoriser anonymous depuis 192.168.1.123 uniquement
if user == "anonymous" && host == "82.65.73.115" { if user == "anonymous" && host == "82.65.73.115" {
base := filepath.Clean("upload") base := filepath.Clean("upload")
fs := afero.NewBasePathFs(afero.NewOsFs(), base) fs := afero.NewBasePathFs(afero.NewOsFs(), base)
@ -74,10 +80,14 @@ func (d *mainDriver) AuthUser(cc ftpserver.ClientContext, user, pass string) (ft
// 3. Sinon refuse tout anonyme ou mauvais login // 3. Sinon refuse tout anonyme ou mauvais login
if user == "" || user == "anonymous" { if user == "" || user == "anonymous" {
log.Printf("[FTP] Login anonymous refusé pour %s", host) log.Printf("[FTP] Login anonymous refusé pour %s", host)
return nil, errors.New("anonymous login not allowed")
return nil, errors.New("identifiants invalides")
} }
log.Printf("[FTP] Refus user=%s pass=%s", user, pass)
return nil, errors.New("invalid login")
}
// ---------- clientDriver = wrapper sur afero.Fs ---------- // ---------- clientDriver = wrapper sur afero.Fs ----------
func (c *clientDriver) Name() string { return "aferofs" } func (c *clientDriver) Name() string { return "aferofs" }