mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-26 07:44:59 +03:00
fix(settings): accept five-field crontab for report and LDAP schedules
The panel scheduler runs WithSeconds(), whose parser rejects a standard five-field crontab such as "30 8 * * *". An admin who typed one into the Telegram/Discord notify time or the LDAP sync schedule saved it without error, AddJob then failed at startup, and the job silently never ran. Admin-typed schedules now go through internal/util/cronspec, which takes an optional seconds column plus the @descriptors and hands the scheduler a parsed cron.Schedule. CheckValid rejects an unparseable schedule on save, and a stored legacy value falls back to the job's default instead of dropping the job.
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/mhsanaei/3x-ui/v3/internal/util/common"
|
||||
"github.com/mhsanaei/3x-ui/v3/internal/util/cronspec"
|
||||
)
|
||||
|
||||
type Msg struct {
|
||||
@@ -352,6 +353,19 @@ func (s *AllSetting) CheckValid() error {
|
||||
s.SubClashPath += "/"
|
||||
}
|
||||
|
||||
for _, sched := range []struct{ name, spec string }{
|
||||
{"tgRunTime", s.TgRunTime},
|
||||
{"discordRunTime", s.DiscordRunTime},
|
||||
{"ldapSyncCron", s.LdapSyncCron},
|
||||
} {
|
||||
if strings.TrimSpace(sched.spec) == "" {
|
||||
continue
|
||||
}
|
||||
if _, err := cronspec.Parse(sched.spec); err != nil {
|
||||
return common.NewError(sched.name+":", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := checkIPOrCIDRList(s.TrustedProxyCIDRs, "trusted proxy CIDR is not valid:"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user