package middleware import ( "dk/internal/models/towns" "dk/internal/models/users" "dk/internal/router" "github.com/valyala/fasthttp" ) // RequireTown ensures the user is in town at valid coordinates func RequireTown() router.Middleware { return func(next router.Handler) router.Handler { return func(ctx router.Ctx, params []string) { user, ok := ctx.UserValue("user").(*users.User) if !ok || user == nil { ctx.SetStatusCode(fasthttp.StatusUnauthorized) ctx.SetBodyString("Not authenticated") return } if user.Currently != "In Town" { ctx.SetStatusCode(fasthttp.StatusForbidden) ctx.SetBodyString("You must be in town") return } town, err := towns.ByCoords(user.X, user.Y) if err != nil || town == nil || town.ID == 0 { ctx.SetStatusCode(fasthttp.StatusForbidden) ctx.SetBodyString("Invalid town location") return } ctx.SetUserValue("town", town) next(ctx, params) } } }