Blame


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