public async Task Handle(ProjectServiceTemplateCreatedEvent @event)
        {
            CreateOrganizationRepositoryOptions createOrganizationRepositoryOptions = new CreateOrganizationRepositoryOptions();

            createOrganizationRepositoryOptions.VSTSAccessId              = _vstsOptions.Value.AccessId;
            createOrganizationRepositoryOptions.VSTSAccessSecret          = _vstsOptions.Value.AccessSecret;
            createOrganizationRepositoryOptions.VSTSRepositoryTemplateUrl = @event.SourceTemplateUrl;

            createOrganizationRepositoryOptions.TemplateAccess         = @event.TemplateAccess;
            createOrganizationRepositoryOptions.NeedCredentials        = @event.NeedCredentials;
            createOrganizationRepositoryOptions.RepositoryCMSType      = @event.RepositoryCMSType;
            createOrganizationRepositoryOptions.RepositoryAccessId     = @event.RepositoryAccessId;
            createOrganizationRepositoryOptions.RepositoryAccessSecret = @event.RepositoryAccessSecret;
            createOrganizationRepositoryOptions.RepositoryAccessToken  = @event.RepositoryAccessToken;
            createOrganizationRepositoryOptions.RepositoryUrl          = @event.RepositoryUrl;
            createOrganizationRepositoryOptions.Branch = @"refs/heads/master";

            await _pipelineSpaceManagerService.CreateOrganizationRepository(createOrganizationRepositoryOptions);

            var oAuthToken = _httpClientWrapperService.GetTokenFromClientCredentials($"{_applicationOptions.Value.Url}/connect/token", _applicationOptions.Value.ClientId, _applicationOptions.Value.ClientSecret, _applicationOptions.Value.Scope).GetAwaiter().GetResult();

            var InternalAuthCredentials = new HttpClientWrapperAuthorizationModel();

            InternalAuthCredentials.Schema = "Bearer";
            InternalAuthCredentials.Value  = oAuthToken.access_token;

            string projectActivateUrl      = $"{_applicationOptions.Value.Url}/internalapi/organizations/{@event.OrganizationId}/servicetemplates/{@event.ProjectServiceTemplateId}/activate";
            var    projectActivateResponse = await _httpClientWrapperService.PatchAsync(projectActivateUrl, new { }, InternalAuthCredentials);

            projectActivateResponse.EnsureSuccessStatusCode();
        }
        public async Task DeleteRepository(ProjectServiceDeletedEvent @event)
        {
            HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();

            authCredentials.Schema = "Bearer";
            authCredentials.Value  = @event.CMSAccessToken;

            string deleteRepositoryUrl      = $"https://api.github.com/repos/{@event.CMSAccountName}/{@event.ServiceName}";
            var    deleteRepositoryResponse = await _httpClientWrapperService.DeleteAsync(deleteRepositoryUrl, authCredentials, Headers);

            deleteRepositoryResponse.EnsureSuccessStatusCode();
        }
示例#3
0
        public async Task CreateProject(ProjectCreatedEvent @event, ApplicationOptions applicationOptions)
        {
            string accountUrl = $"https://{@event.CMSAccountName}.visualstudio.com";

            int index = 0;

            while (true)
            {
                HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();
                authCredentials.Schema = "Basic";
                authCredentials.Value  = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", @event.CMSAccessSecret)));

                string projectUrl      = $"{accountUrl}/_apis/projects?api-version={_vstsOptions.Value.ApiVersion}";
                var    projectResponse = await _httpClientWrapperService.GetAsync(projectUrl, authCredentials);

                projectResponse.EnsureSuccessStatusCode();

                var projects = await projectResponse.MapTo <CMSVSTSProjectListModel>();

                var project = projects.Items.FirstOrDefault(x => x.Name.Equals(@event.ProjectName, StringComparison.InvariantCultureIgnoreCase));
                if (project != null)
                {
                    var oAuthToken = await _httpClientWrapperService.GetTokenFromClientCredentials($"{applicationOptions.Url}/connect/token", applicationOptions.ClientId, applicationOptions.ClientSecret, applicationOptions.Scope);

                    HttpClientWrapperAuthorizationModel internalAuthCredentials = new HttpClientWrapperAuthorizationModel();
                    internalAuthCredentials.Schema = "Bearer";
                    internalAuthCredentials.Value  = oAuthToken.access_token;

                    //Patch Project External Id
                    string projectPatchUrl      = $"{applicationOptions.Url}/internalapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}";
                    var    projectPatchResponse = await _httpClientWrapperService.PatchAsync(projectPatchUrl, new {
                        ProjectExternalId   = project.Id,
                        ProjectExternalName = project.Name
                    }, internalAuthCredentials);

                    projectPatchResponse.EnsureSuccessStatusCode();

                    break;
                }
                else
                {
                    index++;
                    //this means after 20 seconds it didn't create the project
                    if (index == 6)
                    {
                        throw new Exception($"After 20 seconds it could be possible to retreive the external project id: Ref: {@event.ProjectId} - {@event.ProjectName}");
                    }

                    Thread.Sleep(TimeSpan.FromSeconds(5));
                }
            }
        }
