From daa904b5919704cbfd0d6cb32cb26483af0d347f Mon Sep 17 00:00:00 2001 From: Jordan Orelli Date: Sun, 28 Nov 2021 06:53:52 +0000 Subject: [PATCH] figured out how to serve something w00t --- go.mod | 5 ++++ go.sum | 4 +++ handler.go | 55 +++++++++++++++++++++++++++++++++++- main.go | 7 +++-- meta/fart/modfile | 3 ++ meta/fart/root.html | 7 +++++ meta/fart/version-list | 3 ++ modules/orel.li/fart/go.mod | 3 ++ modules/orel.li/fart/main.go | 9 ++++++ shutdown.go | 11 +++++--- 10 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 go.sum create mode 100644 meta/fart/modfile create mode 100644 meta/fart/root.html create mode 100644 meta/fart/version-list create mode 100644 modules/orel.li/fart/go.mod create mode 100644 modules/orel.li/fart/main.go diff --git a/go.mod b/go.mod index 023d575..6233655 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,8 @@ module orel.li/modularium go 1.17 + +require ( + golang.org/x/mod v0.5.1 // indirect + golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..2db7d92 --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/handler.go b/handler.go index dee5890..248af0e 100644 --- a/handler.go +++ b/handler.go @@ -1,11 +1,64 @@ package main import ( + "embed" + "encoding/json" + "fmt" "net/http" + "time" + + "golang.org/x/mod/module" + "golang.org/x/mod/zip" ) -type handler struct{} +//go:embed meta +var content embed.FS + +type handler struct { +} func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + log_info.Printf("%s %s", r.Method, r.URL.String()) + + switch r.URL.Path { + case "/fart": + serveFile(w, "meta/fart/root.html") + case "/modules/orel.li/fart/@v/list": + serveFile(w, "meta/fart/version-list") + case "/modules/orel.li/fart/@latest", + "/modules/orel.li/fart/@v/v0.0.3.info": + e := json.NewEncoder(w) + e.Encode(versionInfo{ + Version: "v0.0.3", + Time: time.Now(), + }) + case "/modules/orel.li/fart/@v/v0.0.3.mod": + serveFile(w, "meta/fart/modfile") + case "/modules/orel.li/fart/@v/v0.0.3.zip": + err := zip.CreateFromDir(w, module.Version{ + Path: "orel.li/fart", + Version: "v0.0.3", + }, "/home/jorelli/modularium/modules/orel.li/fart") + if err != nil { + log_error.Printf("zip error: %v", err) + } + case "/": + w.WriteHeader(http.StatusOK) + default: + w.WriteHeader(http.StatusNotFound) + } +} + +func serveFile(w http.ResponseWriter, path string) { + b, err := content.ReadFile(path) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(w, err.Error()) + } + w.Write(b) +} +type versionInfo struct { + Version string // version string + Time time.Time // commit time } diff --git a/main.go b/main.go index a50f967..eb6e81d 100644 --- a/main.go +++ b/main.go @@ -41,12 +41,15 @@ func run(o options) error { if err != nil { return fmt.Errorf("unable to open unix socket: %w", err) } - onShutdown(func() error { return l.Close() }) + os.Chmod(o.Path, 0777) server := http.Server{ Handler: new(handler), } - onShutdown(func() error { return server.Shutdown(nil) }) + onShutdown(func() error { + log_info.Print("shutting down http server") + return server.Shutdown(context.TODO()) + }) // ?? start := time.Now() diff --git a/meta/fart/modfile b/meta/fart/modfile new file mode 100644 index 0000000..7249dfa --- /dev/null +++ b/meta/fart/modfile @@ -0,0 +1,3 @@ +module orel.li/fart + +go 1.17 diff --git a/meta/fart/root.html b/meta/fart/root.html new file mode 100644 index 0000000..b719026 --- /dev/null +++ b/meta/fart/root.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/meta/fart/version-list b/meta/fart/version-list new file mode 100644 index 0000000..c0a8dc7 --- /dev/null +++ b/meta/fart/version-list @@ -0,0 +1,3 @@ +0.0.1 +0.0.2 +0.0.3 diff --git a/modules/orel.li/fart/go.mod b/modules/orel.li/fart/go.mod new file mode 100644 index 0000000..7249dfa --- /dev/null +++ b/modules/orel.li/fart/go.mod @@ -0,0 +1,3 @@ +module orel.li/fart + +go 1.17 diff --git a/modules/orel.li/fart/main.go b/modules/orel.li/fart/main.go new file mode 100644 index 0000000..e327698 --- /dev/null +++ b/modules/orel.li/fart/main.go @@ -0,0 +1,9 @@ +package main + +import ( + "fmt" +) + +func main() { + fmt.Println("pfft") +} diff --git a/shutdown.go b/shutdown.go index 8a6a43c..882f2c2 100644 --- a/shutdown.go +++ b/shutdown.go @@ -1,8 +1,8 @@ package main import ( - "sync" "os" + "sync" ) var shutdownHandlers []func() error @@ -17,9 +17,12 @@ func shutdown(cause error) { } else { log_info.Print("shutting down") } - for _, f := range shutdownHandlers { - if err := f(); err != nil { - log_error.Printf("error in shutdown: %v", err) + if len(shutdownHandlers) > 0 { + for i := len(shutdownHandlers) - 1; i >= 0; i-- { + f := shutdownHandlers[i] + if err := f(); err != nil { + log_error.Printf("error in shutdown: %v", err) + } } } os.Exit(status)