initial commit

This commit is contained in:
gutmet 2018-12-09 00:51:40 +01:00
commit 664e291742
2 changed files with 48 additions and 0 deletions

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module git.gutmet.org/simpleserver.git
require git.gutmet.org/goutil.git v0.0.0-20181208191316-76ae04a2662a

45
server.go Normal file
View File

@ -0,0 +1,45 @@
package simpleserver
import (
"fmt"
"git.gutmet.org/goutil.git"
"net/http"
"os"
"os/signal"
"path"
)
func viewHandler(root string, w http.ResponseWriter, r *http.Request) {
file := path.Join(root, r.URL.Path[1:])
info, err := os.Stat(file)
if err != nil {
fmt.Fprint(w, err)
return
}
if info.IsDir() {
file = path.Join(file, "index.html")
}
fmt.Println("GET " + file)
content, _ := goutil.ReadFile(file)
fmt.Fprint(w, content)
}
func Serve(root string) {
address := "0.0.0.0:8000"
fmt.Println("Serving at http://" + address + " ...")
fmt.Println("Use Ctrl+C to exit")
fmt.Println("(This is not a production web server, don't get any funny ideas)")
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { viewHandler(root, w, r) })
srv := &http.Server{Addr: address}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func() {
<-c
fmt.Println("Received interrupt, closing...")
srv.Close()
}()
err := srv.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
fmt.Fprintln(os.Stderr, err)
}
}