40 lines
953 B
Go
40 lines
953 B
Go
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)
|
|
}
|
|
}
|
|
}
|