API каталога Google добавляет пользовательскую схему/обновляет ее для пользователей через API Google (на ходу)

Я пытаюсь загрузить CustomSchema для всех пользователей компании в GSuite. Эта пользовательская схема содержит их имена пользователей Github, которые я извлек с помощью API github.

Проблема в том, что после запуска кода аккаунт в Gsuite не добавляется.

Соответствующий код (подключение к GSuite с аутентификацией администратора установлено, на карте есть все пользовательские записи. Если вам все еще нужен код, я могу предоставить его вам — просто постарайтесь не усложнять):

for _, u := range allUsers.Users {

    if u.CustomSchemas != nil {
        log.Printf("%v", string(u.CustomSchemas["User_Names"]))
    }else{
        u.CustomSchemas = map[string]googleapi.RawMessage{}
    }
    nameFromGsuite := u.Name.FullName
    if githubLogin, ok := gitHubAccs[nameFromGsuite]; ok {          

            userSchemaForGithub := GithubAcc{GitHub: githubLogin}
            jsonRaw, err := json.Marshal(userSchemaForGithub)
            if err != nil {
                log.Fatalf("Something went wrong logging: %v", err)
            }

            u.CustomSchemas["User_Names"] = jsonRaw
            adminService.Users.Update(u.Id, u)

    } else {
        log.Printf("User not found for %v\n", nameFromGsuite)
    }
}

Это структура для кодировки json:

 type GithubAcc struct {
    GitHub string `json:"GitHub"`
}

person InDaPond    schedule 27.07.2018    source источник


Ответы (1)


Для всех, кто наткнулся на это.
Все в фрагменте кода правильно. Судя по тому, как написан метод, я ожидал, что adminService.Users.Update() на самом деле обновляет пользователя. Вместо этого он возвращает UserUpdatesCall.
Вам нужно выполнить это обновление, вызвав .Do()
Из API:

Do выполняет вызов «directory.users.update».

Таким образом, решение состоит в том, чтобы заменить adminService.Users.Update(u.Id, u)
на adminService.Users.Update(u.Id, u).Do().

person InDaPond    schedule 31.07.2018