Skip to content

Commit e29d92f

Browse files
authored
fix(mediafire): enable automatic session token acquisition and fix gzip parsing (#1661)
* fix(mediafire): enable automatic session token acquisition and fix gzip parsing - Fix Init() method to allow automatic session token retrieval from cookie - Change SessionToken from required to optional in configuration - Add proper gzip decompression support for API responses - Improve error handling for session token acquisition failures - Update help text to clarify authentication requirements Resolves initialization failure and JSON parsing errors when session token can be automatically obtained from browser cookie. * fix(mediafire): ensure driver files end with newline * chore: gofmt drivers/mediafire/*.go
1 parent c5f57bb commit e29d92f

File tree

4 files changed

+30
-9
lines changed

4 files changed

+30
-9
lines changed

drivers/mediafire/driver.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,24 @@ func (d *Mediafire) GetAddition() driver.Additional {
6060

6161
// Init initializes the MediaFire driver with session token and cookie validation
6262
func (d *Mediafire) Init(ctx context.Context) error {
63-
if d.SessionToken == "" {
64-
return fmt.Errorf("Init :: [MediaFire] {critical} missing sessionToken")
65-
}
66-
6763
if d.Cookie == "" {
6864
return fmt.Errorf("Init :: [MediaFire] {critical} missing Cookie")
6965
}
66+
67+
// If SessionToken is empty, try to get it from cookie
68+
if d.SessionToken == "" {
69+
if _, err := d.getSessionToken(ctx); err != nil {
70+
return fmt.Errorf("Init :: [MediaFire] {critical} failed to get session token from cookie: %w", err)
71+
}
72+
}
73+
7074
// Setup rate limiter if rate limit is configured
7175
if d.LimitRate > 0 {
7276
d.limiter = rate.NewLimiter(rate.Limit(d.LimitRate), 1)
7377
}
78+
7479
// Validate and refresh session token if needed
7580
if _, err := d.getSessionToken(ctx); err != nil {
76-
7781
d.renewToken(ctx)
7882

7983
// Avoids 10 mins token expiry (6- 9)
@@ -429,3 +433,4 @@ func (d *Mediafire) GetDetails(ctx context.Context) (*model.StorageDetails, erro
429433
}
430434

431435
var _ driver.Driver = (*Mediafire)(nil)
436+

drivers/mediafire/meta.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ type Addition struct {
2323
driver.RootPath
2424
//driver.RootID
2525

26-
SessionToken string `json:"session_token" required:"true" type:"string" help:"Required for MediaFire API"`
27-
Cookie string `json:"cookie" required:"true" type:"string" help:"Required for navigation"`
26+
SessionToken string `json:"session_token" required:"false" type:"string" help:"Optional for MediaFire API, can be auto-acquired from cookie"`
27+
Cookie string `json:"cookie" required:"true" type:"string" help:"Required for MediaFire API authentication"`
2828

2929
OrderBy string `json:"order_by" type:"select" options:"name,time,size" default:"name"`
3030
OrderDirection string `json:"order_direction" type:"select" options:"asc,desc" default:"asc"`
@@ -59,3 +59,4 @@ func init() {
5959
}
6060
})
6161
}
62+

drivers/mediafire/types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,3 +244,4 @@ type MediafireUserInfoResponse struct {
244244
CurrentAPIVersion string `json:"current_api_version"`
245245
} `json:"response"`
246246
}
247+

drivers/mediafire/util.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Final opts by @Suyunjing @j2rong4cn @KirCute @Da3zKi7
1515
*/
1616

1717
import (
18+
"compress/gzip"
1819
"context"
1920
"encoding/json"
2021
"fmt"
@@ -60,7 +61,7 @@ func (d *Mediafire) getSessionToken(ctx context.Context) (string, error) {
6061
}
6162

6263
req.Header.Set("Accept", "*/*")
63-
req.Header.Set("Accept-Encoding", "gzip, deflate, br, zstd")
64+
req.Header.Set("Accept-Encoding", "gzip")
6465
req.Header.Set("Accept-Language", "en-US,en;q=0.9")
6566
req.Header.Set("Content-Length", "0")
6667
req.Header.Set("Cookie", d.Cookie)
@@ -83,7 +84,19 @@ func (d *Mediafire) getSessionToken(ctx context.Context) (string, error) {
8384
}
8485
defer resp.Body.Close()
8586

86-
body, err := io.ReadAll(resp.Body)
87+
var body []byte
88+
// Handle gzip decompression if needed
89+
if resp.Header.Get("Content-Encoding") == "gzip" {
90+
gzipReader, err := gzip.NewReader(resp.Body)
91+
if err != nil {
92+
return "", fmt.Errorf("failed to create gzip reader: %w", err)
93+
}
94+
defer gzipReader.Close()
95+
body, _ = io.ReadAll(gzipReader)
96+
} else {
97+
body, err = io.ReadAll(resp.Body)
98+
}
99+
87100
if err != nil {
88101
return "", err
89102
}
@@ -719,3 +732,4 @@ func (d *Mediafire) getFileByHash(ctx context.Context, hash string) (*model.ObjT
719732
file := resp.Response.FileInfo[0]
720733
return d.fileToObj(file), nil
721734
}
735+

0 commit comments

Comments
 (0)