github.com/grokify/go-ringcentral-client@v0.3.31/office/v1/examples/scim_user_create-update-delete/scim_user_create-update-delete.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"log"
     7  	"os"
     8  
     9  	"github.com/grokify/mogo/fmt/fmtutil"
    10  	"github.com/joho/godotenv"
    11  
    12  	rc "github.com/grokify/go-ringcentral-client/office/v1/client"
    13  	rcu "github.com/grokify/go-ringcentral-client/office/v1/util"
    14  )
    15  
    16  const (
    17  	envPrefix = "RINGCENTRAL_"
    18  )
    19  
    20  func loadEnv() error {
    21  	envPaths := []string{}
    22  	if len(os.Getenv("ENV_PATH")) > 0 {
    23  		envPaths = append(envPaths, os.Getenv("ENV_PATH"))
    24  	}
    25  	return godotenv.Load(envPaths...)
    26  }
    27  
    28  type ScimApiUtil struct {
    29  	ApiClient *rc.APIClient
    30  	Context   context.Context
    31  }
    32  
    33  func (su *ScimApiUtil) GetSCIMUserById(userId string) (rc.UserInfo, error) {
    34  	uinfo, resp, err := su.ApiClient.SCIMApi.GetUserById(su.Context, userId)
    35  	if err != nil {
    36  		return uinfo, err
    37  	} else if resp.StatusCode >= 300 {
    38  		return uinfo, fmt.Errorf("API Status %v", resp.StatusCode)
    39  	}
    40  	return uinfo, nil
    41  }
    42  
    43  func (su *ScimApiUtil) ListScimUsers(params rc.ListUsersOpts) (rc.GetUserListResponse, error) {
    44  	info, resp, err := su.ApiClient.SCIMApi.ListUsers(su.Context, &params)
    45  	if err != nil {
    46  		return info, err
    47  	} else if resp.StatusCode >= 300 {
    48  		return info, fmt.Errorf("API Status %v", resp.StatusCode)
    49  	}
    50  	return info, nil
    51  }
    52  
    53  func (su *ScimApiUtil) LoadExtensionInfo(accountId, extensionId string) (rc.GetExtensionInfoResponse, error) {
    54  	info, resp, err := su.ApiClient.UserSettingsApi.LoadExtensionInfo(su.Context, accountId, extensionId)
    55  	if err != nil {
    56  		return info, err
    57  	} else if resp.StatusCode >= 300 {
    58  		return info, fmt.Errorf("API Status %v", resp.StatusCode)
    59  	}
    60  	return info, nil
    61  }
    62  
    63  func main() {
    64  	err := loadEnv()
    65  	if err != nil {
    66  		panic(err)
    67  	}
    68  	apiClient, err := rcu.NewApiClientPasswordEnv(envPrefix)
    69  	if err != nil {
    70  		panic(err)
    71  	}
    72  
    73  	scimUtil := ScimApiUtil{
    74  		ApiClient: apiClient,
    75  		Context:   context.Background(),
    76  	}
    77  
    78  	userId := "1"
    79  
    80  	if 1 == 1 {
    81  		extInfo, err := scimUtil.GetSCIMUserById(userId)
    82  		if err != nil {
    83  			log.Fatal(err)
    84  		}
    85  		fmtutil.PrintJSON(extInfo)
    86  	}
    87  
    88  	if 1 == 0 {
    89  		extInfo, err := scimUtil.LoadExtensionInfo("~", userId)
    90  		if err != nil {
    91  			log.Fatal(err)
    92  		}
    93  		fmtutil.PrintJSON(extInfo)
    94  	}
    95  
    96  	params := rc.UserUpdateRequest{
    97  		Schemas:  []string{"urn:ietf:params:scim:schemas:core:2.0:User"},
    98  		UserName: "JonSnow",
    99  		Emails: []rc.EmailInfo{
   100  			{
   101  				Value: "jon.snow@winterfell.gov",
   102  			},
   103  		},
   104  		Active: true,
   105  		Addresses: []rc.AddressInfo{
   106  			{
   107  				Locality: "Winterfell",
   108  				Region:   "The North",
   109  				Country:  "Seven Kingdoms",
   110  			},
   111  		},
   112  	}
   113  
   114  	if 1 == 0 {
   115  		info, res, err := apiClient.SCIMApi.UpdateUser(scimUtil.Context, userId, params)
   116  		if err != nil {
   117  			panic(err)
   118  		} else if res.StatusCode >= 300 {
   119  			panic(fmt.Sprintf("API Response %v", res.StatusCode))
   120  		}
   121  		fmtutil.PrintJSON(info)
   122  	}
   123  	if 1 == 0 {
   124  		// Retrieve a list of users
   125  		info, err := scimUtil.ListScimUsers(rc.ListUsersOpts{})
   126  		if err != nil {
   127  			panic(err)
   128  		}
   129  		fmtutil.PrintJSON(info)
   130  
   131  		for _, user := range info.Resources {
   132  			fmt.Println(user.Id)
   133  
   134  			uinfo, err := scimUtil.GetSCIMUserById(user.Id)
   135  			if err != nil {
   136  				panic(err)
   137  			}
   138  			fmtutil.PrintJSON(uinfo)
   139  		}
   140  	}
   141  	fmt.Println("DONE")
   142  }