Blame


1 1081cf75 2024-11-04 o package lemmy
2 1081cf75 2024-11-04 o
3 1081cf75 2024-11-04 o import (
4 1081cf75 2024-11-04 o "encoding/json"
5 1081cf75 2024-11-04 o "fmt"
6 1081cf75 2024-11-04 o "net/http"
7 1081cf75 2024-11-04 o )
8 1081cf75 2024-11-04 o
9 1081cf75 2024-11-04 o func (c *Client) Login(name, password string) error {
10 1081cf75 2024-11-04 o if !c.ready {
11 1081cf75 2024-11-04 o if err := c.init(); err != nil {
12 1081cf75 2024-11-04 o return err
13 1081cf75 2024-11-04 o }
14 1081cf75 2024-11-04 o }
15 1081cf75 2024-11-04 o
16 1081cf75 2024-11-04 o params := map[string]interface{}{
17 1081cf75 2024-11-04 o "username_or_email": name,
18 1081cf75 2024-11-04 o "password": password,
19 1081cf75 2024-11-04 o }
20 1081cf75 2024-11-04 o resp, err := c.post("/user/login", params)
21 1081cf75 2024-11-04 o if err != nil {
22 1081cf75 2024-11-04 o return err
23 1081cf75 2024-11-04 o }
24 1081cf75 2024-11-04 o defer resp.Body.Close()
25 1081cf75 2024-11-04 o if resp.StatusCode != http.StatusOK {
26 1081cf75 2024-11-04 o return fmt.Errorf("remote status %s: %w", resp.Status, decodeError(resp.Body))
27 1081cf75 2024-11-04 o }
28 1081cf75 2024-11-04 o
29 1081cf75 2024-11-04 o var response struct {
30 1081cf75 2024-11-04 o JWT string
31 1081cf75 2024-11-04 o }
32 1081cf75 2024-11-04 o if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
33 1081cf75 2024-11-04 o return fmt.Errorf("decode login response: %w", err)
34 1081cf75 2024-11-04 o }
35 1081cf75 2024-11-04 o c.authToken = response.JWT
36 1081cf75 2024-11-04 o return nil
37 1081cf75 2024-11-04 o }
38 1081cf75 2024-11-04 o
39 1081cf75 2024-11-04 o func (c *Client) Authenticated() bool {
40 1081cf75 2024-11-04 o return c.authToken != ""
41 1081cf75 2024-11-04 o }