как использовать gpg зашифрованные файлы oauth через Python для offlineimap

Я играл с oauth2, чтобы лучше понять его. По этой причине я установил offlineimap, который должен действовать как стороннее приложение. Я нашел хороший способ читать зашифрованные учетные данные здесь, в stackexchange .

На основании связанного сообщения я изменил / скопировал следующий скрипт python:

import subprocess import os import json def passwd(file_name): acct = os.path.basename(file_name) path = "/PATHTOFILE/%s" % file_name args = ["gpg", "--use-agent", "--quiet", "--batch", "-d", path] try: return subprocess.check_output(args).strip() except subprocess.CalledProcessError: return "" def oauthpasswd(acct, key): acct = os.path.basename(acct) path = "/PATHTOFILE/%s_oauth2.gpg" % acct args = ["gpg", "--use-agent", "--quiet", "--batch", "-d", path] try: return str(json.loads(subprocess.check_output(args).strip())['installed'][key]) except subprocess.CalledProcessError: return "" def prime_gpg_agent(): ret = False i = 1 while not ret: ret = (passwd("prime.gpg") == "prime") if i > 2: from offlineimap.ui import getglobalui sys.stderr.write("Error reading in passwords. Terminating.\n") getglobalui().terminate() i += 1 return ret prime_gpg_agent() 

В соответствующем файле offlineimaprc я вызываю функцию с правильными аргументами:

 oauth2_client_id = oauthpasswd('gmail', 'client_id') oauth2_client_secret = oauthpasswd('gmail', 'client_secret') oauth2_request_url = https://accounts.google.com/o/oauth2/token oauth2_refresh_token = passwd('gmail_rf_token.gpg') 

Обратите внимание, что в локальном файле PATHTOFILE установлен правильно. То, что я сделал, было загружено JSON-файлом из Google, включая учетные данные oauth2 и зашифровано. Я сохранил токен обновления в отдельном файле. Однако, если я запускаю offlineimap, я получаю ошибку аутентификации:

  ERROR: While attempting to sync account 'gmail' ('http error', 401, 'Unauthorized', <httplib.HTTPMessage instance at 0x7f488c214320>) (configuration is: {'client_secret': "oauthpasswd('gmail', 'client_secret')", 'grant_type': 'refresh_token', 'refresh_token': "passwd('gmail_rf_token.gpg')", 'client_id': "oauthpasswd('gmail', 'client_id')"}) 

Я попытался затем проверить выходы двух функций python passwd и oauthpasswd в интерпретаторе python. Я получаю желаемые выходы. Более того, я скопировал выходные данные из функций интерпретатора python в файл конфигурации offlineimaprc, и я смог синхронизировать с Gmail. Это означает, что должна быть ошибка, когда offlineimap выполняет файл, но я не вижу, что случилось.

Если я только шифрую свой пароль Gmail, все работает. Это означает, что что-то не так с деталями, загружаемыми с Google (client_id, client_secret и токен обновления). Как указывалось выше, сами значения верны. Я действительно скопировал вывод

 oauthpasswd('gmail', 'client_id') oauthpasswd('gmail', 'client_secret') passwd('gmail_rf_token.gpg') 

от консоли python до файла offlineimaprc, и это сработало.

One Solution collect form web for “как использовать gpg зашифрованные файлы oauth через Python для offlineimap”

Проблема, которая возникает, следующая. В соответствии с этим ответом offlineimap не позволяет шифровать все ключи в файле offlinemaprc. Вот почему функция python никогда не получает оценку и передаются неправильные строки.

  • Django Tastypie POST Неавторизованный на разных серверах
  • Ошибка при попытке доступа к «Google Drive» с помощью python (исходный код google quickstart.py)
  • Как избежать «Не удалось получить токен доступа: {« error »:« invalid_grant »} в автономных задачах CAE cron?
  • Как разрешить клиенту gdata без использования рабочего процесса gdata oauth2?
  • HTTPError 403 (Запрещено) с Django и python-social-auth, подключающимся к Google с помощью OAuth2
  • Создание токена доступа с помощью Django OAuth2 Toolkit
  • Ошибка атрибута при попытке запустить быстрый запуск API Gmail в Python
  • Аутентификация пользователя с использованием django-oauth-toolkit
  •  
    Interesting Posts for Van-Lav

    Python, что это означает? Объект AttributeError: 'unicode' не имеет атрибута 'has_key'

    Как создать набор данных изображений так же, как набор данных MNIST?

    Как я могу векторизовать усреднение 2×2 суб-массивов массива numpy?

    Включение файлов, отличных от Python, с помощью setup.py

    Невозможно импортировать модуль python из подкаталога с помощью простого оператора импорта

    Захват keyPressEvent в QTreeWidget без фокуса

    SQLAlchemy + pymssql. Будут ли сырые параметризованные запросы использовать один и тот же план выполнения?

    Какие хорошие решения ORM для Python?

    Как я могу тестировать Django Views?

    Переменная подчеркивания Python

    Как создать настраиваемую панель конфигурации администратора в Django?

    подсчет, а затем вниз диапазон в python

    Могу ли я получить локальные переменные функции Python, из которых было создано исключение?

    Запустите manage.py с экземпляра AWS EB Linux

    Функция работает слишком медленно

    Python - лучший язык программирования в мире.