diff options
| author | Paul Bütow <pbuetow@mimecast.com> | 2020-02-10 14:06:03 +0000 |
|---|---|---|
| committer | Paul Bütow <pbuetow@mimecast.com> | 2020-02-10 14:06:03 +0000 |
| commit | 410ca88465f065f244f88c1d4089cb0fa4a45799 (patch) | |
| tree | 5991a94cf29da0e6599e7263ba9c1cfd9e769a23 /internal/server | |
| parent | 75c530dcd9fbe3376f3a3c617663af0303a935e3 (diff) | |
initial scheduled jobs
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/server.go | 19 | ||||
| -rw-r--r-- | internal/server/stats.go | 2 |
2 files changed, 15 insertions, 6 deletions
diff --git a/internal/server/server.go b/internal/server/server.go index 42eb74c..5c46147 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -27,6 +27,8 @@ type Server struct { catLimiterCh chan struct{} // To control the max amount of concurrent tails tailLimiterCh chan struct{} + // To run scheduled tasks (if configured) + sched *scheduler } // New returns a new server. @@ -37,9 +39,10 @@ func New() *Server { sshServerConfig: &gossh.ServerConfig{}, catLimiterCh: make(chan struct{}, config.Server.MaxConcurrentCats), tailLimiterCh: make(chan struct{}, config.Server.MaxConcurrentTails), + sched: newScheduler(), } - s.sshServerConfig.PasswordCallback = s.controlUserCallback + s.sshServerConfig.PasswordCallback = s.backgroundUserCallback s.sshServerConfig.PublicKeyCallback = server.PublicKeyCallback private, err := gossh.ParsePrivateKey(server.PrivateHostKey()) @@ -62,7 +65,8 @@ func (s *Server) Start(ctx context.Context) int { logger.FatalExit("Failed to open listening TCP socket", err) } - go s.stats.periodicLogServerStats(ctx) + go s.stats.start(ctx) + go s.sched.start(ctx) for { conn, err := listener.Accept() // Blocking @@ -192,13 +196,18 @@ func (s *Server) handleRequests(ctx context.Context, sshConn gossh.Conn, in <-ch return nil } -func (*Server) controlUserCallback(c gossh.ConnMetadata, authPayload []byte) (*gossh.Permissions, error) { +func (s *Server) backgroundUserCallback(c gossh.ConnMetadata, authPayload []byte) (*gossh.Permissions, error) { user := user.New(c.User(), c.RemoteAddr().String()) if user.Name == config.ControlUser && string(authPayload) == config.ControlUser { - logger.Debug(user, "Initiating master control program") + logger.Debug(user, "Granting permissions to control user") return nil, nil } - return nil, fmt.Errorf("Not authorized") + if user.Name == config.ScheduledUser && string(authPayload) == s.sched.authPayload { + logger.Debug(user, "Granting permissions to schedule user") + return nil, nil + } + + return nil, fmt.Errorf("user %s not authorized", user) } diff --git a/internal/server/stats.go b/internal/server/stats.go index 4d661f7..ac579ad 100644 --- a/internal/server/stats.go +++ b/internal/server/stats.go @@ -67,7 +67,7 @@ func (s *stats) serverLimitExceeded() error { return nil } -func (s *stats) periodicLogServerStats(ctx context.Context) { +func (s *stats) start(ctx context.Context) { for { select { case <-time.NewTimer(time.Second * 10).C: |
