mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-11-21 02:07:30 -06:00
feat: Relax URL matching
Instead of only linkifying things with an explicit http or https scheme, the xurls.Relaxed also matches links with known TLDs. This means that text like 'banana.com' will also be matched, despite the missing http/https scheme. This also works to linkify email addresses, which is handy. This should also ensure we catch links without a scheme for the purpose of spam checking.
This commit is contained in:
parent
cecb1fd009
commit
5155718bcb
4 changed files with 6 additions and 12 deletions
|
|
@ -375,7 +375,7 @@ func (f *Filter) errantLinks(
|
|||
}
|
||||
|
||||
// Find + parse every http/https link in the status.
|
||||
rawLinks := regexes.LinkScheme.FindAllString(concat, -1)
|
||||
rawLinks := regexes.URL.FindAllString(concat, -1)
|
||||
links := make([]preppedLink, 0, len(rawLinks))
|
||||
for _, rawLink := range rawLinks {
|
||||
linkURI, err := url.Parse(rawLink)
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ const (
|
|||
reports = "reports"
|
||||
accepts = "accepts"
|
||||
|
||||
schemes = `(http|https)://` // Allowed URI protocols for parsing links in text.
|
||||
alphaNumeric = `\p{L}\p{M}*|\p{N}` // A single number or script character in any language, including chars with accents.
|
||||
usernameGrp = `(?:` + alphaNumeric + `|\.|\-|\_)` // Non-capturing group that matches against a single valid username character.
|
||||
domainGrp = `(?:` + alphaNumeric + `|\.|\-|\:)` // Non-capturing group that matches against a single valid domain character.
|
||||
|
|
@ -79,14 +78,9 @@ const (
|
|||
)
|
||||
|
||||
var (
|
||||
// LinkScheme captures http/https schemes in URLs.
|
||||
LinkScheme = func() *regexp.Regexp {
|
||||
rgx, err := xurls.StrictMatchingScheme(schemes)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return rgx
|
||||
}()
|
||||
// URL captures anything that looks like a URL. This includes
|
||||
// URLs without a scheme, based on a built-in list of TLDs.
|
||||
URL = xurls.Relaxed()
|
||||
|
||||
// MentionName captures the username and domain part from
|
||||
// a mention string such as @whatever_user@example.org,
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ func (f *Formatter) fromMarkdown(
|
|||
},
|
||||
// Turns URLs into links.
|
||||
extension.NewLinkify(
|
||||
extension.WithLinkifyURLRegexp(regexes.LinkScheme),
|
||||
extension.WithLinkifyURLRegexp(regexes.URL),
|
||||
),
|
||||
extension.Strikethrough,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ func (f *Formatter) fromPlain(
|
|||
},
|
||||
// Turns URLs into links.
|
||||
extension.NewLinkify(
|
||||
extension.WithLinkifyURLRegexp(regexes.LinkScheme),
|
||||
extension.WithLinkifyURLRegexp(regexes.URL),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue