feat: retry with credential-based login when the ARL is invalid

This commit is contained in:
Mathis Maquenne
2026-07-29 11:33:50 +02:00
parent 56b0f404d6
commit f45ae6aee6
2 changed files with 34 additions and 2 deletions
+33 -1
View File
@@ -9,6 +9,7 @@ import (
"net/http" "net/http"
"strings" "strings"
"github.com/mathismqn/godeez/internal/auth"
"github.com/mathismqn/godeez/internal/config" "github.com/mathismqn/godeez/internal/config"
) )
@@ -18,7 +19,7 @@ type Client struct {
} }
func NewClient(ctx context.Context, appConfig *config.Config) (*Client, error) { func NewClient(ctx context.Context, appConfig *config.Config) (*Client, error) {
session, err := Authenticate(ctx, appConfig.ArlCookie) session, err := resolveSession(ctx, appConfig)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to authenticate: %w", err) return nil, fmt.Errorf("failed to authenticate: %w", err)
} }
@@ -29,6 +30,37 @@ func NewClient(ctx context.Context, appConfig *config.Config) (*Client, error) {
}, nil }, nil
} }
func resolveSession(ctx context.Context, appConfig *config.Config) (*Session, error) {
if appConfig.ArlCookie != "" {
return Authenticate(ctx, appConfig.ArlCookie)
}
var session *Session
validate := func(ctx context.Context, arl string) error {
s, err := Authenticate(ctx, arl)
if err != nil {
return err
}
session = s
return nil
}
arl, err := auth.Resolve(ctx, validate)
if err != nil {
return nil, err
}
if session == nil {
session, err = Authenticate(ctx, arl)
if err != nil {
return nil, err
}
}
return session, nil
}
func (c *Client) FetchResource(ctx context.Context, resource Resource, id string) error { func (c *Client) FetchResource(ctx context.Context, resource Resource, id string) error {
payload := map[string]interface{}{ payload := map[string]interface{}{
"nb": 10000, "nb": 10000,
+1 -1
View File
@@ -71,7 +71,7 @@ func Authenticate(ctx context.Context, arlCookie string) (*Session, error) {
} }
if res.Results.User.ID == 0 { if res.Results.User.ID == 0 {
return nil, fmt.Errorf("invalid arl cookie") return nil, fmt.Errorf("invalid or expired arl cookie")
} }
opts := res.Results.User.Options opts := res.Results.User.Options