public virtual ActionResult SubmitPackageTestResults(string apiKey, string id, string version, bool success, string resultDetailsUrl) { Guid parsedApiKey; if (!Guid.TryParse(apiKey, out parsedApiKey)) { return(new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, Strings.InvalidApiKey)); } var testReporterUser = userSvc.FindByApiKey(parsedApiKey); if (testReporterUser == null) { return(new HttpStatusCodeWithBodyResult(HttpStatusCode.Forbidden, String.Format(CultureInfo.CurrentCulture, Strings.ApiKeyNotAuthorized, "submittestresults"))); } // Only the package operations user can submit test results if (testReporterUser.Key != settings.PackageOperationsUserKey) { return(new HttpStatusCodeWithBodyResult(HttpStatusCode.Forbidden, String.Format(CultureInfo.CurrentCulture, Strings.ApiKeyNotAuthorized, "submittestresults"))); } if (String.IsNullOrEmpty(id) || String.IsNullOrEmpty(version)) { return(new HttpStatusCodeWithBodyResult(HttpStatusCode.NotFound, string.Format(CultureInfo.CurrentCulture, Strings.PackageWithIdAndVersionNotFound, id, version))); } if (string.IsNullOrWhiteSpace(resultDetailsUrl)) { return(new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, "Submitting test results requires 'resultDetailsUrl' and 'success'.")); } try { var tempUri = new Uri(resultDetailsUrl); } catch (Exception) { return(new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, "Submitting test results requires 'resultDetailsUrl' to be a Url.")); } var package = packageSvc.FindPackageByIdAndVersion(id, version, allowPrerelease: true, useCache: false); if (package == null) { return(new HttpStatusCodeWithBodyResult(HttpStatusCode.NotFound, string.Format(CultureInfo.CurrentCulture, Strings.PackageWithIdAndVersionNotFound, id, version))); } packageSvc.ChangePackageTestStatus(package, success, resultDetailsUrl, testReporterUser); return(new HttpStatusCodeWithBodyResult(HttpStatusCode.Accepted, "Package test results have been updated.")); }