# HG changeset patch # User Sascha L. Teichmann # Date 1544444270 -3600 # Node ID 5f80ec319a4f43164b2cddb435683d5b12d58044 # Parent 240bd1db49c0792dc5547d5ea6a241c71dc8b537 If a user is removed or renamed kill her/his schedule. Needs more case on renaming. diff -r 240bd1db49c0 -r 5f80ec319a4f pkg/controllers/user.go --- 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{ diff -r 240bd1db49c0 -r 5f80ec319a4f pkg/scheduler/scheduler.go --- 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()