Skip to content

Instantly share code, notes, and snippets.

@StevenACoffman
Forked from salrashid123/main.go
Created May 19, 2021 00:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save StevenACoffman/52d3ffa702e7e84c57b4c1f143e17aa8 to your computer and use it in GitHub Desktop.
Save StevenACoffman/52d3ffa702e7e84c57b4c1f143e17aa8 to your computer and use it in GitHub Desktop.
Sample golang app that uses the Google CLoud Admin SDk to create a user and then add that user to a specific google group
package main
import (
"flag"
"fmt"
"io/ioutil"
"log"
"os"
"golang.org/x/net/context"
"golang.org/x/oauth2/google"
admin "google.golang.org/api/admin/directory/v1"
)
/*
Sample golang app that uses the Google CLoud Admin SDk to create a user and then add that user to a specific google group
go run main.go --serviceAccountFile ../svc_account_with_dwd.json --cx C023zw3x8 --adminUser admin@esodemoapp2.com --firstname foo --lastname bar --email foobar@esodemoapp2.com --password dsfasdflbbbb --group group8_10@esodemoapp2.com
*/
var (
serviceAccountFile = flag.String("serviceAccountFile", "", "serviceAccountFile ID")
cx = flag.String("cx", "", "GSuites cx number")
adminUser = flag.String("adminUser", "", "GSuites adminUser")
firstName = flag.String("firstname", "", "user's firstname")
lastName = flag.String("lastname", "", "users lastname")
email = flag.String("email", "", "users email")
password = flag.String("password", "", "users password")
group = flag.String("group", "", "add user to group")
)
func main() {
flag.Parse()
if *serviceAccountFile == "" {
fmt.Fprintln(os.Stderr, "missing -serviceAccountFile flag")
flag.Usage()
os.Exit(2)
}
if *cx == "" {
fmt.Fprintln(os.Stderr, "missing -cx flag")
flag.Usage()
os.Exit(2)
}
if *adminUser == "" {
fmt.Fprintln(os.Stderr, "missing -adminUser flag")
flag.Usage()
os.Exit(2)
}
if *firstName == "" || *lastName == "" || *email == "" || *password == "" {
fmt.Fprintln(os.Stderr, "must specify firstname, lastname, email, password flag")
flag.Usage()
os.Exit(2)
}
serviceAccountJSON, err := ioutil.ReadFile(*serviceAccountFile)
if err != nil {
log.Fatal(err)
}
config, err := google.JWTConfigFromJSON(serviceAccountJSON,
admin.AdminDirectoryUserScope, admin.AdminDirectoryGroupScope,
)
//config.User = "adminapi@fabled-ray-104117.iam.gserviceaccount.com"
config.Subject = *adminUser
srv, err := admin.New(config.Client(context.Background()))
if err != nil {
log.Fatal(err)
}
insertResp, err := srv.Users.Insert(&admin.User{
Name: &admin.UserName{
GivenName: *firstName,
FamilyName: *lastName,
},
PrimaryEmail: *email,
Password: *password,
}).Do()
if err != nil {
log.Fatal(err)
}
fmt.Printf("inserUser %v", insertResp.CustomerId)
if *group != "" {
member := &admin.Member{
Email: *email,
}
insertResp, err := srv.Members.Insert(
*group, member,
).Do()
if err != nil {
log.Fatal(err)
}
fmt.Printf("add user to group ResponseCode %v", insertResp.Status)
}
usersReport, err := srv.Users.List().Customer(*cx).MaxResults(10).OrderBy("email").Do()
if err != nil {
log.Fatal(err)
}
if len(usersReport.Users) == 0 {
fmt.Print("No users found.\n")
} else {
fmt.Print("Users:\n")
for _, u := range usersReport.Users {
fmt.Printf("%s (%s)\n", u.PrimaryEmail, u.Name.FullName)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment