Реализация Google Directory API users watch с Python

У меня возникли некоторые проблемы с пониманием и реализацией функции просмотра пользователей Google Directory API и системы push-уведомлений ( https://developers.google.com/admin-sdk/reports/v1/guides/push#creating-notification-channels ) в моем приложении Python GAE. Я пытаюсь добиться того, чтобы любой пользователь (администратор), который использует мое приложение, мог наблюдать за изменениями пользователей в своем собственном домене.

Я проверил домен, который хочу использовать для уведомлений, и реализовал запрос часов следующим образом:

directoryauthdecorator = OAuth2Decorator(
approval_prompt='force',
client_id='my_client_id',
client_secret='my_client_secret',
callback_path='/oauth2callback',
scope=['https://www.googleapis.com/auth/admin.directory.user'])

class PushNotifications(webapp.RequestHandler):
      @directoryauthdecorator.oauth_required
      def get(self):
          auth_http = directoryauthdecorator.http()
          service = build("admin", "directory_v1", http=auth_http)

          uu_id=str(uuid.uuid4())
          param={}
          param['customer']='my_customer'
          param['event']='add'
          param['body']={'type':'web_hook','id':uu_id,'address':'https://my-domain.com/pushNotifications'}
          watchUsers = service.users().watch(**param).execute()

application = webapp.WSGIApplication(
                         [
                          ('/pushNotifications',PushNotifications),
                          (directoryauthdecorator.callback_path, directoryauthdecorator.callback_handler())],
                         debug=True)

Так вот, воспринимающая часть — это то, чего я не понимаю. Когда я добавляю пользователя в свой домен и проверяю журналы запросов приложения, я вижу некоторые действия, но нет никаких полезных данных. Как мне подойти к этой части?

Любая помощь будет оценена. Спасибо.

2 ответа

  1. Проблема

    Кажется, что в реализации обработчика была некоторая путаница. Обработчик фактически настраивает канал уведомлений, отправляя запрос POST в конечную точку API отчетов. Как говорят врачи:

    Чтобы настроить канал уведомлений для сообщений об изменениях определенного ресурса, отправьте запрос POST в метод watch для ресурса.

    источник

    Для настройки канала необходимо отправить запрос только один раз, а параметр» адрес » должен быть URL-адресом приложения, которое будет получать уведомления.

    Кроме того, неясно, что происходит со следующим кодом:

    param={}
    param['customer']='my_customer'
    param['event']='add'
    

    Вы просто ломаете код, чтобы разместить его здесь? Или это действительно написано таким образом в файле? Вы должны сохранить, насколько это возможно, код, который работает ваше приложение, чтобы мы могли рассуждать об этом.

    Решение

    Кажется, от Docs вы связаны — в «получать уведомления» разделе, Что вы должны иметь код в «адрес» указан для получения уведомлений, которые будут проверять пост запроса и заголовки на уведомления отправляют запрос, а потом что-то делать с этими данными (например, хранить его в сервис BigQuery или отправить по электронной почте к админу и т. д.)

  2. Удалось это выяснить. В журналах App Engine я заметил, что каждый раз, когда я делаю изменение, за которым «наблюдают», на моем домене я получаю запрос на публикацию из API Google, но с кодом 302. Я обнаружил, что это было связано с тем, что я login: requiredнастроил в моем app.yamlдля сценария, который обрабатывал запросы, и запрос POST был перенаправлен на страницу входа в систему, вместо сценария обработки.