示例#4
0
        public async Task DeleteProject(ProjectDeletedEvent @event)
        {
            string accountUrl = $"https://{@event.CMSAccountName}.visualstudio.com";

            HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();

            authCredentials.Schema = "Basic";
            authCredentials.Value  = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", @event.CMSAccessSecret)));

            string projectUrl      = $"{accountUrl}/_apis/projects/{@event.ProjectExternalId}?api-version={_vstsOptions.Value.ApiVersion}";
            var    projectResponse = await _httpClientWrapperService.DeleteAsync(projectUrl, authCredentials);

            projectResponse.EnsureSuccessStatusCode();
        }
        public BaseHandler(IHttpClientWrapperService httpClientWrapperService,
                           IOptions <ApplicationOptions> applicationOptions,
                           IRealtimeService realtimeService)
        {
            _httpClientWrapperService = httpClientWrapperService;
            _applicationOptions       = applicationOptions;
            this._realtimeService     = realtimeService;

            var oAuthToken = _httpClientWrapperService.GetTokenFromClientCredentials($"{_applicationOptions.Value.Url}/connect/token", _applicationOptions.Value.ClientId, _applicationOptions.Value.ClientSecret, _applicationOptions.Value.Scope).GetAwaiter().GetResult();

            InternalAuthCredentials        = new HttpClientWrapperAuthorizationModel();
            InternalAuthCredentials.Schema = "Bearer";
            InternalAuthCredentials.Value  = oAuthToken.access_token;
        }
        public async Task DeleteProject(ProjectDeletedEvent @event)
        {
            //Begin: check data **********
            @event.CMSAccountName  = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId;
            @event.CMSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret;

            string cmsProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalId : @event.ProjectVSTSFakeId;
            //End: check data **********

            string accountUrl = $"https://{@event.CMSAccountName}.visualstudio.com";

            HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();

            authCredentials.Schema = "Basic";
            authCredentials.Value  = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", @event.CMSAccessSecret)));

            string projectUrl      = $"{accountUrl}/_apis/projects/{cmsProjectId}?api-version={_fakeAccountOptions.Value.ApiVersion}";
            var    projectResponse = await _httpClientWrapperService.DeleteAsync(projectUrl, authCredentials);

            projectResponse.EnsureSuccessStatusCode();
        }
示例#7
0
        public async Task DeleteProject(ProjectDeletedEvent @event)
        {
            //Begin: check data **********
            @event.CMSAccountName  = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId;
            @event.CMSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret;

            string cmsProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalId : @event.ProjectVSTSFakeId;
            //End: check data **********

            string accountUrl = $"https://{@event.CMSAccountName}.visualstudio.com";

            HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();

            authCredentials.Schema = "Basic";
            authCredentials.Value  = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", @event.CMSAccessSecret)));

            string projectUrl      = $"{accountUrl}/_apis/projects/{cmsProjectId}?api-version={_fakeAccountOptions.Value.ApiVersion}";
            var    projectResponse = await _httpClientWrapperService.DeleteAsync(projectUrl, authCredentials);

            projectResponse.EnsureSuccessStatusCode();

            // Delete from Bitbucket

            var client = new HttpClient();

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", @event.CMSAccountId, @event.CMSAccessToken))));
            client.BaseAddress = new Uri(API_URL);

            var response = await client.GetAsync($"/{API_VERSION}/teams?role=admin");

            var teamResult = await response.MapTo <CMSBitBucketTeamListModel>();

            var defaultTeam = teamResult.Teams.FirstOrDefault(c => c.TeamId.Equals(@event.OrganizationExternalId));

            response = await client.DeleteAsync($"/{API_VERSION}/teams/{defaultTeam.UserName}/projects/{@event.ProjectExternalId}");

            response.EnsureSuccessStatusCode();
        }
