account_user.go raw

   1  package rest
   2  
   3  import (
   4  	"errors"
   5  	"fmt"
   6  	"net/http"
   7  
   8  	"gopkg.in/ns1/ns1-go.v2/rest/model/account"
   9  )
  10  
  11  // UsersService handles 'account/users' endpoint.
  12  type UsersService service
  13  
  14  // List returns all users in the account.
  15  //
  16  // NS1 API docs: https://ns1.com/api/#users-get
  17  func (s *UsersService) List() ([]*account.User, *http.Response, error) {
  18  	req, err := s.client.NewRequest("GET", "account/users", nil)
  19  	if err != nil {
  20  		return nil, nil, err
  21  	}
  22  
  23  	ul := []*account.User{}
  24  	resp, err := s.client.Do(req, &ul)
  25  	if err != nil {
  26  		return nil, resp, err
  27  	}
  28  
  29  	return ul, resp, nil
  30  }
  31  
  32  // Get returns details of a single user.
  33  //
  34  // NS1 API docs: https://ns1.com/api/#users-user-get
  35  func (s *UsersService) Get(username string) (*account.User, *http.Response, error) {
  36  	path := fmt.Sprintf("account/users/%s", username)
  37  
  38  	req, err := s.client.NewRequest("GET", path, nil)
  39  	if err != nil {
  40  		return nil, nil, err
  41  	}
  42  
  43  	var u account.User
  44  	resp, err := s.client.Do(req, &u)
  45  	if err != nil {
  46  		switch err.(type) {
  47  		case *Error:
  48  			if resourceMissingMatch(err.(*Error).Message) {
  49  				return nil, resp, ErrUserMissing
  50  			}
  51  		}
  52  		return nil, resp, err
  53  	}
  54  
  55  	return &u, resp, nil
  56  }
  57  
  58  // Create takes a *User and creates a new account user.
  59  //
  60  // NS1 API docs: https://ns1.com/api/#users-put
  61  func (s *UsersService) Create(u *account.User) (*http.Response, error) {
  62  	var (
  63  		req *http.Request
  64  		err error
  65  	)
  66  
  67  	req, err = s.client.NewRequest("PUT", "account/users", u)
  68  	if err != nil {
  69  		return nil, err
  70  	}
  71  
  72  	// Update user fields with data from api(ensure consistent)
  73  	resp, err := s.client.Do(req, &u)
  74  	if err != nil {
  75  		switch err.(type) {
  76  		case *Error:
  77  			if err.(*Error).Message == "request failed:Login Name is already in use." {
  78  				return resp, ErrUserExists
  79  			}
  80  		}
  81  		return resp, err
  82  	}
  83  
  84  	return resp, nil
  85  }
  86  
  87  // Update change contact details, notification settings, or access rights for a user.
  88  //
  89  // NS1 API docs: https://ns1.com/api/#users-user-post
  90  func (s *UsersService) Update(u *account.User) (*http.Response, error) {
  91  	path := fmt.Sprintf("account/users/%s", u.Username)
  92  
  93  	var (
  94  		req *http.Request
  95  		err error
  96  	)
  97  
  98  	req, err = s.client.NewRequest("POST", path, u)
  99  	if err != nil {
 100  		return nil, err
 101  	}
 102  
 103  	// Update user fields with data from api(ensure consistent)
 104  	resp, err := s.client.Do(req, &u)
 105  	if err != nil {
 106  		switch err.(type) {
 107  		case *Error:
 108  			if err.(*Error).Message == "Unknown user" {
 109  				return resp, ErrUserMissing
 110  			}
 111  		}
 112  		return resp, err
 113  	}
 114  
 115  	return resp, nil
 116  }
 117  
 118  // Delete deletes a user.
 119  //
 120  // NS1 API docs: https://ns1.com/api/#users-user-delete
 121  func (s *UsersService) Delete(username string) (*http.Response, error) {
 122  	path := fmt.Sprintf("account/users/%s", username)
 123  
 124  	req, err := s.client.NewRequest("DELETE", path, nil)
 125  	if err != nil {
 126  		return nil, err
 127  	}
 128  
 129  	resp, err := s.client.Do(req, nil)
 130  	if err != nil {
 131  		switch err.(type) {
 132  		case *Error:
 133  			if err.(*Error).Message == "Unknown user" {
 134  				return resp, ErrUserMissing
 135  			}
 136  		}
 137  		return resp, err
 138  	}
 139  
 140  	return resp, nil
 141  }
 142  
 143  var (
 144  	// ErrUserExists bundles PUT create error.
 145  	ErrUserExists = errors.New("user already exists")
 146  	// ErrUserMissing bundles GET/POST/DELETE error.
 147  	ErrUserMissing = errors.New("user does not exist")
 148  )
 149