|
22 | 22 | using NuGetGallery.Auditing; |
23 | 23 | using NuGetGallery.Configuration; |
24 | 24 | using NuGetGallery.Diagnostics; |
| 25 | +using NuGetGallery.Extensions; |
25 | 26 | using NuGetGallery.Filters; |
26 | 27 | using NuGetGallery.Helpers; |
27 | 28 | using NuGetGallery.Infrastructure.Lucene; |
@@ -1276,6 +1277,60 @@ public virtual async Task<ActionResult> Revalidate(string id, string version) |
1276 | 1277 | return SafeRedirect(Url.Package(id, version)); |
1277 | 1278 | } |
1278 | 1279 |
|
| 1280 | + |
| 1281 | + [UIAuthorize(Roles = "Admins")] |
| 1282 | + [RequiresAccountConfirmation("revalidate a symbols package")] |
| 1283 | + public virtual async Task<ActionResult> RevalidateSymbols(string id, string version) |
| 1284 | + { |
| 1285 | + var package = _packageService.FindPackageByIdAndVersion(id, version); |
| 1286 | + |
| 1287 | + if (package == null) |
| 1288 | + { |
| 1289 | + return new HttpStatusCodeResult(HttpStatusCode.NotFound, |
| 1290 | + string.Format(Strings.PackageWithIdAndVersionNotFound, id, version)); |
| 1291 | + } |
| 1292 | + |
| 1293 | + try |
| 1294 | + { |
| 1295 | + // Select the latest symbols package for re-validation only if it is |
| 1296 | + // 1. Available |
| 1297 | + // 2. Or Pending validations |
| 1298 | + // 2. Or Failed Validations |
| 1299 | + var latestSymbolPackage = package.LatestSymbolPackage(); |
| 1300 | + if (latestSymbolPackage == null) |
| 1301 | + { |
| 1302 | + return new HttpStatusCodeResult(HttpStatusCode.BadRequest, |
| 1303 | + string.Format(Strings.SymbolsPackage_PackageNotAvailable, id, version)); |
| 1304 | + } |
| 1305 | + |
| 1306 | + switch (latestSymbolPackage.StatusKey) |
| 1307 | + { |
| 1308 | + case PackageStatus.Available: |
| 1309 | + case PackageStatus.Validating: |
| 1310 | + case PackageStatus.FailedValidation: |
| 1311 | + // Allowed to revalidate |
| 1312 | + break; |
| 1313 | + case PackageStatus.Deleted: |
| 1314 | + return new HttpStatusCodeResult(HttpStatusCode.BadRequest, |
| 1315 | + string.Format(Strings.SymbolsPackage_RevalidateDeletedPackage, id, version)); |
| 1316 | + default: |
| 1317 | + return new HttpStatusCodeResult(HttpStatusCode.BadRequest, $"Unkown Package status {latestSymbolPackage.StatusKey}!"); |
| 1318 | + } |
| 1319 | + |
| 1320 | + await _validationService.RevalidateAsync(latestSymbolPackage); |
| 1321 | + |
| 1322 | + TempData["Message"] = "The symbols package is being revalidated."; |
| 1323 | + } |
| 1324 | + catch (Exception ex) |
| 1325 | + { |
| 1326 | + ex.Log(); |
| 1327 | + |
| 1328 | + TempData["Message"] = $"An error occurred while revalidating the symbols package. {ex.Message}"; |
| 1329 | + } |
| 1330 | + |
| 1331 | + return SafeRedirect(Url.Package(id, version)); |
| 1332 | + } |
| 1333 | + |
1279 | 1334 | [UIAuthorize(Roles = "Admins")] |
1280 | 1335 | [HttpPost] |
1281 | 1336 | [RequiresAccountConfirmation("delete a package")] |
|
0 commit comments