示例#8
0
        public async Task CompleteProjectFeature(ProjectFeatureCompletedEvent @event)
        {
            string accountUrl = $"https://{@event.CMSAccountName}.visualstudio.com";

            foreach (var item in @event.Services)
            {
                /*Delete Infrastructure*/
                if (@event.DeleteInfrastructure)
                {
                    CPSAuthModel authModel = new CPSAuthModel();
                    authModel.AccessId        = @event.CPSAccessId;
                    authModel.AccessName      = @event.CPSAccessName;
                    authModel.AccessSecret    = @event.CPSAccessSecret;
                    authModel.AccessRegion    = @event.CPSAccessRegion;
                    authModel.AccessAppId     = @event.CPSAccessAppId;
                    authModel.AccessAppSecret = @event.CPSAccessAppSecret;
                    authModel.AccessDirectory = @event.CPSAccessDirectory;

                    string cloudServiceName = $"{@event.OrganizationName}{@event.ProjectName}{item.ServiceName}development{@event.FeatureName}".ToLower();
                    await _cpsService(@event.CPSType).DeleteService(cloudServiceName, authModel);
                }

                HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();
                authCredentials.Schema = "Basic";
                authCredentials.Value  = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", @event.CMSAccessSecret)));

                CMSVSTSPullRequestCreateModel pullRequestModel = new CMSVSTSPullRequestCreateModel();
                pullRequestModel.SourceRefName = $"refs/heads/{@event.FeatureName.ToLower()}";
                pullRequestModel.TargetRefName = "refs/heads/master";
                pullRequestModel.Title         = $"feature {@event.FeatureName}";
                pullRequestModel.Description   = $"The feature {@event.FeatureName} requests merge operation";

                string pullRequestUrl      = $"{accountUrl}/{@event.ProjectExternalId}/_apis/git/repositories/{item.ServiceExternalId}/pullrequests?api-version={_vstsOptions.Value.ApiVersion}";
                var    pullRequestResponse = await _httpClientWrapperService.PostAsync(pullRequestUrl, pullRequestModel, authCredentials);

                pullRequestResponse.EnsureSuccessStatusCode();
            }
        }
