lotus/curiosrc/web/srv.go

83 lines
2.1 KiB
Go
Raw Normal View History

// Package web defines the HTTP web server for static files and endpoints.
package web
2023-12-12 05:16:57 +00:00
import (
"context"
"embed"
2023-12-30 15:37:04 +00:00
"io"
"io/fs"
2023-12-12 05:16:57 +00:00
"net"
"net/http"
2023-12-20 00:58:55 +00:00
"os"
2023-12-30 15:37:04 +00:00
"path"
2023-12-12 05:16:57 +00:00
"strings"
2023-12-20 00:58:55 +00:00
"time"
2023-12-12 05:16:57 +00:00
2023-12-19 15:12:45 +00:00
"github.com/gorilla/mux"
"go.opencensus.io/tag"
"github.com/filecoin-project/lotus/cmd/curio/deps"
"github.com/filecoin-project/lotus/curiosrc/web/api"
"github.com/filecoin-project/lotus/curiosrc/web/hapi"
2023-12-12 05:16:57 +00:00
"github.com/filecoin-project/lotus/metrics"
)
2023-12-30 15:37:04 +00:00
//go:embed static
2023-12-12 05:16:57 +00:00
var static embed.FS
2023-12-30 15:37:04 +00:00
var basePath = "/static/"
2023-12-20 00:58:55 +00:00
// An dev mode hack for no-restart changes to static and templates.
// You still need to recomplie the binary for changes to go code.
feat: curioweb: Improve UX, add top menu (#11901) * cfg edit 1 * jsonschema deps * feat: lp mig - first few steps * lp mig: default tasks * code comments * docs * lp-mig-progress * shared * comments and todos * fix: curio: rename lotus-provider to curio (#11645) * rename provider to curio * install gotext * fix lint errors, mod tidy * fix typo * fix API_INFO and add gotext to circleCI * add back gotext * add gotext after remerge * lp: channels doc * finish easy-migration TODOs * out generate * merging and more renames * avoid make-all * minor doc stuff * cu: make gen * make gen fix * make gen * tryfix * go mod tidy * minor ez migration fixes * ez setup - ui cleanups * better error message * guided setup colors * better path to saveconfigtolayer * loadconfigwithupgrades fix * readMiner oops * guided - homedir * err if miner is running * prompt error should exit * process already running, miner_id sectors in migration * dont prompt for language a second time * check miner stopped * unlock repo * render and sql oops * curio easyMig - some fixes * easyMigration runs successfully * lint * part 2 of last * message * merge addtl * fixing guided setup for myself * warn-on-no-post * EditorLoads * cleanups and styles * create info * fix tests * make gen * sector early bird * sectors v2 * sector termination v1 * terminate2 * mjs * minor things * flag bad sectors * fix errors * add dealweight and deals * change column width * ui looking better * cleanups * fix pipeline page * comments * curioweb: Add missing sector info file * curioweb: fix hapi root template --------- Co-authored-by: LexLuthr <88259624+LexLuthr@users.noreply.github.com> Co-authored-by: LexLuthr <lexluthr@protocol.ai> Co-authored-by: LexLuthr <lexluthr@curiostorage.org> Co-authored-by: Łukasz Magiera <magik6k@gmail.com>
2024-04-19 15:08:21 +00:00
var webDev = os.Getenv("CURIO_WEB_DEV") == "1"
2023-12-20 00:58:55 +00:00
2023-12-12 05:16:57 +00:00
func GetSrv(ctx context.Context, deps *deps.Deps) (*http.Server, error) {
2023-12-30 15:37:04 +00:00
mx := mux.NewRouter()
err := hapi.Routes(mx.PathPrefix("/hapi").Subrouter(), deps)
if err != nil {
return nil, err
}
2023-12-30 15:37:04 +00:00
api.Routes(mx.PathPrefix("/api").Subrouter(), deps)
var static fs.FS = static
2023-12-20 00:58:55 +00:00
if webDev {
basePath = ""
static = os.DirFS("curiosrc/web/static")
2023-12-20 00:58:55 +00:00
}
2023-12-12 05:16:57 +00:00
2023-12-30 15:37:04 +00:00
mx.NotFoundHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// If the request is for a directory, redirect to the index file.
if strings.HasSuffix(r.URL.Path, "/") {
r.URL.Path += "index.html"
}
file, err := static.Open(path.Join(basePath, r.URL.Path)[1:])
if err != nil {
w.WriteHeader(http.StatusNotFound)
2024-01-02 17:29:55 +00:00
_, _ = w.Write([]byte("404 Not Found"))
2023-12-30 15:37:04 +00:00
return
}
2024-01-02 17:29:55 +00:00
defer func() { _ = file.Close() }()
2023-12-30 15:37:04 +00:00
fileInfo, err := file.Stat()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
2024-01-02 17:29:55 +00:00
_, _ = w.Write([]byte("500 Internal Server Error"))
2023-12-30 15:37:04 +00:00
return
}
http.ServeContent(w, r, fileInfo.Name(), fileInfo.ModTime(), file.(io.ReadSeeker))
})
2023-12-12 05:16:57 +00:00
return &http.Server{
2023-12-30 15:37:04 +00:00
Handler: http.HandlerFunc(mx.ServeHTTP),
2023-12-12 05:16:57 +00:00
BaseContext: func(listener net.Listener) context.Context {
ctx, _ := tag.New(context.Background(), tag.Upsert(metrics.APIInterface, "curio"))
2023-12-12 05:16:57 +00:00
return ctx
},
2023-12-20 00:58:55 +00:00
Addr: deps.Cfg.Subsystems.GuiAddress,
ReadTimeout: time.Minute * 3,
ReadHeaderTimeout: time.Minute * 3, // lint
2023-12-12 05:16:57 +00:00
}, nil
}