Пример #1
0
        public EmailViewModel(EmailOptions emailOptions, INotifyModelChangedEventPublisher eventPublisher, IShellExecuteProvider shellExecuteProvider, IProtectedSecretProvider secretProvider, AdminNotificationOptions adminNotificationOptions)
        {
            this.shellExecuteProvider     = shellExecuteProvider;
            this.secretProvider           = secretProvider;
            this.adminNotificationOptions = adminNotificationOptions;
            this.emailOptions             = emailOptions;

            this.DisplayName = "Email";
            eventPublisher.Register(this);
        }
Пример #2
0
        public async Task Execute(IJobExecutionContext context)
        {
            try
            {
                AdminNotificationOptions emailOptions = this.adminNotificationOptions.CurrentValue;

                if (!emailOptions.EnableNewVersionAlerts || string.IsNullOrWhiteSpace(emailOptions.AdminAlertRecipients))
                {
                    return;
                }

                if (!this.smtpProvider.IsConfigured)
                {
                    return;
                }

                var versionInfo = await this.appUpgradeProvider.GetVersionInfo();

                if (versionInfo.Status != VersionInfoStatus.UpdateAvailable)
                {
                    return;
                }

                if (this.registryProvider.LastNotifiedVersion == versionInfo.AvailableVersion.ToString())
                {
                    return;
                }

                this.registryProvider.LastNotifiedVersion = versionInfo.AvailableVersion.ToString();

                this.Send(versionInfo, emailOptions.AdminAlertRecipients);
            }
            catch (Exception ex)
            {
                logger.LogWarning(EventIDs.NewVersionCheckJobFailed, ex, "Could not get version update");
            }
        }
Пример #3
0
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                AdminNotificationOptions emailOptions = this.adminNotificationOptions.CurrentValue;

                if (!emailOptions.EnableCertificateExpiryAlerts || string.IsNullOrWhiteSpace(emailOptions.AdminAlertRecipients))
                {
                    return(Task.CompletedTask);
                }

                if (!this.smtpProvider.IsConfigured)
                {
                    return(Task.CompletedTask);
                }

                var cert = this.httpSysConfigProvider.GetCertificate();

                if (cert == null)
                {
                    return(Task.CompletedTask);
                }

                bool hasExpired    = DateTime.Now > cert.NotAfter;
                int  daysRemaining = (int)Math.Ceiling(cert.NotAfter.Subtract(DateTime.Now).TotalDays);

                if (daysRemaining > 30)
                {
                    return(Task.CompletedTask);
                }

                string durationKey;

                if (daysRemaining <= 0)
                {
                    durationKey = "0";
                }
                else if (daysRemaining <= 1)
                {
                    durationKey = "1";
                }
                else if (daysRemaining <= 7)
                {
                    durationKey = "7";
                }
                else
                {
                    durationKey = "30";
                }

                string certKey = $"{cert.Thumbprint}-{durationKey}".ToLower();

                if (this.registryProvider.LastNotifiedCertificateKey == certKey)
                {
                    return(Task.CompletedTask);
                }

                this.registryProvider.LastNotifiedCertificateKey = certKey;

                this.Send(cert, emailOptions.AdminAlertRecipients, hasExpired, daysRemaining);
            }
            catch (Exception ex)
            {
                logger.LogWarning(EventIDs.CertificateExpiryCheckJobFailed, ex, "Certificate expiry check failed");
            }

            return(Task.CompletedTask);
        }