| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- package api
- import (
- "context"
- "encoding/json"
- "fmt"
- "net/http"
- "strings"
- "github.com/porter-dev/porter/internal/models"
- )
- // AuthCheckResponse is the user model response that is returned if the
- // user is logged in
- type AuthCheckResponse models.UserExternal
- // AuthCheck performs a check to ensure that the user is logged in
- func (c *Client) AuthCheck(ctx context.Context) (*AuthCheckResponse, error) {
- req, err := http.NewRequest(
- "GET",
- fmt.Sprintf("%s/auth/check", c.BaseURL),
- nil,
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := &AuthCheckResponse{}
- if httpErr, err := c.sendRequest(req, bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // LoginRequest is the email/password associated with a login request
- type LoginRequest struct {
- Email string `json:"email"`
- Password string `json:"password"`
- }
- // LoginResponse is the user model response that is returned after successfully
- // logging in
- type LoginResponse models.UserExternal
- // Login authorizes the user and grants them a cookie-based session
- func (c *Client) Login(ctx context.Context, loginRequest *LoginRequest) (*LoginResponse, error) {
- data, err := json.Marshal(loginRequest)
- if err != nil {
- return nil, err
- }
- req, err := http.NewRequest(
- "POST",
- fmt.Sprintf("%s/login", c.BaseURL),
- strings.NewReader(string(data)),
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := &LoginResponse{}
- if httpErr, err := c.sendRequest(req, bodyResp, false); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // Logout logs the user out and deauthorizes the cookie-based session
- func (c *Client) Logout(ctx context.Context) error {
- req, err := http.NewRequest(
- "POST",
- fmt.Sprintf("%s/logout", c.BaseURL),
- nil,
- )
- if err != nil {
- return err
- }
- req = req.WithContext(ctx)
- if httpErr, err := c.sendRequest(req, nil, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return err
- }
- return nil
- }
- // CreateUserRequest is the email/password associated with creating a user
- type CreateUserRequest struct {
- Email string `json:"email"`
- Password string `json:"password"`
- }
- // CreateUserResponse is the user model response that is returned after successfully
- // creating a user
- type CreateUserResponse models.UserExternal
- // CreateUser will create the user, authorize the user and grant them a cookie-based session
- func (c *Client) CreateUser(
- ctx context.Context,
- createUserRequest *CreateUserRequest,
- ) (*CreateUserResponse, error) {
- data, err := json.Marshal(createUserRequest)
- if err != nil {
- return nil, err
- }
- req, err := http.NewRequest(
- "POST",
- fmt.Sprintf("%s/users", c.BaseURL),
- strings.NewReader(string(data)),
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := &CreateUserResponse{}
- if httpErr, err := c.sendRequest(req, bodyResp, false); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // GetUserResponse is the user model response that is returned after successfully
- // getting a user
- type GetUserResponse models.UserExternal
- // GetUser retrieves a user given a user id
- func (c *Client) GetUser(ctx context.Context, userID uint) (*GetUserResponse, error) {
- req, err := http.NewRequest(
- "GET",
- fmt.Sprintf("%s/users/%d", c.BaseURL, userID),
- nil,
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := &GetUserResponse{}
- if httpErr, err := c.sendRequest(req, bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // ListUserProjectsResponse is the list of projects returned
- type ListUserProjectsResponse []*models.ProjectExternal
- // ListUserProjects returns a list of projects associated with a user
- func (c *Client) ListUserProjects(ctx context.Context, userID uint) (ListUserProjectsResponse, error) {
- req, err := http.NewRequest(
- "GET",
- fmt.Sprintf("%s/users/%d/projects", c.BaseURL, userID),
- nil,
- )
- if err != nil {
- return nil, err
- }
- req = req.WithContext(ctx)
- bodyResp := ListUserProjectsResponse{}
- if httpErr, err := c.sendRequest(req, &bodyResp, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return nil, fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return nil, err
- }
- return bodyResp, nil
- }
- // DeleteUserRequest is the password needed to verify a user should be deleted
- type DeleteUserRequest struct {
- Password string `json:"password"`
- }
- // DeleteUser deletes a user of a given user id
- func (c *Client) DeleteUser(
- ctx context.Context,
- userID uint,
- deleteUserRequest *DeleteUserRequest,
- ) error {
- data, err := json.Marshal(deleteUserRequest)
- if err != nil {
- return err
- }
- req, err := http.NewRequest(
- "DELETE",
- fmt.Sprintf("%s/users/%d", c.BaseURL, userID),
- strings.NewReader(string(data)),
- )
- if err != nil {
- return err
- }
- req = req.WithContext(ctx)
- if httpErr, err := c.sendRequest(req, nil, true); httpErr != nil || err != nil {
- if httpErr != nil {
- return fmt.Errorf("code %d, errors %v", httpErr.Code, httpErr.Errors)
- }
- return err
- }
- return nil
- }
|