Mercurial > gemma
changeset 1544:5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 10 Dec 2018 13:17:50 +0100 |
parents | 240bd1db49c0 |
children | 494bb818d073 |
files | pkg/controllers/user.go pkg/scheduler/scheduler.go |
diffstat | 2 files changed, 40 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/controllers/user.go Mon Dec 10 13:16:23 2018 +0100 +++ b/pkg/controllers/user.go Mon Dec 10 13:17:50 2018 +0100 @@ -29,6 +29,7 @@ "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/misc" "gemma.intevation.de/gemma/pkg/models" + "gemma.intevation.de/gemma/pkg/scheduler" ) const ( @@ -128,6 +129,7 @@ // Running in a go routine should not be necessary. go func() { auth.Sessions.Logout(user) }() + go func() { scheduler.UnbindUser(user) }() jr = JSONResult{Code: http.StatusNoContent} return @@ -205,6 +207,7 @@ if user != newUser.User { // Running in a go routine should not be necessary. go func() { auth.Sessions.Logout(string(user)) }() + go func() { scheduler.UnbindUser(string(user)) }() } jr = JSONResult{
--- a/pkg/scheduler/scheduler.go Mon Dec 10 13:16:23 2018 +0100 +++ b/pkg/scheduler/scheduler.go Mon Dec 10 13:17:50 2018 +0100 @@ -73,10 +73,47 @@ return global.unbindAction(name, user, cfgID) } +func UnbindUser(user string) { + global.unbindUser(user) +} + func sameCfgID(a, b *int64) bool { return (a == nil && b == nil) || (a != nil && b != nil && *a == *b) } +func (s *scheduler) unbindUser(user string) { + s.mu.Lock() + defer s.mu.Unlock() + + entries := s.cr.Entries() + + if len(entries) == 0 { + return + } + + var found bool + for _, entry := range entries { + ua := entry.Job.(*userAction) + if ua.user == user { + found = true + break + } + } + if !found { + return + } + + s.cr.Stop() + s.cr = cron.New() + for _, entry := range entries { + ua := entry.Job.(*userAction) + if ua.user != user { + s.cr.Schedule(entry.Schedule, entry.Job) + } + } + s.cr.Start() +} + func (s *scheduler) unbindAction(name, user string, cfgID *int64) error { s.mu.Lock() defer s.mu.Unlock()