diff --git a/README.md b/README.md index 78c6c1c..b4c5ab8 100644 --- a/README.md +++ b/README.md @@ -1,57 +1 @@ -# URL Redirect Service - -A minimal Go application for handling URL redirects with the smallest possible memory footprint. - -## Features - -- **Host-based redirects**: Redirects based on the incoming host header -- **Path-based redirects**: Redirects based on the URL path -- **Proxy support**: Handles `X-Forwarded-Host` and `X-Forwarded-Uri` headers from reverse proxies -- **Protocol agnostic**: Works with both HTTP and HTTPS requests -- **Minimal memory usage**: Uses only Go's standard library with no external dependencies - -## Current Redirect Rules - -### Host-based -- `mail.terrible.dev` → `https://mail.tommyparnell.com` - -### Path-based -- `/test` → `https://blog.terrible.dev` - -## Usage - -1. Run the application: - ```bash - go run main.go - ``` - -2. The server will start on port 8080 - -3. Test the redirects: - ```bash - # Test host-based redirect - curl -H "Host: mail.terrible.dev" http://localhost:8080 - - # Test path-based redirect - curl http://localhost:8080/test - - # Test with X-Forwarded headers (simulating a reverse proxy) - curl -H "X-Forwarded-Host: mail.terrible.dev" http://localhost:8080 - curl -H "X-Forwarded-Uri: /test" http://localhost:8080 - ``` - -## Building - -To build a standalone binary: -```bash -go build -o redirect main.go -``` - -## Memory Optimization - -This application is designed for minimal memory usage: -- Uses only Go's standard `net/http` package -- Single handler function for all routes -- Simple map lookups for redirect rules -- No external dependencies or frameworks -- Supports reverse proxy headers without additional overhead +A simple go fiber app to redirect urls for myself \ No newline at end of file diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..fab6978 --- /dev/null +++ b/go.sum @@ -0,0 +1,27 @@ +github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/gofiber/fiber/v2 v2.52.5 h1:tWoP1MJQjGEe4GB5TUGOi7P2E0ZMMRx5ZTG4rT+yGMo= +github.com/gofiber/fiber/v2 v2.52.5/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= +github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +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/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= +github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/main.go b/main.go index 48b1165..32e4ff0 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,8 @@ package main import ( + "os" + "github.com/gofiber/fiber/v2" ) @@ -56,8 +58,14 @@ func main() { // Use a single handler function to minimize memory overhead app.All("*", redirectHandler) - // Start server on port 8080 - if err := app.Listen(":8080"); err != nil { + // Get port from environment variable (Heroku sets this) + port := os.Getenv("PORT") + if port == "" { + port = "8080" // Default port for local development + } + + // Start server on the specified port + if err := app.Listen(":" + port); err != nil { panic(err) } }