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();
        }
Exemple #2
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));
                }
            }
        }
        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;
        }