feat: retry with credential-based login when the ARL is invalid
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user