1212from .display import DisplayFormatter
1313from .cache import CacheManager
1414from .config import ConfigManager
15+ from .providers import ProviderConfig , PROVIDER_ENV_VARS , PROVIDER_DEFAULT_URLS
1516from . import __version__
1617
1718
@@ -25,16 +26,16 @@ def _background_refresh_cache_subprocess(username: str) -> None:
2526 config_manager = ConfigManager ()
2627 cache_expiry = config_manager .get_cache_expiry_minutes ()
2728 cache_manager = CacheManager (cache_expiry_minutes = cache_expiry )
28- provider = config_manager .get_provider ()
29- provider_url = config_manager .get_provider_url ()
30- token = config_manager .get_token ()
31- if provider == None :
32- print ("Provider not set" )
29+
30+ provider_config = config_manager .get_provider_config ()
31+ if not provider_config :
3332 exit (1 )
34- if provider_url == None :
35- print ("Provider url not set" )
33+ if not provider_config .url :
3634 exit (1 )
37- fetcher = _create_fetcher (provider , provider_url , token )
35+
36+ fetcher = _create_fetcher (
37+ provider_config .name , provider_config .url , provider_config .token or None
38+ )
3839
3940 fresh_user_data = fetcher .fetch_user_data (username )
4041 fresh_stats = fetcher .fetch_user_stats (username , fresh_user_data )
@@ -264,17 +265,18 @@ def main() -> int:
264265 # Initialize components
265266 cache_expiry = config_manager .get_cache_expiry_minutes ()
266267 cache_manager = CacheManager (cache_expiry_minutes = cache_expiry )
267- provider = config_manager .get_provider ()
268- provider_url = config_manager .get_provider_url ()
269- token = config_manager .get_token ()
270- if provider == None :
271- print ("Provider not set" )
268+
269+ provider_config = config_manager .get_provider_config ()
270+ if not provider_config :
271+ print ("Provider not set. Run: gitfetch --change-provider" )
272272 return 1
273- if provider_url == None :
274- print ("Provider url not set" )
273+ if not provider_config . url :
274+ print ("Provider URL not set. Run: gitfetch --change-provider " )
275275 return 1
276276
277- fetcher = _create_fetcher (provider , provider_url , token )
277+ fetcher = _create_fetcher (
278+ provider_config .name , provider_config .url , provider_config .token or None
279+ )
278280
279281 # Handle custom box character
280282 custom_box = args .custom_box
@@ -565,54 +567,66 @@ def _initialize_gitfetch(config_manager: ConfigManager) -> bool:
565567 if not provider :
566568 return False
567569
568- config_manager .set_provider (provider )
569-
570- # Set default URL for known providers
570+ # Determine URL for provider
571571 if provider == 'github' :
572- config_manager . set_provider_url ( 'https://api.github.com' )
572+ url = PROVIDER_DEFAULT_URLS . get ( 'github' , 'https://api.github.com' )
573573 elif provider == 'gitlab' :
574- config_manager . set_provider_url ( 'https://gitlab.com' )
574+ url = PROVIDER_DEFAULT_URLS . get ( 'gitlab' , 'https://gitlab.com' )
575575 elif provider == 'gitea' :
576576 url = input ("Enter Gitea/Forgejo/Codeberg URL: " ).strip ()
577577 if not url :
578578 print ("Provider URL required" , file = sys .stderr )
579579 return False
580- config_manager .set_provider_url (url )
581580 elif provider == 'sourcehut' :
582- config_manager .set_provider_url ('https://git.sr.ht' )
583-
584- # Ask for token if needed
585- token = None
586- if provider in ['gitlab' , 'gitea' , 'sourcehut' , 'github' ]:
587- token_input = input (
588- f"Enter your { provider } personal access token{ ', needed for private repositories' if provider == 'github' else '' } \n "
589- +
590- "(optional, press Enter to skip): "
591- ).strip ()
592- if token_input :
593- token = token_input
594- config_manager .set_token (token )
595-
596- # Create appropriate fetcher
597- url = config_manager .get_provider_url ()
598- if url == None :
599- print ("Provider url could not be found." , file = sys .stderr )
581+ url = PROVIDER_DEFAULT_URLS .get ('sourcehut' , 'https://git.sr.ht' )
582+ else :
583+ print (f"Unsupported provider: { provider } " , file = sys .stderr )
600584 return False
601585
602- fetcher = _create_fetcher (
603- provider , url , token
586+ # Ask for token (optional - only for extra rate limits)
587+ token = ''
588+ env_var = PROVIDER_ENV_VARS .get (provider , '' )
589+
590+ # Make it clear CLI is required, token is optional for rate limits
591+ if provider in ['github' , 'gitlab' ]:
592+ cli_name = 'gh' if provider == 'github' else 'glab'
593+ print (f"\n Note: { cli_name } CLI is required for authentication." )
594+ print (f"Token is optional but increases rate limits.\n " )
595+
596+ token_msg = f"Enter your { provider } personal access token"
597+ token_msg += f"\n (optional - for higher rate limits, press Enter to skip"
598+ if env_var :
599+ token_msg += f", or set { env_var } env var"
600+ token_msg += "): "
601+
602+ token_input = input (token_msg ).strip ()
603+ if token_input :
604+ token = token_input
605+
606+ # Create provider config
607+ provider_config = ProviderConfig (
608+ name = provider ,
609+ username = '' , # Will be set after fetcher auth
610+ url = url ,
611+ token = token
604612 )
605613
614+ # Create fetcher to get authenticated user
615+ fetcher = _create_fetcher (provider , url , token or None )
616+
606617 # Try to get authenticated user
607618 try :
608619 username = fetcher .get_authenticated_user ()
609- print (f"Using authenticated user: { username } " )
620+ # Show auth status with token info
621+ token_status = "with token" if token else "without token (limited rate)"
622+ print (f"✓ Authenticated as: { username } ({ token_status } )" )
623+ provider_config .username = username
610624 except Exception as e :
611625 print (f"Could not get authenticated user: { e } " )
612626 if provider == 'github' :
613- print ("Please authenticate with : gh auth login" )
627+ print ("Please install gh CLI and run : gh auth login" )
614628 elif provider == 'gitlab' :
615- print ("Please authenticate with : glab auth login" )
629+ print ("Please install glab CLI and run : glab auth login" )
616630 else :
617631 print ("Please ensure you have a valid token configured" )
618632 return False
@@ -634,7 +648,8 @@ def _initialize_gitfetch(config_manager: ConfigManager) -> bool:
634648 else :
635649 config_manager .set_cache_expiry_minutes (15 )
636650
637- # Save configuration
651+ # Save configuration using new provider config system
652+ config_manager .set_provider_config (provider_config )
638653 config_manager .set_default_username (username )
639654 config_manager .save ()
640655
0 commit comments