示例#9
0
        public async Task CompleteProjectFeature(ProjectFeatureCompletedEvent @event)
        {
            foreach (var item in @event.Services)
            {
                /*Delete Infrastructure*/
                if (@event.DeleteInfrastructure)
                {
                    CPSAuthModel authModel = new CPSAuthModel();
                    authModel.AccessId        = @event.CPSAccessId;
                    authModel.AccessName      = @event.CPSAccessName;
                    authModel.AccessSecret    = @event.CPSAccessSecret;
                    authModel.AccessRegion    = @event.CPSAccessRegion;
                    authModel.AccessAppId     = @event.CPSAccessAppId;
                    authModel.AccessAppSecret = @event.CPSAccessAppSecret;
                    authModel.AccessDirectory = @event.CPSAccessDirectory;

                    string cloudServiceName = $"{@event.OrganizationName}{@event.ProjectName}{item.ServiceName}development{@event.FeatureName}".ToLower();
                    await _cpsService(@event.CPSType).DeleteService(cloudServiceName, authModel);
                }

                CMSGitHubPullRequestCreateModel pullRequestModel = new CMSGitHubPullRequestCreateModel();
                pullRequestModel.SourceRefName = $"{@event.FeatureName.ToLower()}";
                pullRequestModel.TargetRefName = "master";
                pullRequestModel.Title         = $"feature {@event.FeatureName}";
                pullRequestModel.Description   = $"The feature {@event.FeatureName} requests merge operation";

                HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();
                authCredentials.Schema = "Bearer";
                authCredentials.Value  = @event.CMSAccessToken;

                string pullRequestUrl      = $"https://api.github.com/repos/{@event.CMSAccountName}/{item.ServiceName}/pulls";
                var    pullRequestResponse = await _httpClientWrapperService.PostAsync(pullRequestUrl, pullRequestModel, authCredentials, headers : Headers);

                pullRequestResponse.EnsureSuccessStatusCode();
            }
        }
        public async Task NotifyProjectStatus(string userId, Guid organizationId, Guid projectId, string activityName, string status, HttpClientWrapperAuthorizationModel internalAuthCredentials)
        {
            string notificationUrl = $"{_applicationOptions.Value.Url}/internalapi/realtime/organizations/{organizationId}/projects/{projectId}/activities";

            var response = await _httpClientWrapperService.PostAsync(notificationUrl, new
            {
                userId       = userId,
                activityName = activityName,
                status       = status
            }, internalAuthCredentials);

            response.EnsureSuccessStatusCode();
        }
        public async Task Handle(ProjectImportedEvent @event)
        {
            this.userId = @event.UserId;
            string accountUrl     = string.Empty;
            string accountSecret  = string.Empty;
            string accountProject = string.Empty;

            if (@event.CMSType == ConfigurationManagementService.VSTS)
            {
                accountUrl     = $"https://{@event.CMSAccountName}.visualstudio.com";
                accountSecret  = @event.CMSAccessSecret;
                accountProject = @event.ProjectExternalName;
            }
            else
            {
                accountUrl     = $"https://{_vstsFakeOptions.Value.AccountId}.visualstudio.com";
                accountSecret  = _vstsFakeOptions.Value.AccessSecret;
                accountProject = @event.ProjectVSTSFake;
            }

            await ExecuteProjectActivity(@event.OrganizationId, @event.ProjectId, nameof(DomainConstants.Activities.PRCRBA), async() =>
            {
                await _projectHandlerService(@event.CMSType).ImportProject(@event, _applicationOptions.Value);
            });

            HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();

            authCredentials.Schema = "Basic";
            authCredentials.Value  = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", accountSecret)));

            //Extesions
            if (@event.CPSType == CloudProviderService.AWS)
            {
                if (@event.CMSType == ConfigurationManagementService.VSTS)
                {
                    await ExecuteProjectActivity(@event.OrganizationId, @event.ProjectId, nameof(DomainConstants.Activities.PREXBA), async() =>
                    {
                        string extensionUrl   = $"https://extmgmt.dev.azure.com/{@event.CMSAccountName}/_apis/extensionmanagement/installedextensionsbyname/AmazonWebServices/aws-vsts-tools?api-version=4.1-preview.1";
                        var extensionResponse = await _httpClientWrapperService.GetAsync(extensionUrl, authCredentials);
                        if (extensionResponse.StatusCode == System.Net.HttpStatusCode.NotFound)
                        {
                            extensionResponse = await _httpClientWrapperService.PostAsync(extensionUrl, new { }, authCredentials);
                            extensionResponse.EnsureSuccessStatusCode();
                        }
                    });
                }

                if (@event.CMSType == ConfigurationManagementService.GitHub)
                {
                    await ExecuteProjectActivity(@event.OrganizationId, @event.ProjectId, nameof(DomainConstants.Activities.PREXBA), async() =>
                    {
                        await Task.CompletedTask;
                    });
                }
            }

            if (@event.CPSType == CloudProviderService.Azure)
            {
                await ExecuteProjectActivity(@event.OrganizationId, @event.ProjectId, nameof(DomainConstants.Activities.PREXBO), async() =>
                {
                    string extensionUrl   = $"https://extmgmt.dev.azure.com/{@event.CMSAccountName}/_apis/extensionmanagement/installedextensionsbyname/keesschollaart/arm-outputs?api-version=4.1-preview.1";
                    var extensionResponse = await _httpClientWrapperService.GetAsync(extensionUrl, authCredentials);
                    if (extensionResponse.StatusCode == System.Net.HttpStatusCode.NotFound)
                    {
                        extensionResponse = await _httpClientWrapperService.PostAsync(extensionUrl, new { }, authCredentials);
                        extensionResponse.EnsureSuccessStatusCode();
                    }
                });
            }


            //Create Service Endpoint - Cloud
            //######################################################################################################################################################
            Guid serviceEndpointId = Guid.NewGuid();
            CMSVSTSServiceEndpointModel service = null;

            if (@event.CPSType == CloudProviderService.AWS)
            {
                service = CMSVSTSServiceEndpointModel.Factory.CreateAWSService(serviceEndpointId, $"{@event.ProjectName}AWS", @event.CPSAccessId, @event.CPSAccessSecret);
            }

            if (@event.CPSType == CloudProviderService.Azure)
            {
                service = CMSVSTSServiceEndpointModel.Factory.CreateAzureService(serviceEndpointId, $"{@event.ProjectName}Az", @event.CPSAccessId, @event.CPSAccessName, @event.CPSAccessAppId, @event.CPSAccessAppSecret, @event.CPSAccessDirectory);
            }

            string serviceEndpointUrl = string.Empty;
            HttpResponseMessage serviceEndpointResponse = null;
            string projectPatchUrl = string.Empty;
            HttpResponseMessage         projectPatchResponse = null;
            CMSVSTSServiceEndpointModel serviceEndpoint      = null;

            await ExecuteProjectActivity(@event.OrganizationId, @event.ProjectId, nameof(DomainConstants.Activities.PRCLEP), async() =>
            {
                serviceEndpointUrl      = $"{accountUrl}/{accountProject}/_apis/serviceendpoint/endpoints?api-version={_vstsOptions.Value.ApiVersion}-preview";
                serviceEndpointResponse = await _httpClientWrapperService.PostAsync(serviceEndpointUrl, service, authCredentials);
                serviceEndpointResponse.EnsureSuccessStatusCode();

                serviceEndpoint = await serviceEndpointResponse.MapTo <CMSVSTSServiceEndpointModel>();

                //Patch External Endpoint Id
                projectPatchUrl      = $"{_applicationOptions.Value.Url}/internalapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}";
                projectPatchResponse = await _httpClientWrapperService.PatchAsync(projectPatchUrl, new { ProjectExternalEndpointId = serviceEndpoint.Id.ToString() }, InternalAuthCredentials);
                projectPatchResponse.EnsureSuccessStatusCode();
            });

            //Create Service Endpoint - Git
            //######################################################################################################################################################

            await ExecuteProjectActivity(@event.OrganizationId, @event.ProjectId, nameof(DomainConstants.Activities.PRGTEP), async() =>
            {
                if (@event.CMSType == ConfigurationManagementService.GitHub)
                {
                    var serviceConnectionModel = new
                    {
                        id            = Guid.NewGuid(),
                        name          = $"{@event.ProjectName}GitHub",
                        description   = "PipelineSpaceGitHub",
                        authorization = new
                        {
                            parameters = new
                            {
                                accessToken = @event.CMSAccessToken
                            },
                            scheme = "PersonalAccessToken",
                        },
                        type = "github",
                        url  = "https://api.github.com"
                    };

                    serviceEndpointUrl      = $"{accountUrl}/{accountProject}/_apis/serviceendpoint/endpoints?api-version={_vstsOptions.Value.ApiVersion}-preview";
                    serviceEndpointResponse = await _httpClientWrapperService.PostAsync(serviceEndpointUrl, serviceConnectionModel, authCredentials);
                    serviceEndpointResponse.EnsureSuccessStatusCode();

                    serviceEndpoint = await serviceEndpointResponse.MapTo <CMSVSTSServiceEndpointModel>();

                    //Patch External Git Endpoint Id
                    projectPatchUrl      = $"{_applicationOptions.Value.Url}/internalapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}";
                    projectPatchResponse = await _httpClientWrapperService.PatchAsync(projectPatchUrl, new { ProjectExternalGitEndpoint = serviceEndpoint.Id.ToString() }, InternalAuthCredentials);
                    projectPatchResponse.EnsureSuccessStatusCode();
                }

                if (@event.CMSType == ConfigurationManagementService.Bitbucket)
                {
                    // Create External Connection.
                    var serviceConnectionModel = new
                    {
                        id            = Guid.NewGuid(),
                        name          = $"{@event.ProjectName}BitBucket",
                        description   = "PipelineSpaceBitBucket",
                        authorization = new
                        {
                            parameters = new
                            {
                                username = @event.CMSAccessId,
                                password = @event.CMSAccessSecret
                            },
                            scheme = "UsernamePassword",
                        },
                        type = "bitbucket",
                        url  = "https://api.bitbucket.org"
                    };

                    serviceEndpointUrl      = $"{accountUrl}/{accountProject}/_apis/serviceendpoint/endpoints?api-version={_vstsOptions.Value.ApiVersion}-preview";
                    serviceEndpointResponse = await _httpClientWrapperService.PostAsync(serviceEndpointUrl, serviceConnectionModel, authCredentials);
                    serviceEndpointResponse.EnsureSuccessStatusCode();

                    serviceEndpoint = await serviceEndpointResponse.MapTo <CMSVSTSServiceEndpointModel>();

                    //Patch External Git Endpoint Id
                    projectPatchUrl      = $"{_applicationOptions.Value.Url}/internalapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}";
                    projectPatchResponse = await _httpClientWrapperService.PatchAsync(projectPatchUrl, new { ProjectExternalGitEndpoint = serviceEndpoint.Id.ToString() }, InternalAuthCredentials);
                    projectPatchResponse.EnsureSuccessStatusCode();
                }
            });

            //Activate Project External Id
            await ExecuteProjectActivity(@event.OrganizationId, @event.ProjectId, nameof(DomainConstants.Activities.PRACBA), async() =>
            {
                string projectActivateUrl   = $"{_applicationOptions.Value.Url}/internalapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}/activate";
                var projectActivateResponse = await _httpClientWrapperService.PatchAsync(projectActivateUrl, new { }, InternalAuthCredentials);
                projectActivateResponse.EnsureSuccessStatusCode();
            });

            //Import Services From Git
            if (@event.ProjectRepository != null && @event.ProjectRepository.Repositories != null && @event.ProjectRepository.Repositories.Count > 0)
            {
                await ExecuteProjectActivity(@event.OrganizationId, @event.ProjectId, nameof(DomainConstants.Activities.PRSTIR), async() =>
                {
                    foreach (var item in @event.ProjectRepository.Repositories)
                    {
                        string projecServicePostUrl   = $"{_applicationOptions.Value.Url}/internalapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}/services/imports";
                        var projecServicePostResponse = await _httpClientWrapperService.PostAsync(projecServicePostUrl,
                                                                                                  new
                        {
                            ServiceExternalId   = item.Id,
                            ServiceExternalUrl  = item.Link,
                            ServiceExternalName = item.ExternalName,
                            Name                     = item.Name,
                            Description              = item.Name,
                            BranchName               = item.BranchName,
                            UserId                   = @event.UserId,
                            OrganizationCMSId        = @event.OrganizationCMSId,
                            BuildDefinitionYML       = @event.BuildDefinitionYML,
                            ProjectServiceTemplateId = @event.ProjectServiceTemplateId,
                            ProjectExternalId        = @event.ProjectExternalId,
                            ProjectExternalName      = @event.ProjectExternalName
                        }, InternalAuthCredentials);
                        projecServicePostResponse.EnsureSuccessStatusCode();
                    }
                });
            }
        }
