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