public async Task <IActionResult> OnPostAsync(long id, string action, string key) { AcmeCertificate = await _context.AcmeCertificates .Include(a => a.AcmeAccount) .ThenInclude(a => a.Key) .Include(a => a.AcmeOrders) .ThenInclude(o => o.DomainCertificate) .FirstOrDefaultAsync(m => m.AcmeCertificateId == id); if (AcmeCertificate == null) { return(NotFound()); } switch (action.ToLower()) { case "keychange": switch (key) { case "apikey1": AcmeCertificate.ApiKey1 = ApiKeyGenerator.CreateApiKey(); break; case "apikey2": AcmeCertificate.ApiKey2 = ApiKeyGenerator.CreateApiKey(); break; } await _context.SaveChangesAsync(); break; case "ocspcheck": try { var order = AcmeCertificate.GetLatestValidAcmeOrder(); if (order?.Certificate != null) { var client = new OcspClient(); var status = client.GetOcspStatus(order.Certificate); OcspStatus = status.ToString(); } else { OcspStatus = "No certificate"; } } catch (Exception e) { _logger.LogWarning($"Error obtaining OCSP status:{e.Message}"); OcspStatus = "Error"; } break; case "revoke": { var order = AcmeCertificate.GetLatestValidAcmeOrder(); if (order?.RawDataPem != null) { _certesAcmeProvider.Initialize(AcmeCertificate); var cert = new Certes.Acme.CertificateChain(order.RawDataPem); var reason = (RevocationReason)Enum.Parse(typeof(RevocationReason), RevocationReason, true); await _certesAcmeProvider.Revoke(cert.Certificate.ToDer(), reason); StatusMessage = "Certificate revocation submitted"; } break; } } return(Page()); }