45 lines
1.0 KiB
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
|
|
}
|