Create isValidURN and isValidURI and use isValidURI everywhere where it is needed
This commit is contained in:
parent
14696371e2
commit
c200d5bf73
14
atom.go
14
atom.go
@ -3,6 +3,7 @@ package atomfeed
|
||||
import (
|
||||
"mime"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@ -13,11 +14,20 @@ type (
|
||||
URI string
|
||||
)
|
||||
|
||||
func isValidURL(testURL URI) bool {
|
||||
_, err := url.ParseRequestURI(string(testURL))
|
||||
func isValidURL(uri URI) bool {
|
||||
_, err := url.ParseRequestURI(string(uri))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func isValidURN(uri URI) bool {
|
||||
pattern := `\A(?i:urn:(?!urn:)(?<nid>[a-z0-9][a-z0-9-]{1,31}):(?<nss>(?:[-a-z0-9()+,.:=@;$_!*'&~\/]|%[0-9a-f]{2})+)(?:\?\+(?<rcomponent>.*?))?(?:\?=(?<qcomponent>.*?))?(?:#(?<fcomponent>.*?))?)\z`
|
||||
return regexp.MustCompile(pattern).MatchString(string(uri))
|
||||
}
|
||||
|
||||
func isValidURI(uri URI) bool {
|
||||
return isValidURL(uri) || isValidURN(uri)
|
||||
}
|
||||
|
||||
func isCompositeMediaType(mediaType string) bool {
|
||||
mediaType, _, err := mime.ParseMediaType(mediaType)
|
||||
if err != nil {
|
||||
|
@ -27,6 +27,12 @@ func (c *Category) Check() error {
|
||||
return errors.New("term attribute of category empty")
|
||||
}
|
||||
|
||||
if c.Scheme != "" {
|
||||
if !isValidURI(c.Scheme) {
|
||||
return fmt.Errorf("scheme attribute of category %v not correctly formatted", c.Scheme)
|
||||
}
|
||||
}
|
||||
|
||||
if c.Content == nil {
|
||||
return errors.New("no content element of category")
|
||||
} else {
|
||||
|
@ -22,7 +22,7 @@ func newOutOfLineContent(mediaType string, content any) (*OutOfLineContent, erro
|
||||
return nil, fmt.Errorf("content type %T incompatible with out of line content", content)
|
||||
}
|
||||
|
||||
if !isValidURL(content.(URI)) {
|
||||
if !isValidURI(content.(URI)) {
|
||||
return nil, errors.New("content not a valid uri")
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user