From 13158e3cdfc846d03e5698a9e507b7b5c426bfd6 Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Mon, 23 Jan 2012 23:58:40 -0800 Subject: Revert the X-GOOGLE-TOKEN mech to not perform HTTP requests. Added new example for how to retrieve a Google token, following the best case, non-browser, workflow. Other thirdparty auth mechs (Facebook, MSN) follow a similar pattern of using an access token. --- .../thirdparty/suelta/mechanisms/google_token.py | 58 +--------------------- 1 file changed, 1 insertion(+), 57 deletions(-) (limited to 'sleekxmpp') diff --git a/sleekxmpp/thirdparty/suelta/mechanisms/google_token.py b/sleekxmpp/thirdparty/suelta/mechanisms/google_token.py index 19d1b5a3..e641bb91 100644 --- a/sleekxmpp/thirdparty/suelta/mechanisms/google_token.py +++ b/sleekxmpp/thirdparty/suelta/mechanisms/google_token.py @@ -1,72 +1,16 @@ -import sys -import logging -try: - from httplib import HTTPSConnection - from urllib import urlencode -except ImportError: - from urllib.parse import urlencode - from http.client import HTTPSConnection - from sleekxmpp.thirdparty.suelta.util import bytes from sleekxmpp.thirdparty.suelta.sasl import Mechanism, register_mechanism from sleekxmpp.thirdparty.suelta.exceptions import SASLError, SASLCancelled -log = logging.getLogger(__name__) - class X_GOOGLE_TOKEN(Mechanism): def __init__(self, sasl, name): super(X_GOOGLE_TOKEN, self).__init__(sasl, name) - self.check_values(['email', 'password', 'access_token']) + self.check_values(['email', 'access_token']) def process(self, challenge=None): - if not self.values.get('access_token', False): - log.debug("SASL: Requesting auth token from Google") - try: - conn = HTTPSConnection('www.google.com') - except: - raise SASLError(self.sasl, 'Could not connect to Google') - params = urlencode({ - 'accountType': 'GOOGLE', - 'service': 'mail', - 'Email': self.values['email'], - 'Passwd': self.values['password'] - }) - headers = { - 'Content-Type': 'application/x-www-form-urlencoded' - } - try: - conn.request('POST', '/accounts/ClientLogin', params, headers) - resp = conn.getresponse().read() - data = {} - for line in resp.split(): - k, v = line.split(b'=', 1) - data[k] = v - except Exception as e: - raise e - #raise SASLError(self.sasl, 'Could not retrieve login data') - - if b'SID' not in data: - raise SASLError(self.sasl, 'Required data not found') - - params = urlencode({ - 'SID': data[b'SID'], - 'LSID': data[b'LSID'], - 'service': 'mail' - }) - try: - conn.request('POST', '/accounts/IssueAuthToken', params, headers) - resp = conn.getresponse() - data = resp.read().split() - except: - raise SASLError(self.sasl, 'Could not retrieve auth data') - if not data: - raise SASLError(self.sasl, 'Could not retrieve token') - - self.values['access_token'] = data[0] - email = bytes(self.values['email']) token = bytes(self.values['access_token']) return b'\x00' + email + b'\x00' + token -- cgit v1.2.3