go-jamming/app/webmention/validate.go

38 lines
943 B
Go

package webmention
import (
"strings"
"brainbaking.com/go-jamming/common"
"brainbaking.com/go-jamming/rest"
"github.com/rs/zerolog/log"
)
func isValidUrl(url string) bool {
return url != "" &&
(strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://"))
}
func isValidDomain(url string, conf *common.Config) bool {
_, err := conf.FetchDomain(url)
return err == nil
}
func isValidTargetUrl(url string, httpClient rest.Client) bool {
_, err := httpClient.Get(url)
if err != nil {
log.Warn().Str("target", url).Msg("Invalid target URL")
return false
}
return true
}
func validate(r rest.HttpReq, h rest.HttpHeader, conf *common.Config) bool {
return strings.HasPrefix(h.Get("Content-Type"), "application/x-www-form-urlencoded") &&
isValidUrl(r.FormValue("source")) &&
isValidUrl(r.FormValue("target")) &&
r.FormValue("source") != r.FormValue("target") &&
isValidDomain(r.FormValue("target"), conf)
}