github.com/grokify/go-ringcentral-client@v0.3.31/engagedigital/v1/examples/user_create_update_invite/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"log"
     7  
     8  	"github.com/antihax/optional"
     9  	"github.com/grokify/mogo/errors/errorsutil"
    10  	"github.com/grokify/mogo/fmt/fmtutil"
    11  	"github.com/grokify/mogo/net/smtputil"
    12  	"github.com/jessevdk/go-flags"
    13  
    14  	engagedigital "github.com/grokify/go-ringcentral-client/engagedigital/v1/client"
    15  	utils "github.com/grokify/go-ringcentral-client/engagedigital/v1/util"
    16  )
    17  
    18  type options struct {
    19  	Site   string `short:"s" long:"site" description:"A site" required:"true"`
    20  	Token  string `short:"t" long:"token" description:"A token" required:"true"`
    21  	Action string `short:"a" long:"action" description:"A action (create|update|invite)" required:"true"`
    22  }
    23  
    24  func GetRole(client *engagedigital.APIClient, roleName string) (engagedigital.Role, error) {
    25  	info, resp, err := client.RolesApi.GetAllRoles(context.Background(), nil)
    26  	if err != nil {
    27  		err = errorsutil.Wrap(err, "E_GET_ALL_ROLES")
    28  		return engagedigital.Role{}, err
    29  	} else if resp.StatusCode != 200 {
    30  		return engagedigital.Role{}, fmt.Errorf("E_STATUS_CODE [%v]", resp.StatusCode)
    31  	}
    32  	for _, role := range info.Records {
    33  		if role.Label == roleName {
    34  			return role, nil
    35  		}
    36  	}
    37  	return engagedigital.Role{}, fmt.Errorf("E_ROLE_NOT_FOUND [%v]", roleName)
    38  }
    39  
    40  func main() {
    41  	opts := options{}
    42  	_, err := flags.Parse(&opts)
    43  	if err != nil {
    44  		log.Fatal(err)
    45  	}
    46  
    47  	client := utils.NewApiClient(opts.Site, opts.Token)
    48  
    49  	roleName := "Agent"
    50  	userEmail, err := smtputil.GmailAddressPlusTime("bb8.ringforce")
    51  	if err != nil {
    52  		log.Fatal(err)
    53  	}
    54  
    55  	switch opts.Action {
    56  	case "create":
    57  		//userEmail = "joe@example.com"
    58  		userFirstName := "Test"
    59  		userLastName := "User"
    60  
    61  		role, err := GetRole(client, roleName)
    62  		if err != nil {
    63  			log.Fatal(err)
    64  		}
    65  
    66  		info, resp, err := client.UsersApi.CreateUser(
    67  			context.Background(),
    68  			userEmail,
    69  			userFirstName,
    70  			userLastName,
    71  			"MyPasswordU*OQ@#4uo",
    72  			role.Id, nil)
    73  		if err != nil {
    74  			log.Fatal(err)
    75  		} else if resp.StatusCode != 200 {
    76  			log.Fatal(resp.StatusCode)
    77  		}
    78  		fmtutil.PrintJSON(info)
    79  	case "update":
    80  		users, resp, err := client.UsersApi.GetAllUsers(context.Background(), nil)
    81  		if err != nil {
    82  			log.Fatal(err)
    83  		} else if resp.StatusCode != 200 {
    84  			log.Fatal(resp.StatusCode)
    85  		}
    86  
    87  		user := users.Records[0]
    88  
    89  		apiOpts := &engagedigital.UpdateUserOpts{}
    90  		if user.Locale == "en" {
    91  			apiOpts.Locale = optional.NewString("fr")
    92  		} else {
    93  			apiOpts.Locale = optional.NewString("en")
    94  		}
    95  
    96  		info, resp, err := client.UsersApi.UpdateUser(
    97  			context.Background(), user.Id, apiOpts)
    98  		if err != nil {
    99  			log.Fatal(err)
   100  		} else if resp.StatusCode != 200 {
   101  			log.Fatal(resp.StatusCode)
   102  		}
   103  		fmtutil.PrintJSON(info)
   104  	case "invite":
   105  		userEmail = "joe@example.com"
   106  		userFirstName := "Test"
   107  		userLastName := "User"
   108  
   109  		role, err := GetRole(client, roleName)
   110  		if err != nil {
   111  			log.Fatal(err)
   112  		}
   113  
   114  		info, resp, err := client.UsersApi.InviteUser(
   115  			context.Background(),
   116  			userEmail,
   117  			userFirstName,
   118  			userLastName,
   119  			role.Id, nil)
   120  		if err != nil {
   121  			log.Fatal(err)
   122  		} else if resp.StatusCode != 200 {
   123  			log.Fatal(resp.StatusCode)
   124  		}
   125  		fmtutil.PrintJSON(info)
   126  	}
   127  
   128  	fmt.Println("DONE")
   129  }