identity.go raw
1 package internal
2
3 import (
4 "context"
5 "net/http"
6 )
7
8 const loginURL = "https://admin.vshosting.cloud/api/public/auth/login"
9
10 type token string
11
12 const accessTokenKey token = "accessToken"
13
14 func (c *Client) login(ctx context.Context) (*AuthResponse, error) {
15 authorization := Authorization{Email: c.email, Password: c.password}
16
17 req, err := newJSONRequest(ctx, http.MethodPost, c.loginURL, authorization)
18 if err != nil {
19 return nil, err
20 }
21
22 var result AuthResponse
23
24 err = c.do(req, &result)
25 if err != nil {
26 return nil, err
27 }
28
29 return &result, nil
30 }
31
32 func (c *Client) CreateAuthenticatedContext(ctx context.Context) (context.Context, error) {
33 tok, err := c.login(ctx)
34 if err != nil {
35 return nil, err
36 }
37
38 return context.WithValue(ctx, accessTokenKey, tok.Auth.AccessToken), nil
39 }
40
41 func getAccessToken(ctx context.Context) string {
42 tok, ok := ctx.Value(accessTokenKey).(string)
43 if !ok {
44 return ""
45 }
46
47 return tok
48 }
49