[git/github] Do not suggest accounts which failed to authenticate to git remote on per-project basis

Otherwise working with two projects on different remotes is cumbersome without setting default account for each project
This commit is contained in:
Ivan Semenov
2018-07-31 15:16:23 +03:00
parent fb98b1034f
commit 5bb6b660aa
4 changed files with 8 additions and 7 deletions
@@ -252,7 +252,7 @@ class GitHttpGuiAuthenticator implements GitHttpAuthenticator {
@Override
public void onAuthFailure(@NotNull String url) {
if (myData != null) myDelegate.forgetPassword(url, myData);
if (myData != null) myDelegate.forgetPassword(myProject, url, myData);
}
}
@@ -47,7 +47,7 @@ public interface GitHttpAuthDataProvider {
return null;
}
default void forgetPassword(@NotNull String url, @NotNull AuthData authData) {
default void forgetPassword(@NotNull Project project, @NotNull String url, @NotNull AuthData authData) {
//noinspection deprecation
forgetPassword(url);
}
+1 -1
View File
@@ -28,7 +28,7 @@
<applicationService serviceImplementation="org.jetbrains.plugins.github.authentication.accounts.GithubAccountInformationProvider"/>
<applicationService serviceImplementation="org.jetbrains.plugins.github.util.GithubGitHelper"/>
<applicationService serviceImplementation="org.jetbrains.plugins.github.util.GithubAccountsMigrationHelper"/>
<applicationService serviceImplementation="org.jetbrains.plugins.github.extensions.GithubAccountGitAuthenticationFailureManager"/>
<projectService serviceImplementation="org.jetbrains.plugins.github.extensions.GithubAccountGitAuthenticationFailureManager"/>
<projectService serviceInterface="org.jetbrains.plugins.github.util.GithubProjectSettings"
serviceImplementation="org.jetbrains.plugins.github.util.GithubProjectSettings"/>
<projectService serviceImplementation="org.jetbrains.plugins.github.authentication.accounts.GithubProjectDefaultAccountHolder"/>
@@ -2,6 +2,7 @@
package org.jetbrains.plugins.github.extensions
import com.intellij.openapi.components.service
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.progress.DumbProgressIndicator
import com.intellij.openapi.project.Project
@@ -17,8 +18,7 @@ import java.io.IOException
class GithubHttpAuthDataProvider(private val authenticationManager: GithubAuthenticationManager,
private val requestExecutorFactory: GithubApiRequestExecutor.Factory,
private val requestExecutorManager: GithubApiRequestExecutorManager,
private val accountInformationProvider: GithubAccountInformationProvider,
private val authenticationFailureManager: GithubAccountGitAuthenticationFailureManager) : GitHttpAuthDataProvider {
private val accountInformationProvider: GithubAccountInformationProvider) : GitHttpAuthDataProvider {
private val LOG = logger<GithubHttpAuthDataProvider>()
override fun getAuthData(project: Project, url: String): GithubAccountAuthData? {
@@ -43,13 +43,14 @@ class GithubHttpAuthDataProvider(private val authenticationManager: GithubAuthen
}
}
override fun forgetPassword(url: String, authData: AuthData) {
override fun forgetPassword(project: Project, url: String, authData: AuthData) {
if (authData is GithubAccountAuthData) {
authenticationFailureManager.ignoreAccount(url, authData.account)
project.service<GithubAccountGitAuthenticationFailureManager>().ignoreAccount(url, authData.account)
}
}
fun getSuitableAccounts(project: Project, url: String, login: String?): Set<GithubAccount> {
val authenticationFailureManager = project.service<GithubAccountGitAuthenticationFailureManager>()
var potentialAccounts = authenticationManager.getAccounts()
.filter { it.server.matches(url) }
.filter { !authenticationFailureManager.isAccountIgnored(url, it) }