Mm 23710 mmctl local mode (#14561)
* [MM-24146] Add unix socket listener for mmctl local mode (#14296) * add unix socket listener for mmctl local mode * add a constant for local-mode socket path * reflect review comments * [MM-24401] Base approach for Local Mode (#14333) * add unix socket listener for mmctl local mode * First working PoC * Adds the channel list endpoint * Add team list endpoint * Add a LocalClient to the api test helper and start local mode * Add helper to test with both SystemAdmin and Local clients * Add some docs * Adds TestForAllClients test helper * Incorporating @ashishbhate's proposal for adding test names to the helpers * Fix init errors after merge * Adds create channel tests * Always init local mode to allow for enabling-disabling it via config * Check the RemoteAddr of the request before marking session as local * Mark the request as errored if it's local and the origin is remote * Set the socket permissions to read/write when initialising * Fix linter * Replace RemoteAddr check to ditch connections with the IP:PORT shape Co-authored-by: Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> * Fix translations order * [MM-24832] Migrate plugin endpoints to local mode (#14543) * [MM-24832] Migrate plugin endpoints to local mode * Fix client reference in helper * [MM-24776] Migrate config endpoints to local mode (#14544) * [MM-24776] Migrate get config endpoint to local mode * [MM-24777] Migrate update config endpoint to local mode * Fix update config to bypass RestrictSystemAdmin flag * Add patchConfig endpoint * MM-24774/MM-24755: local mode for addLicense and removeLicense (#14491) Automatic Merge Co-authored-by: Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> Co-authored-by: Ashish Bhate <bhate.ashish@gmail.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
e8081b7a0f
Коммит
0d89ff5d0e
@@ -55,6 +55,10 @@ type Server struct {
|
||||
// RootRouter is the starting point for all HTTP requests to the server.
|
||||
RootRouter *mux.Router
|
||||
|
||||
// LocalRouter is the starting point for all the local UNIX socket
|
||||
// requests to the server
|
||||
LocalRouter *mux.Router
|
||||
|
||||
// Router is the starting point for all web, api4 and ws requests to the server. It differs
|
||||
// from RootRouter only if the SiteURL contains a /subpath.
|
||||
Router *mux.Router
|
||||
@@ -64,6 +68,8 @@ type Server struct {
|
||||
RateLimiter *RateLimiter
|
||||
Busy *Busy
|
||||
|
||||
localModeServer *http.Server
|
||||
|
||||
didFinishListen chan struct{}
|
||||
|
||||
goroutineCount int32
|
||||
@@ -154,10 +160,12 @@ type Server struct {
|
||||
|
||||
func NewServer(options ...Option) (*Server, error) {
|
||||
rootRouter := mux.NewRouter()
|
||||
localRouter := mux.NewRouter()
|
||||
|
||||
s := &Server{
|
||||
goroutineExitSignal: make(chan struct{}, 1),
|
||||
RootRouter: rootRouter,
|
||||
LocalRouter: localRouter,
|
||||
licenseListeners: map[string]func(*model.License, *model.License){},
|
||||
clientConfig: make(map[string]string),
|
||||
}
|
||||
@@ -433,6 +441,8 @@ func (s *Server) Shutdown() error {
|
||||
}
|
||||
|
||||
s.StopHTTPServer()
|
||||
s.stopLocalModeServer()
|
||||
|
||||
s.WaitForGoroutines()
|
||||
|
||||
if s.htmlTemplateWatcher != nil {
|
||||
@@ -712,9 +722,44 @@ func (s *Server) Start() error {
|
||||
close(s.didFinishListen)
|
||||
}()
|
||||
|
||||
if *s.Config().ServiceSettings.EnableLocalMode {
|
||||
if err := s.startLocalModeServer(); err != nil {
|
||||
mlog.Critical(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) startLocalModeServer() error {
|
||||
s.localModeServer = &http.Server{
|
||||
Handler: s.LocalRouter,
|
||||
}
|
||||
|
||||
socket := *s.configStore.Get().ServiceSettings.LocalModeSocketLocation
|
||||
unixListener, err := net.Listen("unix", socket)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, utils.T("api.server.start_server.starting.critical"), err)
|
||||
}
|
||||
if err = os.Chmod(socket, 0600); err != nil {
|
||||
return errors.Wrapf(err, utils.T("api.server.start_server.starting.critical"), err)
|
||||
}
|
||||
|
||||
go func() {
|
||||
err = s.localModeServer.Serve(unixListener)
|
||||
if err != nil && err != http.ErrServerClosed {
|
||||
mlog.Critical("Error starting unix socket server", mlog.Err(err))
|
||||
}
|
||||
}()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) stopLocalModeServer() {
|
||||
if s.localModeServer != nil {
|
||||
s.localModeServer.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) OriginChecker() func(*http.Request) bool {
|
||||
if allowed := *a.Config().ServiceSettings.AllowCorsFrom; allowed != "" {
|
||||
if allowed != "*" {
|
||||
|
||||
Ссылка в новой задаче
Block a user