Google Directory API возвращает устаревшие значения - PullRequest
1 голос
/ 02 апреля 2020

У меня странная проблема около 2 недель. Мой python скрипт постоянно (каждые 5 минут) запрашивает API google для пользователей gsuite. Я хотел бы найти пользователей, у которых включена двухфакторная аутентификация (isEnrolledIn2Sv). К сожалению, когда пользователь включает 2FA, мой скрипт возвращает isEnrolledIn2Sv = True только через несколько часов.

Когда я спрашиваю его у gam ( https://github.com/jay0lee/GAM) получает правильный ответ немедленно.

Что происходит? Какой-то кеш? Почему Google возвращает мне не актуальные данные в течение нескольких часов? Возможно, в моих версиях библиотеки python есть ошибки?

Мой python код:

from google.oauth2 import service_account
import googleapiclient.discovery
...
...
...

#inside class:

    def run(self):
        log("Start no2faMonitor ")
        while (True):
            log("checking no2fa list")
            self.get_google_token()
            self.ask_google_user()
            log("Users in no2fa with 2-step verification: {}".format(len(self.users)))
            for u in self.users:
                self.send_notify(u)
            time.sleep(274)

    #---------------------------------------------------------------------------------
    def get_google_token(self):

        credentials = service_account.Credentials.from_service_account_file(config.ServiceAccountFile, scopes=config.GoogleScopes).with_subject(config.SubjectAccount)
        self.directory = googleapiclient.discovery.build('admin', 'directory_v1', credentials=credentials)

    #---------------------------------------------------------------------------------
    def ask_google_user(self):

        results = self.directory.users().list(customer="my_customer", query="orgUnitPath=/no2fa", maxResults=500).execute()
        self.userdata = json.loads(json.dumps(results))
        for element in self.userdata['users']:
            log("user: {}, 2fa: {}".format(element['primaryEmail'], element['isEnrolledIn2Sv']))

...
...
...

элемент ['isEnrolledIn2Sv'] содержит "False" для пользователей с включенным 2FA.

**pip3 list | grep google**
google                   2.0.1                 
google-api-python-client 1.7.4                 
google-auth              1.5.1                 
google-auth-httplib2     0.0.3 

Примерно через 2 недели все прошло нормально, хорошие ответы я получил через 5 минут

1 Ответ

0 голосов
/ 23 апреля 2020

Я нашел параметр кэша в библиотеке python. (по умолчанию True)

build(serviceName, version, http=None, discoveryServiceUrl=DISCOVERY_URI, developerKey=None, model=None, requestBuilder=HttpRequest, credentials=None, cache_discovery=True, cache=None) 
Construct a Resource for interacting with an API.

проверенный патч:

- self.directory = googleapiclient.discovery.build('admin', 'directory_v1', credentials=credentials)
+ self.directory = googleapiclient.discovery.build('admin', 'directory_v1', credentials=credentials, cache_discovery=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...