diff --git a/common/git/kicad_git_common.cpp b/common/git/kicad_git_common.cpp index 6134fd4102..7d3d7fe622 100644 --- a/common/git/kicad_git_common.cpp +++ b/common/git/kicad_git_common.cpp @@ -40,7 +40,7 @@ KIGIT_COMMON::KIGIT_COMMON( git_repository* aRepo ) : m_repo( aRepo ), m_connType( GIT_CONN_TYPE::GIT_CONN_LOCAL ), m_testedTypes( 0 ), - m_nextPublicKey( 0 ) + m_nextPublicKey( 0 ), m_secretFetched( false ) {} KIGIT_COMMON::KIGIT_COMMON( const KIGIT_COMMON& aOther ) : @@ -55,7 +55,8 @@ KIGIT_COMMON::KIGIT_COMMON( const KIGIT_COMMON& aOther ) : // The mutex is default-initialized, not copied m_gitActionMutex(), m_publicKeys( aOther.m_publicKeys ), - m_nextPublicKey( aOther.m_nextPublicKey ) + m_nextPublicKey( aOther.m_nextPublicKey ), + m_secretFetched( aOther.m_secretFetched ) { } @@ -100,6 +101,25 @@ wxString KIGIT_COMMON::GetCurrentBranchName() const } +wxString KIGIT_COMMON::GetPassword() +{ + if( !m_secretFetched ) + { + if( m_connType != GIT_CONN_TYPE::GIT_CONN_LOCAL && !m_remote.IsEmpty() ) + { + wxString secret; + + if( KIPLATFORM::SECRETS::GetSecret( m_remote, m_username, secret ) ) + m_password = secret; + } + + m_secretFetched = true; + } + + return m_password; +} + + std::vector KIGIT_COMMON::GetBranchNames() const { if( !m_repo ) @@ -645,6 +665,10 @@ void KIGIT_COMMON::UpdateCurrentBranchInfo() wxString remote_name = GetRemotename(); git_remote* remote = nullptr; + m_remote.clear(); + m_password.clear(); + m_secretFetched = false; + if( git_remote_lookup( &remote, m_repo, remote_name.ToStdString().c_str() ) == GIT_OK ) { const char* url = git_remote_url( remote ); @@ -655,9 +679,6 @@ void KIGIT_COMMON::UpdateCurrentBranchInfo() git_remote_free( remote ); } - // Find the stored password if it exists - KIPLATFORM::SECRETS::GetSecret( m_remote, m_username, m_password ); - updateConnectionType(); updatePublicKeys(); } @@ -748,6 +769,8 @@ void KIGIT_COMMON::updateConnectionType() m_hostname = host; } } + + m_secretFetched = !m_password.IsEmpty(); } diff --git a/common/git/kicad_git_common.h b/common/git/kicad_git_common.h index 62d49c025f..93262852b5 100644 --- a/common/git/kicad_git_common.h +++ b/common/git/kicad_git_common.h @@ -89,11 +89,11 @@ public: }; wxString GetUsername() const { return m_username; } - wxString GetPassword() const { return m_password; } + wxString GetPassword(); GIT_CONN_TYPE GetConnType() const; - void SetUsername( const wxString& aUsername ) { m_username = aUsername; } - void SetPassword( const wxString& aPassword ) { m_password = aPassword; } + void SetUsername( const wxString& aUsername ) { m_username = aUsername; m_secretFetched = false; } + void SetPassword( const wxString& aPassword ) { m_password = aPassword; m_secretFetched = true; } void SetSSHKey( const wxString& aSSHKey ); // Holds a temporary variable that can be used by the authentication callback @@ -127,6 +127,8 @@ public: void SetRemote( const wxString& aRemote ) { m_remote = aRemote; + m_password.clear(); + m_secretFetched = false; updateConnectionType(); } @@ -170,6 +172,7 @@ private: std::vector m_publicKeys; int m_nextPublicKey; + bool m_secretFetched; // Create a dummy flag to tell if we have tested ssh agent credentials separately // from the ssh key credentials