big juicy update

This commit is contained in:
pavel 2026-05-12 23:31:09 +02:00
commit 1b6651c8e0
5 changed files with 101 additions and 11 deletions

45
main.go
View file

@ -103,13 +103,52 @@ func main() {
mux.Handle("/api/purchase", app.auth.RequireAuth(http.HandlerFunc(app.handlePurchaseAPI)))
mux.Handle("/api/my-skills", app.auth.RequireAuth(http.HandlerFunc(app.handleMySkillsAPI)))
addr := ":" + cfg.Port
log.Printf("server listening on %s", addr)
if err := http.ListenAndServe(addr, loggingMiddleware(mux)); err != nil {
listener, cleanup, err := createListener(cfg)
if err != nil {
log.Fatalf("create listener: %v", err)
}
defer cleanup()
log.Printf("server listening network=%s address=%s", cfg.ListenNetwork, cfg.ListenAddress)
if err := http.Serve(listener, loggingMiddleware(mux)); err != nil {
log.Fatalf("server failed: %v", err)
}
}
func createListener(cfg Config) (net.Listener, func(), error) {
if cfg.ListenNetwork == "unix" {
if err := os.MkdirAll(filepath.Dir(cfg.ListenAddress), 0o755); err != nil {
return nil, nil, fmt.Errorf("create socket dir: %w", err)
}
if _, err := os.Stat(cfg.ListenAddress); err == nil {
if err := os.Remove(cfg.ListenAddress); err != nil {
return nil, nil, fmt.Errorf("remove stale socket: %w", err)
}
} else if !os.IsNotExist(err) {
return nil, nil, fmt.Errorf("check socket path: %w", err)
}
l, err := net.Listen("unix", cfg.ListenAddress)
if err != nil {
return nil, nil, err
}
if err := os.Chmod(cfg.ListenAddress, cfg.UnixSocketPerm); err != nil {
_ = l.Close()
return nil, nil, fmt.Errorf("chmod socket: %w", err)
}
cleanup := func() {
_ = l.Close()
_ = os.Remove(cfg.ListenAddress)
}
return l, cleanup, nil
}
l, err := net.Listen("tcp", cfg.ListenAddress)
if err != nil {
return nil, nil, err
}
return l, func() { _ = l.Close() }, nil
}
func runMigrations(db *sql.DB) error {
schema, err := os.ReadFile("db/schema.sql")
if err != nil {