initial commit with basic http server

This commit is contained in:
2026-03-30 17:38:09 +01:00
commit 153dc64f60
4 changed files with 83 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
*.csv
+14
View File
@@ -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
)
+17
View File
@@ -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=
+51
View File
@@ -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)
}