From 8b7bf65c155231d45b9beb8a426dacf2319b1964 Mon Sep 17 00:00:00 2001 From: Alex Russell Date: Sat, 8 Apr 2023 11:18:36 -0600 Subject: [PATCH] Add Cron Next Time Validation The cron job can't be created if the year is more than 100 years in the future. Getting the next valid time will return null if this is the case. * add next cron validation to api * add next cron validation to job settings page --- src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs | 6 ++++-- src/Ombi/Controllers/V1/SettingsController.cs | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs b/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs index b80943cc5..177531ce4 100644 --- a/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs +++ b/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs @@ -1,4 +1,4 @@ -using Ombi.Helpers; +using Ombi.Helpers; using Quartz; namespace Ombi.Settings.Settings.Models @@ -104,7 +104,9 @@ namespace Ombi.Settings.Settings.Models private static string ValidateCron(string cron) { - if (CronExpression.IsValidExpression(cron)) + CronExpression expression = new CronExpression(cron); + DateTimeOffset? nextFireUTCTime = expression.GetNextValidTimeAfter(DateTime.Now); + if (CronExpression.IsValidExpression(cron) && nextFireUTCTime != null) { return cron; } diff --git a/src/Ombi/Controllers/V1/SettingsController.cs b/src/Ombi/Controllers/V1/SettingsController.cs index 0892b1dda..9db3fe2f6 100644 --- a/src/Ombi/Controllers/V1/SettingsController.cs +++ b/src/Ombi/Controllers/V1/SettingsController.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -652,7 +652,9 @@ namespace Ombi.Controllers.V1 try { var isValid = CronExpression.IsValidExpression(expression); - if (!isValid) + CronExpression cron = new CronExpression(expression); + DateTimeOffset? nextFireUTCTime = cron.GetNextValidTimeAfter(DateTime.Now); + if (!isValid || nextFireUTCTime == null) { return new JobSettingsViewModel {