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); } }
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)); }