Skip to content

Commit 16cce37

Browse files
authored
fix(drivers): add session renewal cron for MediaFire driver (#9321)
- Implement automatic session token renewal every 6-9 minutes - Add validation for required SessionToken and Cookie fields in Init - Handle session expiration by calling renewToken on validation failure - Prevent storage failures due to MediaFire session timeouts Fixes session closure issues that occur after server restarts or extended periods. Co-authored-by: Da3zKi7 <da3zki7@duck.com>
1 parent 6e7c7d1 commit 16cce37

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

drivers/mediafire/driver.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ D@' 3z K!7 - The King Of Cracking
1111
import (
1212
"context"
1313
"fmt"
14+
"math/rand"
1415
"net/http"
1516
"os"
1617
"time"
@@ -19,12 +20,14 @@ import (
1920
"github.com/alist-org/alist/v3/internal/driver"
2021
"github.com/alist-org/alist/v3/internal/errs"
2122
"github.com/alist-org/alist/v3/internal/model"
23+
"github.com/alist-org/alist/v3/pkg/cron"
2224
"github.com/alist-org/alist/v3/pkg/utils"
2325
)
2426

2527
type Mediafire struct {
2628
model.Storage
2729
Addition
30+
cron *cron.Cron
2831

2932
actionToken string
3033

@@ -57,12 +60,15 @@ func (d *Mediafire) Init(ctx context.Context) error {
5760

5861
if _, err := d.getSessionToken(ctx); err != nil {
5962

60-
//fmt.Printf("Init :: Obtain Session Token \n\n")
63+
d.renewToken(ctx)
6164

62-
if err := d.renewToken(ctx); err != nil {
65+
num := rand.Intn(4) + 6
66+
67+
d.cron = cron.NewCron(time.Minute * time.Duration(num))
68+
d.cron.Do(func() {
69+
d.renewToken(ctx)
70+
})
6371

64-
//fmt.Printf("Init :: Renew Session Token \n\n")
65-
}
6672
}
6773

6874
return nil

drivers/mediafire/util.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ func (d *Mediafire) getSessionToken(ctx context.Context) (string, error) {
106106
}
107107

108108
d.SessionToken = tokenResp.Response.SessionToken
109+
110+
//fmt.Printf("Init :: Obtain Session Token %v", d.SessionToken)
111+
109112
op.MustSaveDriverStorage(d)
110113

111114
return d.SessionToken, nil
@@ -131,6 +134,9 @@ func (d *Mediafire) renewToken(_ context.Context) error {
131134
}
132135

133136
d.SessionToken = resp.Response.SessionToken
137+
138+
//fmt.Printf("Init :: Renew Session Token: %s", resp.Response.Result)
139+
134140
op.MustSaveDriverStorage(d)
135141

136142
return nil

0 commit comments

Comments
 (0)