diff --git a/main.go b/main.go index 29b4040..8e961ca 100644 --- a/main.go +++ b/main.go @@ -41,33 +41,30 @@ type Jelly struct { func NewJelly(ctx context.Context, u, p, apitoken, optAccessToken string) (Jelly, error) { jelly := Jelly{u: u, apitoken: apitoken, accesstoken: optAccessToken} - if optAccessToken == "" { - resp, err := jelly.post(ctx, "https://jellyfin.home.blapointe.com/Users/AuthenticateByName", map[string]string{ - "Username": u, - "Pw": p, - }, "Authorization", jelly._authHeader(jelly.apitoken)) - if err != nil { - return Jelly{}, err - } - - var AccessToken struct { - AccessToken string - } - if err := json.NewDecoder(resp.Body).Decode(&AccessToken); err != nil { - return Jelly{}, err - } - jelly.accesstoken = AccessToken.AccessToken + if optAccessToken != "" { + } else if accessToken, err := jelly.login(ctx, p); err != nil { + return Jelly{}, err + } else { + jelly.accesstoken = accessToken } return jelly, nil } -func (jelly Jelly) authHeader() string { - return jelly._authHeader(jelly.accesstoken) -} +func (jelly Jelly) login(ctx context.Context, p string) (string, error) { + resp, err := jelly.post(ctx, "https://jellyfin.home.blapointe.com/Users/AuthenticateByName", map[string]string{ + "Username": jelly.u, + "Pw": p, + }, "Authorization", jelly._authHeader(jelly.apitoken)) + if err != nil { + return "", err + } -func (jelly Jelly) _authHeader(token string) string { - return fmt.Sprintf("MediaBrowser Token=%q, Client=%q, Version=%q, DeviceId=%q, Device=%q", token, "client", "version", "deviceId"+jelly.u, "device") + var AccessToken struct { + AccessToken string + } + err = json.NewDecoder(resp.Body).Decode(&AccessToken) + return AccessToken.AccessToken, err } func (jelly Jelly) post(ctx context.Context, url string, body any, headers ...string) (*http.Response, error) { @@ -107,3 +104,11 @@ func (jelly Jelly) post(ctx context.Context, url string, body any, headers ...st return resp, nil } + +func (jelly Jelly) authHeader() string { + return jelly._authHeader(jelly.accesstoken) +} + +func (jelly Jelly) _authHeader(token string) string { + return fmt.Sprintf("MediaBrowser Token=%q, Client=%q, Version=%q, DeviceId=%q, Device=%q", token, "client", "version", "deviceId"+jelly.u, "device") +}