package httpd import ( "net" "net/http" "path/filepath" "github.com/gorilla/mux" "github.com/kataras/neffos" "github.com/kataras/neffos/gorilla" "github.com/jumpserver/koko/pkg/config" "github.com/jumpserver/koko/pkg/logger" ) var ( httpServer *http.Server ) var wsEvents = neffos.Namespaces{ "ssh": neffos.Events{ neffos.OnNamespaceConnected: OnNamespaceConnected, neffos.OnNamespaceDisconnect: OnNamespaceDisconnect, neffos.OnRoomJoined: func(c *neffos.NSConn, msg neffos.Message) error { return nil }, neffos.OnRoomLeft: func(c *neffos.NSConn, msg neffos.Message) error { return nil }, "data": OnDataHandler, "resize": OnResizeHandler, "host": OnHostHandler, "logout": OnLogoutHandler, "token": OnTokenHandler, }, "elfinder": neffos.Events{ neffos.OnNamespaceConnected: OnELFinderConnect, neffos.OnNamespaceDisconnect: OnELFinderDisconnect, }, } func StartHTTPServer() { conf := config.GetConf() sshWs := neffos.New(gorilla.DefaultUpgrader, wsEvents) sshWs.IDGenerator = func(w http.ResponseWriter, r *http.Request) string { return neffos.DefaultIDGenerator(w, r) } sshWs.OnUpgradeError = func(err error) { } router := mux.NewRouter() fs := http.FileServer(http.Dir(filepath.Join(conf.RootPath, "static"))) router.PathPrefix("/coco/static/").Handler(http.StripPrefix("/coco/static/", fs)) router.Handle("/socket.io/", sshWs) router.HandleFunc("/coco/elfinder/sftp/{host}/", AuthDecorator(sftpHostFinder)) router.HandleFunc("/coco/elfinder/sftp/", AuthDecorator(sftpFinder)) router.HandleFunc("/coco/elfinder/sftp/connector/{host}/", AuthDecorator(sftpHostConnectorView)).Methods("GET", "POST") addr := net.JoinHostPort(conf.BindHost, conf.HTTPPort) logger.Debug("Start HTTP server at ", addr) httpServer = &http.Server{Addr: addr, Handler: router} logger.Fatal(httpServer.ListenAndServe()) } func StopHTTPServer() { _ = httpServer.Close() }