public async Task <MonitorDto> Handle(Command request, CancellationToken cancellationToken) { var certificate = _certificateParser.GetCertificate(request.DomainName, request.Port); var user = await _context.Users .SingleOrDefaultAsync(x => x.UserName.Equals(_userAccessor.GetCurrentUsername())); var monitor = new Monitor { User = user, DisplayName = request.DisplayName, DomainName = request.DomainName, Port = request.Port, CreationDate = DateTime.Now, Certificate = certificate, AutoRenewalEnabled = false, LastCheckDate = DateTime.Now }; _context.Monitors.Add(monitor); var success = await _context.SaveChangesAsync() > 0; if (success) { return(_mapper.Map <Monitor, MonitorDto>(monitor)); } throw new RestException(HttpStatusCode.InternalServerError, ErrorType.SavingChangesError); }
public async Task Check(Guid monitorId) { try { var monitor = await _context.Monitors.Include(m => m.Certificate) .FirstOrDefaultAsync(m => m.Id == monitorId); if (monitor == null) { return; // Probably, the monitor had been deleted before we started its check } var user = await _context.Users.FindAsync(monitor.UserId); monitor.LastCheckDate = DateTime.Now; var certificate = _certificateParser.GetCertificate(monitor.DomainName, monitor.Port); if (!certificate.SerialNumber.Equals(monitor.Certificate.SerialNumber)) { monitor.Certificate = certificate; _logger.LogInformation($"Sending unexpected certificate change email for {monitor.Id}"); if (user.NotifyAboutCertificateChange) { _emailSender.Send(user.NotificationsEmail, "Unexpected certificate change", BodyBuilder.BuildEmailBody(EmailType.CertificateChanged, monitor, user)); } } if (Math.Abs((DateTime.Now - certificate.ValidTo).TotalDays) <= user.ExpiryNotificationThresholdDays) { if (!user.NotifyAboutExpiryIfRenewalConfigured && monitor.RenewalScript != null) { return; } _logger.LogInformation($"Sending certificate expiry email for {monitor.Id}"); _emailSender.Send(user.NotificationsEmail, "Certificate expiry", BodyBuilder.BuildEmailBody(EmailType.CertificateIsAboutToExpire, monitor, user)); } if (monitor.RenewalScript != null && !monitor.IsInRenewalQueue && Math.Abs((DateTime.Now - certificate.ValidTo).TotalDays) <= user.RenewalThresholdDays ) { monitor.IsInRenewalQueue = true; var monitorRenewer = new MonitorRenewer(_context, _jobClient, this, _monitorRenewerLogger); monitorRenewer.EnqueueRenewal(monitor); } var success = await _context.SaveChangesAsync() > 0; if (!success) { throw new Exception("Error saving changes"); } } catch (Exception e) { _logger.LogError("Error checking a monitor.\n" + e.Message); } }