github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/usermanagement/usermanagementv2/user_invite.go (about)

     1  package usermanagementv2
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"github.com/IBM-Cloud/bluemix-go/client"
     8  	"github.com/IBM-Cloud/bluemix-go/rest"
     9  )
    10  
    11  const (
    12  	_UsersIDPath      = "/v2/accounts/%s/users/%s"
    13  	_UsersURL         = "/v2/accounts/%s/users"
    14  	_UserSettingsPath = "/v2/accounts/%s/users/%s/settings"
    15  )
    16  
    17  // Users ...
    18  type Users interface {
    19  	//GetUsers returns users in the first page alone
    20  	GetUsers(ibmUniqueID string) (UsersList, error)
    21  	//ListUsers returns all the users in the account
    22  	ListUsers(ibmUniqueID string) ([]UserInfo, error)
    23  	GetUserProfile(ibmUniqueID string, userID string) (UserInfo, error)
    24  	InviteUsers(ibmUniqueID string, users UserInvite) (UserInvite, error)
    25  	UpdateUserProfile(ibmUniqueID string, userID string, user UserInfo) error
    26  	RemoveUsers(ibmUniqueID string, userID string) error
    27  	GetUserSettings(accountID string, iamID string) (UserSettingOptions, error)
    28  	//Same patch request is being used to create, update and delete
    29  	ManageUserSettings(accountID string, iamID string, userSettings UserSettingOptions) (UserSettingOptions, error)
    30  }
    31  
    32  type inviteUsersHandler struct {
    33  	client *client.Client
    34  }
    35  
    36  // NewUsers
    37  func NewUserInviteHandler(c *client.Client) Users {
    38  	return &inviteUsersHandler{
    39  		client: c,
    40  	}
    41  }
    42  
    43  //GetUsers returns users in the first page alone
    44  func (r *inviteUsersHandler) GetUsers(ibmUniqueID string) (UsersList, error) {
    45  	result := UsersList{}
    46  	URL := fmt.Sprintf(_UsersURL, ibmUniqueID)
    47  	resp, err := r.client.Get(URL, &result)
    48  
    49  	if resp.StatusCode == http.StatusNotFound {
    50  		return UsersList{}, nil
    51  	}
    52  
    53  	if err != nil {
    54  		return result, err
    55  	}
    56  
    57  	return result, nil
    58  }
    59  
    60  //ListUsers returns all the users in the account
    61  func (r *inviteUsersHandler) ListUsers(ibmUniqueID string) ([]UserInfo, error) {
    62  	URL := fmt.Sprintf(_UsersURL, ibmUniqueID)
    63  
    64  	var users []UserInfo
    65  	_, err := r.client.GetPaginated(URL,
    66  		NewRCPaginatedResources(UserInfo{}),
    67  		func(resource interface{}) bool {
    68  			if user, ok := resource.(UserInfo); ok {
    69  				users = append(users, user)
    70  				return true
    71  			}
    72  			return false
    73  		},
    74  	)
    75  	if err != nil {
    76  		return users, err
    77  	}
    78  	return users, nil
    79  }
    80  
    81  func (r *inviteUsersHandler) GetUserProfile(ibmUniqueID string, userID string) (UserInfo, error) {
    82  	user := UserInfo{}
    83  	URL := fmt.Sprintf(_UsersIDPath, ibmUniqueID, userID)
    84  	_, err := r.client.Get(URL, &user)
    85  	if err != nil {
    86  		return UserInfo{}, err
    87  	}
    88  
    89  	return user, nil
    90  }
    91  
    92  func (r *inviteUsersHandler) InviteUsers(ibmUniqueID string, users UserInvite) (UserInvite, error) {
    93  	usersInvited := UserInvite{}
    94  	URL := fmt.Sprintf(_UsersURL, ibmUniqueID)
    95  	_, err := r.client.Post(URL, &users, &usersInvited)
    96  	if err != nil {
    97  		return UserInvite{}, err
    98  	}
    99  
   100  	return usersInvited, nil
   101  }
   102  
   103  func (r *inviteUsersHandler) UpdateUserProfile(ibmUniqueID string, userID string, user UserInfo) error {
   104  	URL := fmt.Sprintf(_UsersIDPath, ibmUniqueID, userID)
   105  	request := rest.PutRequest(*r.client.Config.Endpoint + URL)
   106  	request = request.Body(&user)
   107  
   108  	_, err := r.client.SendRequest(request, nil)
   109  	if err != nil {
   110  		return err
   111  	}
   112  
   113  	return nil
   114  }
   115  
   116  func (r *inviteUsersHandler) RemoveUsers(ibmUniqueID string, userID string) error {
   117  	URL := fmt.Sprintf(_UsersIDPath, ibmUniqueID, userID)
   118  	_, err := r.client.Delete(URL)
   119  	return err
   120  }
   121  
   122  func (r *inviteUsersHandler) GetUserSettings(accountID string, iamID string) (UserSettingOptions, error) {
   123  	settings := UserSettingOptions{}
   124  	URL := fmt.Sprintf(_UserSettingsPath, accountID, iamID)
   125  	_, err := r.client.Get(URL, &settings)
   126  	if err != nil {
   127  		return UserSettingOptions{}, err
   128  	}
   129  
   130  	return settings, nil
   131  }
   132  
   133  func (r *inviteUsersHandler) ManageUserSettings(accountID string, iamID string, userSettings UserSettingOptions) (UserSettingOptions, error) {
   134  	resp := UserSettingOptions{}
   135  	URL := fmt.Sprintf(_UserSettingsPath, accountID, iamID)
   136  	_, err := r.client.Patch(URL, &userSettings, &resp)
   137  
   138  	if err != nil {
   139  		return resp, err
   140  	}
   141  
   142  	return resp, nil
   143  }