diff --git a/drivers/mega/driver.go b/drivers/mega/driver.go index 9fa1d0ee..162aeef3 100644 --- a/drivers/mega/driver.go +++ b/drivers/mega/driver.go @@ -8,6 +8,7 @@ import ( "time" "github.com/alist-org/alist/v3/pkg/http_range" + "github.com/pquerna/otp/totp" "github.com/rclone/rclone/lib/readers" "github.com/alist-org/alist/v3/internal/driver" @@ -33,8 +34,16 @@ func (d *Mega) GetAddition() driver.Additional { } func (d *Mega) Init(ctx context.Context) error { + var twoFACode = d.TwoFACode d.c = mega.New() - return d.c.Login(d.Email, d.Password) + if d.TwoFASecret != "" { + code, err := totp.GenerateCode(d.TwoFASecret, time.Now()) + if err != nil { + return fmt.Errorf("generate totp code failed: %w", err) + } + twoFACode = code + } + return d.c.MultiFactorLogin(d.Email, d.Password, twoFACode) } func (d *Mega) Drop(ctx context.Context) error { diff --git a/drivers/mega/meta.go b/drivers/mega/meta.go index 77e768f0..d0758637 100644 --- a/drivers/mega/meta.go +++ b/drivers/mega/meta.go @@ -9,8 +9,10 @@ type Addition struct { // Usually one of two //driver.RootPath //driver.RootID - Email string `json:"email" required:"true"` - Password string `json:"password" required:"true"` + Email string `json:"email" required:"true"` + Password string `json:"password" required:"true"` + TwoFACode string `json:"two_fa_code" required:"false" help:"2FA 6-digit code, filling in the 2FA code alone will not support reloading driver"` + TwoFASecret string `json:"two_fa_secret" required:"false" help:"2FA secret"` } var config = driver.Config{