X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=gdata_oauth.py;fp=gdata_oauth.py;h=1f9cd67b1e59e9188f4f9486c4923493e5b84a8b;hb=5e241dc47e497c547463cecc07946ea6882835a7;hp=f88b2f5cd60a89874cf4845f69e9e5a866ea11a6;hpb=41262fc75551d35bcc9979011078b0e5b4e7b36a;p=kiosk.git diff --git a/gdata_oauth.py b/gdata_oauth.py index f88b2f5..1f9cd67 100644 --- a/gdata_oauth.py +++ b/gdata_oauth.py @@ -5,10 +5,11 @@ import sys import urllib.request, urllib.parse, urllib.error + try: - import http.client # python2 + import http.client # python2 except ImportError: - import http.client # python3 + import http.client # python3 import os.path import json import time @@ -22,29 +23,30 @@ from googleapiclient.discovery import build import datetime import ssl + class OAuth: def __init__(self, client_id, client_secret): print("gdata: initializing oauth token...") self.client_id = client_id self.client_secret = client_secret self.user_code = None - #print 'Client id: %s' % (client_id) - #print 'Client secret: %s' % (client_secret) + # print 'Client id: %s' % (client_id) + # print 'Client secret: %s' % (client_secret) self.token = None self.device_code = None self.verfication_url = None - self.token_file = 'client_secrets.json' + self.token_file = "client_secrets.json" self.scope = [ #'https://www.googleapis.com/auth/calendar', #'https://www.googleapis.com/auth/drive', #'https://docs.google.com/feeds', #'https://www.googleapis.com/auth/calendar.readonly', #'https://picasaweb.google.com/data/', - 'https://www.googleapis.com/auth/photoslibrary.readonly', + "https://www.googleapis.com/auth/photoslibrary.readonly", #'http://picasaweb.google.com/data/', #'https://www.google.com/calendar/feeds/', ] - self.host = 'accounts.google.com' + self.host = "accounts.google.com" self.reset_connection() self.load_token() self.last_action = 0 @@ -54,7 +56,7 @@ class OAuth: # exception, after which we always get httplib.CannotSendRequest errors. # When this happens, we try re-creating the exception. def reset_connection(self): - self.ssl_ctx = ssl.create_default_context(cafile='/usr/local/etc/ssl/cert.pem') + self.ssl_ctx = ssl.create_default_context(cafile="/usr/local/etc/ssl/cert.pem") http.client.HTTPConnection.debuglevel = 2 self.conn = http.client.HTTPSConnection(self.host, context=self.ssl_ctx) @@ -67,7 +69,7 @@ class OAuth: f.close() def save_token(self): - f = open(self.token_file, 'w') + f = open(self.token_file, "w") f.write(json.dumps(self.token)) f.close() @@ -82,18 +84,18 @@ class OAuth: self.conn.request( "POST", "/o/oauth2/device/code", - urllib.parse.urlencode({ - 'client_id': self.client_id, - 'scope' : ' '.join(self.scope) - }), - {"Content-type": "application/x-www-form-urlencoded"}) + urllib.parse.urlencode( + {"client_id": self.client_id, "scope": " ".join(self.scope)} + ), + {"Content-type": "application/x-www-form-urlencoded"}, + ) response = self.conn.getresponse() if response.status == 200: data = json.loads(response.read()) - self.device_code = data['device_code'] - self.user_code = data['user_code'] - self.verification_url = data['verification_url'] - self.retry_interval = data['interval'] + self.device_code = data["device_code"] + self.user_code = data["user_code"] + self.verification_url = data["verification_url"] + self.retry_interval = data["interval"] else: print(("gdata: %d" % response.status)) print((response.read())) @@ -110,17 +112,20 @@ class OAuth: self.conn.request( "POST", "/o/oauth2/token", - urllib.parse.urlencode({ - 'client_id' : self.client_id, - 'client_secret' : self.client_secret, - 'code' : self.device_code, - 'grant_type' : 'http://oauth.net/grant_type/device/1.0' - }), - {"Content-type": "application/x-www-form-urlencoded"}) + urllib.parse.urlencode( + { + "client_id": self.client_id, + "client_secret": self.client_secret, + "code": self.device_code, + "grant_type": "http://oauth.net/grant_type/device/1.0", + } + ), + {"Content-type": "application/x-www-form-urlencoded"}, + ) response = self.conn.getresponse() if response.status == 200: data = json.loads(response.read()) - if 'access_token' in data: + if "access_token" in data: self.token = data self.save_token() else: @@ -135,29 +140,32 @@ class OAuth: print("gdata: not refreshing yet, too soon...") return False else: - print('gdata: trying to refresh oauth token...') + print("gdata: trying to refresh oauth token...") self.reset_connection() - refresh_token = self.token['refresh_token'] + refresh_token = self.token["refresh_token"] self.conn.request( "POST", "/o/oauth2/token", - urllib.parse.urlencode({ - 'client_id' : self.client_id, - 'client_secret' : self.client_secret, - 'refresh_token' : refresh_token, - 'grant_type' : 'refresh_token' - }), - {"Content-type": "application/x-www-form-urlencoded"}) + urllib.parse.urlencode( + { + "client_id": self.client_id, + "client_secret": self.client_secret, + "refresh_token": refresh_token, + "grant_type": "refresh_token", + } + ), + {"Content-type": "application/x-www-form-urlencoded"}, + ) response = self.conn.getresponse() self.last_action = time.time() if response.status == 200: data = json.loads(response.read()) - if 'access_token' in data: + if "access_token" in data: self.token = data # in fact we NEVER get a new refresh token at this point - if not 'refresh_token' in self.token: - self.token['refresh_token'] = refresh_token + if not "refresh_token" in self.token: + self.token["refresh_token"] = refresh_token self.save_token() return True print(("gdata: unexpected response %d to renewal request" % response.status)) @@ -171,35 +179,40 @@ class OAuth: # https://developers.google.com/picasa-web/ def photos_service(self): headers = { - "Authorization": "%s %s" % (self.token['token_type'], self.token['access_token']) + "Authorization": "%s %s" + % (self.token["token_type"], self.token["access_token"]) } client = gdata.photos.service.PhotosService(additional_headers=headers) return client # https://developers.google.com/drive/ def docs_service(self): - cred = OAuth2Credentials(self.token['access_token'], - self.client_id, - self.client_secret, - self.token['refresh_token'], - datetime.datetime.now(), - 'http://accounts.google.com/o/oauth2/token', - 'KitchenKiosk/0.9') + cred = OAuth2Credentials( + self.token["access_token"], + self.client_id, + self.client_secret, + self.token["refresh_token"], + datetime.datetime.now(), + "http://accounts.google.com/o/oauth2/token", + "KitchenKiosk/0.9", + ) http = httplib2.Http(disable_ssl_certificate_validation=True) http = cred.authorize(http) - service = build('drive', 'v2', http) + service = build("drive", "v2", http) return service # https://developers.google.com/google-apps/calendar/ def calendar_service(self): - cred = OAuth2Credentials(self.token['access_token'], - self.client_id, - self.client_secret, - self.token['refresh_token'], - datetime.datetime.now(), - 'http://accounts.google.com/o/oauth2/token', - 'KitchenKiosk/0.9') + cred = OAuth2Credentials( + self.token["access_token"], + self.client_id, + self.client_secret, + self.token["refresh_token"], + datetime.datetime.now(), + "http://accounts.google.com/o/oauth2/token", + "KitchenKiosk/0.9", + ) http = httplib2.Http(disable_ssl_certificate_validation=True) http = cred.authorize(http) - service = build('calendar', 'v3', http) + service = build("calendar", "v3", http) return service