2021-04-07 15:22:24 +02:00
|
|
|
package webmention
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
|
2021-04-09 18:04:04 +02:00
|
|
|
"brainbaking.com/go-jamming/common"
|
|
|
|
"brainbaking.com/go-jamming/rest"
|
2021-04-07 17:31:23 +02:00
|
|
|
|
|
|
|
"github.com/rs/zerolog/log"
|
2021-04-07 15:22:24 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func isValidUrl(url string) bool {
|
|
|
|
return url != "" &&
|
|
|
|
(strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://"))
|
|
|
|
}
|
|
|
|
|
|
|
|
func isValidDomain(url string, conf *common.Config) bool {
|
2021-04-08 12:16:33 +02:00
|
|
|
_, err := conf.FetchDomain(url)
|
2021-04-20 20:08:07 +02:00
|
|
|
return err == nil
|
2021-04-07 15:22:24 +02:00
|
|
|
}
|
|
|
|
|
2021-04-08 09:54:47 +02:00
|
|
|
func isValidTargetUrl(url string, httpClient rest.Client) bool {
|
|
|
|
_, err := httpClient.Get(url)
|
2021-04-07 17:31:23 +02:00
|
|
|
if err != nil {
|
|
|
|
log.Warn().Str("target", url).Msg("Invalid target URL")
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2021-04-08 09:54:47 +02:00
|
|
|
func validate(r rest.HttpReq, h rest.HttpHeader, conf *common.Config) bool {
|
2022-05-16 14:47:04 +02:00
|
|
|
return strings.HasPrefix(h.Get("Content-Type"), "application/x-www-form-urlencoded") &&
|
2021-04-07 15:22:24 +02:00
|
|
|
isValidUrl(r.FormValue("source")) &&
|
|
|
|
isValidUrl(r.FormValue("target")) &&
|
|
|
|
r.FormValue("source") != r.FormValue("target") &&
|
|
|
|
isValidDomain(r.FormValue("target"), conf)
|
|
|
|
}
|