website/pkg/middleware/age_gate.go

45 lines
1.0 KiB
Go

package middleware
import (
"net/http"
"strings"
"code.nonshy.com/nonshy/website/pkg/models"
"code.nonshy.com/nonshy/website/pkg/templates"
"code.nonshy.com/nonshy/website/pkg/utility"
)
// AgeGate: part of LoginRequired that verifies the user has a birthdate on file.
func AgeGate(user *models.User, w http.ResponseWriter, r *http.Request) (handled bool) {
// Whitelisted endpoints where we won't redirect them away
var whitelistedPaths = []string{
"/me",
"/settings",
"/messages",
"/friends",
"/u/",
"/photo/upload",
"/photo/certification",
"/photo/private",
"/photo/view",
"/comments",
"/users/blocked",
"/users/block",
"/account/delete",
"/v1/", // API endpoints like the Like buttons
}
for _, path := range whitelistedPaths {
if strings.HasPrefix(r.URL.Path, path) {
return
}
}
// User has no age set? Redirect them to the age gate prompt.
if user.Birthdate.IsZero() || utility.Age(user.Birthdate) < 18 {
templates.Redirect(w, "/settings/age-gate")
return true
}
return
}