fix mention extracting when no domain exists (usually when intra-instance mentions)

Signed-off-by: kim <grufwub@gmail.com>
This commit is contained in:
kim 2021-10-07 07:29:48 +01:00
commit 730366ddf1
3 changed files with 9 additions and 11 deletions

View file

@ -565,13 +565,10 @@ func ExtractMention(i Mentionable) (*gtsmodel.Mention, error) {
} }
// just make sure the mention string is valid so we can handle it properly later on... // just make sure the mention string is valid so we can handle it properly later on...
username, domain, err := util.ExtractMentionParts(mentionString) _, _, err = util.ExtractMentionParts(mentionString)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if username == "" || domain == "" {
return nil, errors.New("username or domain was empty")
}
mention.NameString = mentionString mention.NameString = mentionString
// the href prop should be the AP URI of a user we know, eg https://example.org/users/whatever_user // the href prop should be the AP URI of a user we know, eg https://example.org/users/whatever_user

View file

@ -47,7 +47,7 @@ const (
) )
var ( var (
mentionName = `^@(\w+)(?:@([a-zA-Z0-9_\-\.:]+)?)$` mentionName = `^@(\w+)(?:@([a-zA-Z0-9_\-\.:]+))?$`
// MentionName captures the username and domain part from a mention string // MentionName captures the username and domain part from a mention string
// such as @whatever_user@example.org, returning whatever_user and example.org (without the @ symbols) // such as @whatever_user@example.org, returning whatever_user and example.org (without the @ symbols)
MentionName = regexp.MustCompile(mentionName) MentionName = regexp.MustCompile(mentionName)

View file

@ -68,13 +68,14 @@ func DeriveEmojisFromText(text string) []string {
// If nothing is matched, it will return an error. // If nothing is matched, it will return an error.
func ExtractMentionParts(mention string) (username, domain string, err error) { func ExtractMentionParts(mention string) (username, domain string, err error) {
matches := regexes.MentionName.FindStringSubmatch(mention) matches := regexes.MentionName.FindStringSubmatch(mention)
if matches == nil || len(matches) != 3 { switch len(matches) {
err = fmt.Errorf("could't match mention %s", mention) case 2:
return return matches[1], "", nil
case 3:
return matches[1], matches[2], nil
default:
return "", "", fmt.Errorf("couldn't match mention %s", mention)
} }
username = matches[1]
domain = matches[2]
return
} }
// IsMention returns true if the passed string looks like @whatever@example.org // IsMention returns true if the passed string looks like @whatever@example.org