From 342e92162ccf0ec4b8a421942bd8035e7edcfe04 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Wed, 05 Feb 2025 02:35:12 +0800 Subject: [PATCH] *: Basic web server --- .gitignore | 1 + config.go | 34 ++++++++++++++++++++++++++++++++++ forge.scfg | 4 ++++ go.mod | 2 ++ go.sum | 2 ++ handle_index.go | 8 ++++++++ main.go | 37 +++++++++++++++++++++++++++++++++++++ resources.go | 32 ++++++++++++++++++++++++++++++++ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e90b0c91bd05d6ddde2627d6a24494acce8ac04b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/forge diff --git a/config.go b/config.go new file mode 100644 index 0000000000000000000000000000000000000000..a38fd2505ba910352551aee274d71ff0ca6b935e --- /dev/null +++ b/config.go @@ -0,0 +1,34 @@ +package main + +import ( + "bufio" + "os" + + "go.lindenii.runxiyu.org/lindenii-common/scfg" +) + +var config struct { + HTTP struct { + Net string `scfg:"net"` + Addr string `scfg:"addr"` + } `scfg:"http"` + DB struct { + Type string `scfg:"type"` + Conn string `scfg:"conn"` + } `scfg:"db"` +} + +func load_config(path string) (err error) { + config_file, err := os.Open(path) + if err != nil { + return err + } + + decoder := scfg.NewDecoder(bufio.NewReader(config_file)) + err = decoder.Decode(&config) + if err != nil { + return err + } + + return nil +} diff --git a/forge.scfg b/forge.scfg new file mode 100644 index 0000000000000000000000000000000000000000..dea1ee689f3ae02c5115f29199e901b7991227e9 --- /dev/null +++ b/forge.scfg @@ -0,0 +1,4 @@ +http { + net tcp + addr :8080 +} diff --git a/go.mod b/go.mod index 7df45b798497c93393a5a6dbba7592b40dd69dc0..931720eeb4381e5fef5502577aa1ffb5c8e5e0e3 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module go.lindenii.runxiyu.org/forge go 1.23.5 + +require go.lindenii.runxiyu.org/lindenii-common v0.0.0-20250113062520-2daa71bfa256 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000000000000000000000000000000000000..19c88e0f2d7c82c52a3d3f5756dca2884da4b1b8 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +go.lindenii.runxiyu.org/lindenii-common v0.0.0-20250113062520-2daa71bfa256 h1:LCekcmEfZRfuuLMKUMT2TCgdXQRPIjxalibQIzHjzIo= +go.lindenii.runxiyu.org/lindenii-common v0.0.0-20250113062520-2daa71bfa256/go.mod h1:bOxuuGXA3UpbLb1lKohr2j2MVcGGLcqfAprGx9VCkMA= diff --git a/handle_index.go b/handle_index.go new file mode 100644 index 0000000000000000000000000000000000000000..b9a8a0c2556f16e58f8240a9d576ecbec71d8656 --- /dev/null +++ b/handle_index.go @@ -0,0 +1,8 @@ +package main + +import ( + "net/http" +) + +func handle_index(w http.ResponseWriter, r *http.Request) { +} diff --git a/main.go b/main.go new file mode 100644 index 0000000000000000000000000000000000000000..3467f3fe39db3ff784e08c6b9934d1091b7324fd --- /dev/null +++ b/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "flag" + "net" + "net/http" + + "go.lindenii.runxiyu.org/lindenii-common/clog" +) + +func main() { + config_path := flag.String( + "config", + "/etc/lindenii/forge.scfg", + "path to configuration file", + ) + flag.Parse() + + err := load_config(*config_path) + if err != nil { + clog.Fatal(1, "Loading configuration: "+err.Error()) + } + + err = load_templates() + if err != nil { + clog.Fatal(1, "Loading templates: "+err.Error()) + } + + http.HandleFunc("/{$}", handle_index) + + listener, err := net.Listen(config.HTTP.Net, config.HTTP.Addr) + if err != nil { + clog.Fatal(1, "Listening: "+err.Error()) + } + + http.Serve(listener, nil) +} diff --git a/resources.go b/resources.go new file mode 100644 index 0000000000000000000000000000000000000000..737a079e699d86937bc6fcc3a307f2cc83d5de0d --- /dev/null +++ b/resources.go @@ -0,0 +1,32 @@ +package main + +import ( + "embed" + "html/template" + "io/fs" + "net/http" +) + +//go:embed templates/* static/* +var resources_fs embed.FS + +var templates *template.Template + +func load_templates() (err error) { + templates, err = template.ParseFS(resources_fs, "templates/*") + return err +} + +func serve_static() (err error) { + static_fs, err := fs.Sub(resources_fs, "static") + if err != nil { + return err + } + http.Handle("/static/", + http.StripPrefix( + "/static/", + http.FileServer(http.FS(static_fs)), + ), + ) + return nil +} diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 Binary files /dev/null and b/static/style.css differ diff --git a/templates/repo.html b/templates/repo.html new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 Binary files /dev/null and b/templates/repo.html differ -- 2.48.1