package client import ( "context" "github.com/shurcooL/graphql" "edge-infra.dev/pkg/edge/api/graph/model" ) // loginMutationPayload consists of fields that we would like to exist in the session. type loginMutationPayload struct { FullName string `json:"fullName"` Token string `json:"token"` Roles []string `json:"roles"` CredentialsExpired bool `json:"credentialsExpired"` SessionTime float64 `json:"sessionTime"` Organization string `json:"organization"` } // Login makes an API request to login the user and set a user session. func (c *EdgeClient) Login(ctx context.Context, req *LoginRequest) (string, error) { var loginMutation struct { Login loginMutationPayload `json:"login" graphql:"login(username: $username, password: $password, organization: $organization)"` } if err := c.Mutate(ctx, &loginMutation, map[string]any{ "username": graphql.String(req.Username), "password": graphql.String(req.Password), "organization": graphql.String(req.Organization), }); err != nil { return "", err } return loginMutation.Login.Token, nil } // SessionRefresh makes an API request to refresh the user session. func (c *EdgeClient) SessionRefresh(ctx context.Context, provider model.AuthProvider) (string, error) { var sessionRefreshMutation struct { Token string `graphql:"sessionRefresh(provider: $provider)"` } if err := c.Client.Mutate(ctx, &sessionRefreshMutation, map[string]any{ "provider": provider, }); err != nil { return "", err } return sessionRefreshMutation.Token, nil }