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, ¶ms) 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 }