public void ValidOrganizationAndProjectUrlsAreParsedCorrectly(string organizationOrProjectUrl, string expectedOrgUrl, string expectedProjUrl) { var apu = AdoProjectUrls.ParseOrganizationAndProjectUrls(organizationOrProjectUrl); Assert.AreEqual(expectedOrgUrl, apu.OrganizationUrl); Assert.AreEqual(expectedProjUrl, apu.ProjectUrl); }
public static AzureDevOpsConnection?GetMostQualifiedConnection(this IAzureDevOpsConfigurationStore store, AdoProjectUrls adoProjectUrls) { var copyList = new List <AzureDevOpsConnection>(store.GetConnections().Select(connection => { if (connection.BaseUrl == null) { return(connection); } if (!connection.BaseUrl.EndsWith("/")) { connection.BaseUrl += "/"; } return(connection); })); copyList.Sort((connection1, connection2) => { if (connection1.BaseUrl == connection2.BaseUrl) { return(0); } if (connection1.BaseUrl?.Length > connection2.BaseUrl?.Length) { return(-1); } return(1); }); return(copyList.FirstOrDefault(connection => { if (connection.BaseUrl == null) { return false; } var baseUrl = new Uri(connection.BaseUrl, UriKind.Absolute); var url = adoProjectUrls.ProjectUrl ?? adoProjectUrls.OrganizationUrl; if (!url.EndsWith("/")) { url += "/"; } return baseUrl.IsBaseOf(new Uri(url, UriKind.Absolute)); })); }
public Task <IOctoResponseProvider> ExecuteAsync(IOctoRequest request) { var connectivityCheckResponse = new ConnectivityCheckResponse(); try { var requestData = request.GetBody(Data); var baseUrl = requestData.BaseUrl; // If PersonalAccessToken here is null, it could be that they're clicking the test connectivity button after saving // the configuration as we won't have the value of the PersonalAccessToken on client side, so we need to retrieve it // from the database var personalAccessToken = requestData.PersonalAccessToken.ToSensitiveString(); if (string.IsNullOrEmpty(personalAccessToken?.Value)) { personalAccessToken = configurationStore.GetConnections().FirstOrDefault(connection => connection.BaseUrl == baseUrl)?.PersonalAccessToken; } if (string.IsNullOrEmpty(baseUrl)) { connectivityCheckResponse.AddMessage(ConnectivityCheckMessageCategory.Error, "Please provide a value for Azure DevOps Base Url."); return(Task.FromResult(Result.Response(connectivityCheckResponse))); } var urls = AdoProjectUrls.ParseOrganizationAndProjectUrls(baseUrl); AdoProjectUrls[] projectUrls; if (urls.ProjectUrl != null) { projectUrls = new[] { urls }; } else { var projectsResult = adoApiClient.GetProjectList(urls, personalAccessToken?.Value); if (projectsResult is FailureResult failure) { connectivityCheckResponse.AddMessage(ConnectivityCheckMessageCategory.Error, failure.ErrorString); return(Task.FromResult(Result.Response(connectivityCheckResponse))); } var projects = (ISuccessResult <string[]>)projectsResult; if (!projects.Value.Any()) { connectivityCheckResponse.AddMessage(ConnectivityCheckMessageCategory.Error, "Successfully connected, but unable to find any projects to test permissions."); return(Task.FromResult(Result.Response(connectivityCheckResponse))); } projectUrls = projects.Value.Select(project => new AdoProjectUrls(urls.OrganizationUrl) { ProjectUrl = $"{urls.OrganizationUrl}/{project}" }).ToArray(); } var hasError = false; foreach (var projectUrl in projectUrls) { var buildScopeTest = adoApiClient.CheckWeCanGetBuilds(projectUrl, personalAccessToken?.Value); if (buildScopeTest is FailureResult buildScopeFailure) { connectivityCheckResponse.AddMessage(ConnectivityCheckMessageCategory.Error, buildScopeFailure.ErrorString); hasError = true; } } if (!hasError) { connectivityCheckResponse.AddMessage(ConnectivityCheckMessageCategory.Info, "Successfully connected to Azure DevOps"); if (!configurationStore.GetIsEnabled()) { connectivityCheckResponse.AddMessage(ConnectivityCheckMessageCategory.Warning, "The Jira Issue Tracker is not enabled, so its functionality will not currently be available"); } } return(Task.FromResult(Result.Response(connectivityCheckResponse))); } catch (Exception ex) { connectivityCheckResponse.AddMessage(ConnectivityCheckMessageCategory.Error, ex.ToString()); return(Task.FromResult(Result.Response(connectivityCheckResponse))); } }