From 9847f7ad01c7570f2d795e6cb2ac037dc03e5e59 Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Wed, 6 Jun 2018 09:11:37 -0500 Subject: [PATCH] Get back to PIN code authorization due to Twitter changes. Closes #216 --- src/sessionmanager/session.py | 10 +++++----- src/sessionmanager/wxUI.py | 4 +++- src/twitter/twitter.py | 23 ++++++++--------------- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/sessionmanager/session.py b/src/sessionmanager/session.py index 06711790..c5e5e125 100644 --- a/src/sessionmanager/session.py +++ b/src/sessionmanager/session.py @@ -167,19 +167,19 @@ class Session(object): if self.logged == True: raise Exceptions.AlreadyAuthorisedError("The authorisation process is not needed at this time.") else: - self.authorisation_thread = call_threaded(self.twitter.authorise, self.settings) + self.twitter.authorise() self.authorisation_dialog = authorisationDialog() self.authorisation_dialog.cancel.Bind(wx.EVT_BUTTON, self.authorisation_cancelled) - pub.subscribe(self.authorisation_accepted, "authorisation-accepted") + self.authorisation_dialog.ok.Bind(wx.EVT_BUTTON, self.authorisation_accepted) self.authorisation_dialog.ShowModal() def authorisation_cancelled(self, *args, **kwargs): - pub.sendMessage("authorisation-cancelled") self.authorisation_dialog.Destroy() del self.authorisation_dialog - def authorisation_accepted(self): - pub.unsubscribe(self.authorisation_accepted, "authorisation-accepted") + def authorisation_accepted(self, *args, **kwargs): + pincode = self.authorisation_dialog.text.GetValue() + self.twitter.verify_authorisation(self.settings, pincode) self.authorisation_dialog.Destroy() def get_more_items(self, update_function, users=False, name=None, *args, **kwargs): diff --git a/src/sessionmanager/wxUI.py b/src/sessionmanager/wxUI.py index 61df085e..a3fb3eaa 100644 --- a/src/sessionmanager/wxUI.py +++ b/src/sessionmanager/wxUI.py @@ -80,7 +80,9 @@ class authorisationDialog(wx.Dialog): super(authorisationDialog, self).__init__(parent=None, title=_(u"Authorising account...")) panel = wx.Panel(self) sizer = wx.BoxSizer(wx.VERTICAL) - self.text = wx.TextCtrl(panel, -1, _("Waiting for account authorisation..."), style=wx.TE_READONLY|wx.TE_MULTILINE) + static = wx.StaticText(panel, wx.NewId(), _(u"Enter your PIN code here")) + self.text = wx.TextCtrl(panel, -1) + self.ok = wx.Button(panel, wx.ID_OK) self.cancel = wx.Button(panel, wx.ID_CANCEL) sizer.Add(self.text, 0, wx.ALL, 5) sizer.Add(self.cancel, 0, wx.ALL, 5) diff --git a/src/twitter/twitter.py b/src/twitter/twitter.py index eae3aa64..1db889db 100644 --- a/src/twitter/twitter.py +++ b/src/twitter/twitter.py @@ -1,11 +1,9 @@ # -*- coding: utf-8 -*- import config import random -import BaseHTTPServer import webbrowser from twython import Twython, TwythonError from keys import keyring -import authorisationHandler from requests import certs import logging log = logging.getLogger("sessionTwitter") @@ -17,22 +15,17 @@ class twitter(object): if verify_credentials == True: self.credentials = self.twitter.verify_credentials() - def authorise(self, settings): - authorisationHandler.logged = False - port = random.randint(30000, 65535) - httpd = BaseHTTPServer.HTTPServer(('127.0.0.1', port), authorisationHandler.handler) - twitter = Twython(keyring.get("api_key"), keyring.get("api_secret"), auth_endpoint='authorize') - auth = twitter.get_authentication_tokens("http://127.0.0.1:{0}".format(port,)) - webbrowser.open_new_tab(auth['auth_url']) - while authorisationHandler.logged == False: - httpd.handle_request() - self.twitter = Twython(keyring.get("api_key"), keyring.get("api_secret"), auth['oauth_token'], auth['oauth_token_secret']) - final = self.twitter.get_authorized_tokens(authorisationHandler.verifier) + def authorise(self): + twitter = Twython(keyring.get("api_key"), keyring.get("api_secret")) + self.auth = twitter.get_authentication_tokens(callback_url="oob") + webbrowser.open_new_tab(self.auth['auth_url']) + + def verify_authorisation(self, settings, pincode): + self.twitter = Twython(keyring.get("api_key"), keyring.get("api_secret"), self.auth['oauth_token'], self.auth['oauth_token_secret']) + final = self.twitter.get_authorized_tokens(pincode) self.save_configuration(settings, final["oauth_token"], final["oauth_token_secret"]) - httpd.server_close() def save_configuration(self, settings, user_key, user_secret): settings["twitter"]["user_key"] = user_key settings["twitter"]["user_secret"] = user_secret settings.write() -