fix bug #463888
This commit is contained in:
Родитель
4e9d6170e9
Коммит
87bfef056c
|
@ -123,9 +123,14 @@ public class UrlHelper {
|
|||
}
|
||||
|
||||
// only support http and https (ssh support will come later when the format of the url is better understood)
|
||||
final String scheme = gitUri.getScheme() != null ? gitUri.getScheme().toLowerCase() : null;
|
||||
if (HTTPS_PROTOCOL.equals(scheme) || HTTP_PROTOCOL.equals(scheme)) {
|
||||
return HttpGitUrlParser.tryParse(gitUri, validator);
|
||||
try {
|
||||
final String scheme = gitUri.getScheme() != null ? gitUri.getScheme().toLowerCase() : null;
|
||||
if (HTTPS_PROTOCOL.equals(scheme) || HTTP_PROTOCOL.equals(scheme)) {
|
||||
return HttpGitUrlParser.tryParse(gitUri, validator);
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logger.error("tryParse: unexpected error");
|
||||
logger.warn("tryParse", t);
|
||||
}
|
||||
|
||||
return ParseResult.FAILED;
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/lib/src" />
|
||||
<root url="file://$PROJECT_DIR$/../plugin/src" />
|
||||
<root url="file://$PROJECT_DIR$/../common/src" />
|
||||
</SOURCES>
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/classes" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/src" recursive="false" type="SOURCES" />
|
||||
|
|
|
@ -25,7 +25,7 @@ ServerContextTable.ProjectColumn=Project
|
|||
ServerContextTable.RepoColumn=Repository
|
||||
|
||||
#Common
|
||||
Errors.AuthCanceledByUser=Login canceled by the user.
|
||||
Errors.AuthNotSuccessful=Authenticating to the server for Git repository ''{0}'' was not successful. Please provide valid credentials and try again.
|
||||
Operation.Errors.LookupCanceled=Lookup operation was canceled by the user
|
||||
PAT.TokenDesc=VSO IntelliJ Plugin
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ public class TfPluginBundle {
|
|||
|
||||
// Common
|
||||
@NonNls
|
||||
public static final String KEY_ERRORS_AUTH_CANCELED_BY_USER = "Errors.AuthCanceledByUser";
|
||||
public static final String KEY_ERRORS_AUTH_NOT_SUCCESSFUL = "Errors.AuthNotSuccessful";
|
||||
@NonNls
|
||||
public static final String KEY_OPERATION_ERRORS_LOOKUP_CANCELED = "Operation.Errors.LookupCanceled";
|
||||
@NonNls
|
||||
|
|
|
@ -477,7 +477,7 @@ public class CreatePullRequestModel extends AbstractModel {
|
|||
TfPluginBundle.message(TfPluginBundle.KEY_PAT_TOKEN_DESC), true);
|
||||
|
||||
if (context == null) {
|
||||
notifyCreateFailedError(project, TfPluginBundle.message(TfPluginBundle.KEY_ERRORS_AUTH_CANCELED_BY_USER));
|
||||
notifyCreateFailedError(project, TfPluginBundle.message(TfPluginBundle.KEY_ERRORS_AUTH_NOT_SUCCESSFUL, gitRemoteUrl));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,14 +10,19 @@ import com.microsoftopentechnologies.auth.AuthenticationResult;
|
|||
import org.apache.http.auth.Credentials;
|
||||
import org.apache.http.auth.NTCredentials;
|
||||
import org.apache.http.auth.UsernamePasswordCredentials;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
/**
|
||||
* Static helpers for Authentication
|
||||
*/
|
||||
public class AuthHelper {
|
||||
private final static Logger logger = LoggerFactory.getLogger(AuthHelper.class);
|
||||
private final static String COMPUTER_NAME = "computername";
|
||||
|
||||
public static AuthenticationInfo createAuthenticationInfo(final String serverUri, final Credentials credentials) {
|
||||
|
@ -49,10 +54,8 @@ public class AuthHelper {
|
|||
|
||||
/**
|
||||
* This method wraps the normal Async call to authenticate and waits on the result.
|
||||
*
|
||||
* @throws Throwable
|
||||
*/
|
||||
public static AuthenticationInfo getAuthenticationInfoSynchronously(final AuthenticationProvider provider, final String gitRemoteUrl) throws Throwable {
|
||||
public static AuthenticationInfo getAuthenticationInfoSynchronously(final AuthenticationProvider provider, final String gitRemoteUrl){
|
||||
final SettableFuture<AuthenticationInfo> future = SettableFuture.create();
|
||||
|
||||
provider.authenticateAsync(gitRemoteUrl, new AuthenticationListener() {
|
||||
|
@ -73,7 +76,22 @@ public class AuthHelper {
|
|||
|
||||
// Wait for the authentication info object to be ready
|
||||
// Don't wait any longer than 15 minutes for the user to authenticate
|
||||
return future.get(15, TimeUnit.MINUTES);
|
||||
Throwable t = null;
|
||||
try {
|
||||
return future.get(15, TimeUnit.MINUTES);
|
||||
} catch(InterruptedException ie) {
|
||||
t = ie;
|
||||
} catch(ExecutionException ee) {
|
||||
t = ee;
|
||||
} catch(TimeoutException te) {
|
||||
t = te;
|
||||
} finally {
|
||||
if (t != null) {
|
||||
logger.error("getAuthenticationInfoSynchronously: failed to get authentication info from user");
|
||||
logger.warn("getAuthenticationInfoSynchronously", t);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -215,28 +215,24 @@ public class ServerContextManager {
|
|||
public ServerContext createContextFromRemoteUrl(final String gitRemoteUrl) {
|
||||
assert !StringUtils.isEmpty(gitRemoteUrl);
|
||||
|
||||
try {
|
||||
// Get matching context from manager
|
||||
ServerContext context = getActiveContext();
|
||||
if (context == ServerContext.NO_CONTEXT || context.getGitRepository() == null ||
|
||||
!StringUtils.equalsIgnoreCase(context.getGitRepository().getRemoteUrl().replace(" ", "%20"), gitRemoteUrl)) {
|
||||
context = null;
|
||||
}
|
||||
|
||||
if (context == null) {
|
||||
// Manager didn't have a matching context, so create one
|
||||
final AuthenticationProvider authenticationProvider = getAuthenticationProvider(gitRemoteUrl);
|
||||
final AuthenticationInfo authenticationInfo = AuthHelper.getAuthenticationInfoSynchronously(authenticationProvider, gitRemoteUrl);
|
||||
if (authenticationInfo != null) {
|
||||
// Create a new context object and store it back in the manager
|
||||
context = createServerContext(gitRemoteUrl, authenticationInfo);
|
||||
}
|
||||
}
|
||||
|
||||
return context;
|
||||
} catch (Throwable ex) {
|
||||
throw new RuntimeException(ex.getLocalizedMessage(), ex);
|
||||
// Get matching context from manager
|
||||
ServerContext context = getActiveContext();
|
||||
if (context == ServerContext.NO_CONTEXT || context.getGitRepository() == null ||
|
||||
!StringUtils.equalsIgnoreCase(context.getGitRepository().getRemoteUrl().replace(" ", "%20"), gitRemoteUrl)) {
|
||||
context = null;
|
||||
}
|
||||
|
||||
if (context == null) {
|
||||
// Manager didn't have a matching context, so create one
|
||||
final AuthenticationProvider authenticationProvider = getAuthenticationProvider(gitRemoteUrl);
|
||||
final AuthenticationInfo authenticationInfo = AuthHelper.getAuthenticationInfoSynchronously(authenticationProvider, gitRemoteUrl);
|
||||
if (authenticationInfo != null) {
|
||||
// Create a new context object and store it back in the manager
|
||||
context = createServerContext(gitRemoteUrl, authenticationInfo);
|
||||
}
|
||||
}
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -312,7 +308,8 @@ public class ServerContextManager {
|
|||
final CoreHttpClient coreClient = new CoreHttpClient(client, serverUri);
|
||||
collection = coreClient.getProjectCollection(parseResult.getCollectionName());
|
||||
} catch (Throwable throwable) {
|
||||
//TODO Log the failure
|
||||
logger.error("validate: failed");
|
||||
logger.warn("validate", throwable);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче