diff --git a/db.py b/db.py index 9067d0c..9930265 100644 --- a/db.py +++ b/db.py @@ -79,6 +79,7 @@ class DB(object): id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, user_id INTEGER, request_token TEXT, + request_token_secret TEXT, FOREIGN KEY(user_id) REFERENCES user(id) ); CREATE TABLE IF NOT EXISTS twitter_accounts ( diff --git a/frontend.py b/frontend.py index 2fd598d..585af01 100755 --- a/frontend.py +++ b/frontend.py @@ -101,21 +101,18 @@ def login_twitter(user): Starts the twitter OAuth authentication process. :return: redirect to twitter. """ + consumer_key = config["twitter"]["consumer_key"] + consumer_secret = config["twitter"]["consumer_secret"] + callback_url = url("login/twitter/callback") + auth = tweepy.OAuthHandler(consumer_key, consumer_secret, callback_url) try: - consumer_key = config["twitter"]["consumer_key"] - consumer_secret = config["twitter"]["consumer_secret"] - callback_url = url("/login/twitter/callback") - auth = tweepy.OAuthHandler(consumer_key, consumer_secret, callback_url) - try: - redirect_url = auth.get_authorization_url() - except tweepy.TweepError: - logger.error('Twitter OAuth Error: Failed to get request token.', - exc_info=True) - return dict(error="Failed to get request token.") - user.save_request_token(auth.request_token) - return bottle.redirect(redirect_url) - except Exception: - logger.error("Error with Sign in with Twitter.", exc_info= True) + redirect_url = auth.get_authorization_url() + except tweepy.TweepError: + logger.error('Twitter OAuth Error: Failed to get request token.', + exc_info=True) + return dict(error="Failed to get request token.") + user.save_request_token(auth.request_token) + return bottle.redirect(redirect_url) @get('/login/twitter/callback') @@ -174,3 +171,5 @@ bottle.install(SessionPlugin('/')) if __name__ == '__main__': # testing only bottle.run(host='localhost', port=8080) +else: + application.catchall = False diff --git a/user.py b/user.py index 703f9ab..427bf2d 100644 --- a/user.py +++ b/user.py @@ -128,16 +128,17 @@ class User(object): return dict(foo='bar') def save_request_token(self, token): - db.execute("INSERT INTO twitter_request_tokens(user_id, request_token) VALUES(?, ?);", - (self.uid, token)) + db.execute("INSERT INTO twitter_request_tokens(user_id, request_token, request_token_secret) VALUES(?, ?, ?);", + (self.uid, token["oauth_token"], token["oauth_token_secret"])) db.commit() def get_request_token(self): - db.execute("SELECT request_token FROM twitter_request_tokens WHERE user_id = ?;", (id,)) - request_token = db.cur.fetchone()[0] + db.execute("SELECT request_token, request_token_secret FROM twitter_request_tokens WHERE user_id = ?;", (id,)) + request_token = db.cur.fetchone() db.execute("DELETE FROM twitter_request_tokens WHERE user_id = ?;", (id,)) db.commit() - return request_token + return {"oauth_token" : request_token[0], + "oauth_token_secret" : request_token[1]} def save_twitter_token(self, access_token, access_token_secret): db.execute(