initial commit with basic http server
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
*.csv
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
module gogs.home.aneur.in/go/ultrashorty
|
||||||
|
|
||||||
|
go 1.25.6
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/alecthomas/kong v1.14.0
|
||||||
|
github.com/rs/zerolog v1.35.0
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
|
golang.org/x/sys v0.29.0 // indirect
|
||||||
|
)
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
|
||||||
|
github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
|
||||||
|
github.com/alecthomas/kong v1.14.0 h1:gFgEUZWu2ZmZ+UhyZ1bDhuutbKN1nTtJTwh19Wsn21s=
|
||||||
|
github.com/alecthomas/kong v1.14.0/go.mod h1:wrlbXem1CWqUV5Vbmss5ISYhsVPkBb1Yo7YKJghju2I=
|
||||||
|
github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs=
|
||||||
|
github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
|
||||||
|
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
|
||||||
|
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
|
||||||
|
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
|
||||||
|
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
|
||||||
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/rs/zerolog v1.35.0 h1:VD0ykx7HMiMJytqINBsKcbLS+BJ4WYjz+05us+LRTdI=
|
||||||
|
github.com/rs/zerolog v1.35.0/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
|
||||||
|
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/alecthomas/kong"
|
||||||
|
"github.com/rs/zerolog"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CLI struct {
|
||||||
|
File string `arg:"" name:"file" short:"f" help:"Path to CSV redirects file." type:"path"`
|
||||||
|
Host string `name:"host" help:"HTTP listen host." default:"${host}"`
|
||||||
|
Port string `name:"port" short:"p" help:"HTTP listen port." default:"${port}"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type HttpServer struct {
|
||||||
|
CLI *CLI
|
||||||
|
Log zerolog.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func (srv *HttpServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||||
|
statusCode := 404
|
||||||
|
srv.Log.Trace().Int("result", statusCode).Msg(req.URL.Path)
|
||||||
|
w.WriteHeader(statusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
vars := kong.Vars{
|
||||||
|
"host": "localhost",
|
||||||
|
"port": "4000",
|
||||||
|
}
|
||||||
|
|
||||||
|
cli := &CLI{}
|
||||||
|
kong.Parse(cli, vars)
|
||||||
|
|
||||||
|
srv := &HttpServer{
|
||||||
|
CLI: cli,
|
||||||
|
Log: zerolog.New(zerolog.NewConsoleWriter()).With().Timestamp().Logger(),
|
||||||
|
}
|
||||||
|
|
||||||
|
addr := net.JoinHostPort(cli.Host, cli.Port)
|
||||||
|
errc := make(chan error)
|
||||||
|
go func() {
|
||||||
|
errc <- http.ListenAndServe(addr, srv)
|
||||||
|
}()
|
||||||
|
|
||||||
|
srv.Log.Info().Msgf("Listening at %s", addr)
|
||||||
|
err := <-errc
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user