diff --git a/conan/cli/commands/remote.py b/conan/cli/commands/remote.py index 35cffa9b8b3..b1737fe06c1 100644 --- a/conan/cli/commands/remote.py +++ b/conan/cli/commands/remote.py @@ -201,10 +201,13 @@ def remote_login(conan_api, parser, subparser, *args): for r in remotes: previous_info = conan_api.remotes.user_info(r) - user, password = creds.auth(r, args.username, args.password) - if args.username is not None and args.username != user: - raise ConanException(f"User '{args.username}' doesn't match user '{user}' in " - f"credentials.json or environment variables") + if args.username is not None and args.password is not None: + user, password = args.username, args.password + else: + user, password = creds.auth(r, args.username) + if args.username is not None and args.username != user: + raise ConanException(f"User '{args.username}' doesn't match user '{user}' in " + f"credentials.json or environment variables") conan_api.remotes.user_login(r, user, password) info = conan_api.remotes.user_info(r) diff --git a/conans/client/rest/conan_requester.py b/conans/client/rest/conan_requester.py index f59fac373d0..73974a79c4e 100644 --- a/conans/client/rest/conan_requester.py +++ b/conans/client/rest/conan_requester.py @@ -33,11 +33,11 @@ class _SourceURLCredentials: """ def __init__(self, cache_folder): self._urls = {} - self.auth_source_plugin = None + self._auth_source_plugin = None if not cache_folder: return auth_source_plugin_path = HomePaths(cache_folder).auth_source_plugin_path - self.auth_source_plugin = _load_auth_source_plugin(auth_source_plugin_path) + self._auth_source_plugin = _load_auth_source_plugin(auth_source_plugin_path) creds_path = os.path.join(cache_folder, "source_credentials.json") if not os.path.exists(creds_path): return @@ -68,9 +68,9 @@ def _get_auth(credentials): def add_auth(self, url, kwargs): # First, try to use "auth_source_plugin" - if self.auth_source_plugin: + if self._auth_source_plugin: try: - c = self.auth_source_plugin(url) + c = self._auth_source_plugin(url) except Exception as e: msg = f"Error while processing 'auth_source_remote.py' plugin" msg = scoped_traceback(msg, e, scope="/extensions/plugins") @@ -206,8 +206,8 @@ def _call_method(self, method, url, **kwargs): os.environ.clear() os.environ.update(old_env) + def _load_auth_source_plugin(auth_source_plugin_path): if os.path.exists(auth_source_plugin_path): mod, _ = load_python_file(auth_source_plugin_path) - if hasattr(mod, "auth_source_plugin"): - return mod.auth_source_plugin + return getattr(mod, "auth_source_plugin", None) diff --git a/conans/client/rest/remote_credentials.py b/conans/client/rest/remote_credentials.py index d9ad7ddafdd..701af57766e 100644 --- a/conans/client/rest/remote_credentials.py +++ b/conans/client/rest/remote_credentials.py @@ -12,11 +12,13 @@ from conans.errors import ConanException, scoped_traceback from conans.util.files import load + class RemoteCredentials: def __init__(self, cache_folder, global_conf): self._global_conf = global_conf self._urls = {} - self.auth_remote_plugin = _load_auth_remote_plugin(HomePaths(cache_folder).auth_remote_plugin_path) + auth_plugin_path = HomePaths(cache_folder).auth_remote_plugin_path + self._auth_remote_plugin = _load_auth_remote_plugin(auth_plugin_path) creds_path = os.path.join(cache_folder, "credentials.json") if not os.path.exists(creds_path): return @@ -31,15 +33,11 @@ def __init__(self, cache_folder, global_conf): except Exception as e: raise ConanException(f"Error loading 'credentials.json' {creds_path}: {repr(e)}") - def auth(self, remote, user=None, password=None): - if user is not None and password is not None: - return user, password - + def auth(self, remote, user=None): # First get the auth_remote_plugin - - if self.auth_remote_plugin is not None: + if self._auth_remote_plugin is not None: try: - plugin_user, plugin_password = self.auth_remote_plugin(remote, user=user) + plugin_user, plugin_password = self._auth_remote_plugin(remote, user=user) except Exception as e: msg = f"Error while processing 'auth_remote.py' plugin" msg = scoped_traceback(msg, e, scope="/extensions/plugins") @@ -82,8 +80,8 @@ def _get_env(remote, user): ConanOutput().info("Got password '******' from environment") return user, passwd + def _load_auth_remote_plugin(auth_remote_plugin_path): if os.path.exists(auth_remote_plugin_path): mod, _ = load_python_file(auth_remote_plugin_path) - if hasattr(mod, "auth_remote_plugin"): - return mod.auth_remote_plugin + return getattr(mod, "auth_remote_plugin", None)