open-nomad/vendor/github.com/nicolai86/scaleway-sdk/user.go
Seth Hoenig 435c0d9fc8 deps: Switch to Go modules for dependency management
This PR switches the Nomad repository from using govendor to Go modules
for managing dependencies. Aspects of the Nomad workflow remain pretty
much the same. The usual Makefile targets should continue to work as
they always did. The API submodule simply defers to the parent Nomad
version on the repository, keeping the semantics of API versioning that
currently exists.
2020-06-02 14:30:36 -05:00

102 lines
2.4 KiB
Go

package api
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
// User represents a User
type User struct {
Email string `json:"email"`
Firstname string `json:"firstname"`
Fullname string `json:"fullname"`
ID string `json:"id"`
Lastname string `json:"lastname"`
Organizations []Organization `json:"organizations"`
Roles []Role `json:"roles"`
SSHPublicKeys []KeyDefinition `json:"ssh_public_keys"`
}
// KeyDefinition represents a key
type KeyDefinition struct {
Key string `json:"key"`
Fingerprint string `json:"fingerprint,omitempty"`
}
// UsersDefinition represents the response of a GET /user
type UsersDefinition struct {
User User `json:"user"`
}
// UserPatchSSHKeyDefinition represents a User Patch
type UserPatchSSHKeyDefinition struct {
SSHPublicKeys []KeyDefinition `json:"ssh_public_keys"`
}
// PatchUserSSHKey updates a user
func (s *API) PatchUserSSHKey(UserID string, definition UserPatchSSHKeyDefinition) (*User, error) {
resp, err := s.PatchResponse(AccountAPI, fmt.Sprintf("users/%s", UserID), definition)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
if err != nil {
return nil, err
}
var user UsersDefinition
if err = json.Unmarshal(body, &user); err != nil {
return nil, err
}
return &user.User, nil
}
// GetUserID returns the userID
func (s *API) GetUserID() (string, error) {
resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("tokens/%s", s.Token), url.Values{})
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
if err != nil {
return "", err
}
var token getTokenResponse
if err = json.Unmarshal(body, &token); err != nil {
return "", err
}
return token.Token.UserID, nil
}
// GetUser returns the user
func (s *API) GetUser() (*User, error) {
userID, err := s.GetUserID()
if err != nil {
return nil, err
}
resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("users/%s", userID), url.Values{})
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
if err != nil {
return nil, err
}
var user UsersDefinition
if err = json.Unmarshal(body, &user); err != nil {
return nil, err
}
return &user.User, nil
}