22import sys
33from argparse import ArgumentParser
44
5- from rauth import OAuth1Service
6-
7- from microSALT .config import load_config
8- from microSALT .config import Folders , PubMLSTCredentials , PasteurCredentials
5+ from requests_oauthlib import OAuth1Session
6+
7+ from microSALT .config import (
8+ Folders ,
9+ PasteurCredentials ,
10+ PubMLSTCredentials ,
11+ load_config ,
12+ MicroSALTConfig ,
13+ )
914from microSALT .utils .pubmlst .constants import CREDENTIALS_KEY
1015from microSALT .utils .pubmlst .helpers import get_path , get_service_config
1116
@@ -18,48 +23,44 @@ def validate_credentials(client_id, client_secret):
1823 raise ValueError ("Invalid CLIENT_SECRET: It must not be empty." )
1924
2025
21- def get_request_token (service ):
22- """Handle JSON response from the request token endpoint."""
23- response = service .get_raw_request_token (params = {"oauth_callback" : "oob" })
24- if not response .ok :
25- print (f"Error obtaining request token: { response .text } " )
26+ def get_new_access_token (
27+ client_id , client_secret , db : str , base_api : str , base_web : str
28+ ) -> tuple [str , str ]:
29+ """Obtain a new access token and secret."""
30+ # Step 1: fetch request token
31+ oauth = OAuth1Session (client_id , client_secret = client_secret , callback_uri = "oob" )
32+ response = oauth .fetch_request_token (f"{ base_api } /db/{ db } /oauth/get_request_token" )
33+ if not response :
34+ print ("Error obtaining request token." )
2635 sys .exit (1 )
27- data = response .json ()
28- return data ["oauth_token" ], data ["oauth_token_secret" ]
29-
36+ request_token = response ["oauth_token" ]
37+ request_secret = response ["oauth_token_secret" ]
3038
31- def get_new_access_token (client_id , client_secret , db : str , base_api : str , base_web : str ):
32- """Obtain a new access token and secret."""
33- service = OAuth1Service (
34- name = "BIGSdb_downloader" ,
35- consumer_key = client_id ,
36- consumer_secret = client_secret ,
37- request_token_url = f"{ base_api } /db/{ db } /oauth/get_request_token" ,
38- access_token_url = f"{ base_api } /db/{ db } /oauth/get_access_token" ,
39- base_url = base_api ,
40- )
41- request_token , request_secret = get_request_token (service )
4239 print (
4340 "Please log in using your user account at "
4441 f"{ base_web } ?db={ db } &page=authorizeClient&oauth_token={ request_token } "
4542 "using a web browser to obtain a verification code."
4643 )
4744 verifier = input ("Please enter verification code: " )
4845
49- raw_access = service .get_raw_access_token (
50- request_token , request_secret , params = {"oauth_verifier" : verifier }
46+ # Step 2: exchange for access token
47+ oauth = OAuth1Session (
48+ client_id ,
49+ client_secret = client_secret ,
50+ resource_owner_key = request_token ,
51+ resource_owner_secret = request_secret ,
52+ verifier = verifier ,
5153 )
52- if not raw_access .ok :
53- print (f"Error obtaining access token: { raw_access .text } " )
54+ access_data = oauth .fetch_access_token (f"{ base_api } /db/{ db } /oauth/get_access_token" )
55+ if not access_data :
56+ print ("Error obtaining access token." )
5457 sys .exit (1 )
55-
56- access_data = raw_access .json ()
5758 return access_data ["oauth_token" ], access_data ["oauth_token_secret" ]
5859
5960
6061def save_to_credentials_py (
6162 client_id , client_secret , access_token , access_secret , credentials_path , credentials_file
62- ):
63+ ) -> None :
6364 """Save tokens in the credentials.py file."""
6465 credentials_path .mkdir (parents = True , exist_ok = True )
6566
@@ -71,7 +72,7 @@ def save_to_credentials_py(
7172 print (f"Tokens saved to { credentials_file } " )
7273
7374
74- def main (service , config , species = None ):
75+ def main (service : str , config : MicroSALTConfig , species : str | None = None ):
7576 try :
7677 service_config = get_service_config (service , pubmlst = config .pubmlst , pasteur = config .pasteur )
7778 bigsd_config = service_config ["config" ]
@@ -89,7 +90,7 @@ def main(service, config, species=None):
8990 else :
9091 raise ValueError (f"Unknown service: { service } " )
9192
92- credentials_path = get_path (config .folders , CREDENTIALS_KEY )
93+ credentials_path = get_path (folders = config .folders , config_key = CREDENTIALS_KEY )
9394 credentials_file = os .path .join (
9495 credentials_path , service_config .get ("auth_credentials_file_name" )
9596 )
0 commit comments