示例#12
0
        private async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpClientWrapperAuthorizationModel authCredentials, Dictionary <string, string> headers)
        {
            try
            {
                if (authCredentials != null)
                {
                    request.Headers.Authorization = new AuthenticationHeaderValue(authCredentials.Schema, authCredentials.Value);
                }

                if (headers != null)
                {
                    foreach (var item in headers)
                    {
                        request.Headers.Add(item.Key, (string)item.Value);
                    }
                }

                var startTime = DateTime.UtcNow;
                var timer     = System.Diagnostics.Stopwatch.StartNew();

                var response = await _httpClientFactory.CreateClient("RemoteServerFromWorker").SendAsync(request);

                timer.Stop();

                TelemetryClientManager.Instance.TrackDependency(new DependencyTelemetry()
                {
                    Type      = "HTTP",
                    Data      = $"Call {request.RequestUri.AbsolutePath}",
                    Timestamp = DateTime.UtcNow,
                    Duration  = timer.Elapsed,
                    Success   = response.IsSuccessStatusCode,
                    Name      = $"Call {request.RequestUri.AbsolutePath}",
                    Target    = request.RequestUri.Host
                });

                return(response);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#13
0
 public async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpClientWrapperAuthorizationModel authCredentials)
 {
     return(await SendAsync(request, authCredentials, null));
 }
示例#14
0
        public async Task <HttpResponseMessage> PutAsync <T>(string resource, T model, HttpClientWrapperAuthorizationModel authCredentials, Dictionary <string, string> headers = null)
        {
            var request = new HttpRequestMessage(HttpMethod.Put, resource);

            request.Content = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");

            return(await this.SendAsync(request, authCredentials, headers));
        }
示例#15
0
        public async Task <HttpResponseMessage> GetAsync(string resource, HttpClientWrapperAuthorizationModel authCredentials, Dictionary <string, string> headers = null, bool cache = false, double cacheExpiration = 60)
        {
            var request = new HttpRequestMessage(HttpMethod.Get, resource);

            return(await this.SendAsync(request, authCredentials, headers));
        }
示例#16
0
        public async Task <HttpResponseMessage> DeleteAsync(string resource, HttpClientWrapperAuthorizationModel authCredentials, Dictionary <string, string> headers = null)
        {
            var request = new HttpRequestMessage(HttpMethod.Delete, resource);

            return(await this.SendAsync(request, authCredentials, headers));
        }