changeset 49:2c433f19e467

Improve Twitter authentication flow.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 08 Oct 2023 13:47:58 -0700
parents 486affad656e
children 53d6c58a98e0
files silorider/silos/twitter.py
diffstat 1 files changed, 12 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/silorider/silos/twitter.py	Sun Oct 08 13:47:28 2023 -0700
+++ b/silorider/silos/twitter.py	Sun Oct 08 13:47:58 2023 -0700
@@ -44,23 +44,29 @@
     def authenticate(self, ctx):
         force = ctx.exec_ctx.args.force
 
+        # Get the app info tokens.
         client_token = self.getCacheItem('clienttoken')
         if not client_token or force:
-            logger.info("Please enter Twitter consumer tokens for %s:" %
+            logger.info("Please enter consumer tokens (aka API tokens) for %s:" %
                         self.ctx.silo_name)
             consumer_key = input("Consumer Key: ")
             consumer_secret = input("Consumer Secret: ")
             client_token = '%s,%s' % (consumer_key, consumer_secret)
             self.setCacheItem('clienttoken', client_token)
 
+        # Generate an access token by making the user login and authorize
+        # our app.
         access_token = self.getCacheItem('accesstoken')
         if not access_token or force:
-            logger.info("Please enter Twitter access tokens for %s:" %
-                        self.ctx.silo_name)
+            self._ensureClient()
+            auth_url = self.client.v1.auth.get_authorization_url()
+            logger.info("Please authorize SiloRider with Twitter for %s at: %s" %
+                        (self.ctx.silo_name, auth_url))
+            logger.info("And then enter the OAuth verifier token here:")
+            verifier_token = input("Verifier Token:")
 
-            access_key = input("Access Token: ")
-            access_secret = input("Access Token Secret: ")
-
+            access_key, access_secret = self.client.v1.auth.get_access_token(
+                verifier_token)
             access_token = '%s,%s' % (access_key, access_secret)
             self.setCacheItem('accesstoken', access_token)