示例#1
0
        private async Task <List <PackageDependency> > GetDependencies(RepositoryConfig repo)
        {
            var url = string.Format(
                BitbucketUrlTemplate,
                repo.TeamName,
                repo.RepoSlug,
                repo.Branch,
                repo.ProjectFile);

            var request  = new HttpRequestMessage(HttpMethod.Get, url);
            var password = Crypto.DecryptString(repo.Password, SquidConfig.CryptoKey);
            var auth     = Base64.ToBase64(Encoding.UTF8, $"{repo.Username}:{password}");

            request.Headers.Add("Authorization", $"Basic {auth}");

            var response = await _client.SendAsync(request);

            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();

                XDocument projectFile = XDocument.Parse(content);
                List <PackageDependency> dependencies = projectFile.Root
                                                        .Elements("ItemGroup")
                                                        .Elements("PackageReference")
                                                        .Select(x => new PackageDependency
                {
                    PackageId = (string)x.Attribute("Include"),
                    Version   = (string)x.Attribute("Version")
                })
                                                        .Where(x => !string.IsNullOrWhiteSpace(x.PackageId) && !string.IsNullOrWhiteSpace(x.Version))
                                                        .ToList <PackageDependency>();

                if (!repo.Valid)
                {
                    repo.ErrorMessage = null;
                    repo.Valid        = true;

                    await _repo.Update(repo);
                }

                return(dependencies);
            }
            else
            {
                var content = await response.Content.ReadAsStringAsync();

                repo.ErrorMessage = content;
                repo.Valid        = false;

                await _repo.Update(repo);

                return(null);
            }
        }
示例#2
0
        public async Task <IActionResult> Put(string id, [FromBody] RepositoryConfigFormModel model)
        {
            if (model == null)
            {
                return(BadRequest("Model invalid"));
            }

            var repo = await _repo.Get(id);

            if (repo == null)
            {
                return(NotFound());
            }

            repo.Name         = model.Name;
            repo.Branch       = model.Branch;
            repo.RepoSlug     = model.RepoSlug;
            repo.ProjectFile  = model.ProjectFile;
            repo.Password     = Crypto.EncryptString(model.Password, SquidConfig.CryptoKey);
            repo.Valid        = false;
            repo.ErrorMessage = "Validation pending...";

            await _repo.Update(repo);

            var returnModel = _mapper.Map <RepositoryConfigModel>(repo);

            return(Ok(returnModel));
        }