Updates publicsuffix-go to upstream idna branch.

This commit bumps the publicsuffix-go dependency to the WIP branch from
https://github.com/weppos/publicsuffix-go/pull/40 to support IDN TLDs.
This commit is contained in:
Daniel 2016-11-21 08:49:23 -05:00
parent 595204b23f
commit c5cc328b11
No known key found for this signature in database
GPG Key ID: 08FB2BFC470E75B4
3 changed files with 538 additions and 418 deletions

3
Godeps/Godeps.json generated
View File

@ -198,7 +198,8 @@
},
{
"ImportPath": "github.com/weppos/publicsuffix-go/publicsuffix",
"Rev": "3316aa3feceb68fa73009112eddd387500cd40c0"
"Comment": "v0.2.0-7-g7c78f35",
"Rev": "7c78f3583bc3ab1ccf4ac5fdf70797aaacf52615"
},
{
"ImportPath": "golang.org/x/crypto/ocsp",

View File

@ -11,9 +11,16 @@ import (
"os"
"regexp"
"strings"
"golang.org/x/net/idna"
)
const (
// Version identifies the current library version.
// This is a pro-forma convention given that Go dependencies
// tends to be fetched directly from the repo.
Version = "0.2.0"
NormalType = 1
WildcardType = 2
ExceptionType = 3
@ -26,10 +33,10 @@ const (
var DefaultList = NewList()
// DefaultRule is the default Rule that represents "*".
var DefaultRule = NewRule("*")
var DefaultRule = MustNewRule("*")
// DefaultParserOptions are the default options used to parse a Public Suffix list.
var DefaultParserOptions = &ParserOption{PrivateDomains: true}
var DefaultParserOptions = &ParserOption{PrivateDomains: true, ASCIIEncoded: false}
// DefaultFindOptions are the default options used to perform the lookup of rules in the list.
var DefaultFindOptions = &FindOptions{IgnorePrivate: false, DefaultRule: DefaultRule}
@ -45,7 +52,15 @@ type Rule struct {
// ParserOption are the options you can use to customize the way a List
// is parsed from a file or a string.
type ParserOption struct {
// Set to false to skip the private domains when parsing.
// Default to true, which means the private domains are included.
PrivateDomains bool
// Set to false if the input is encoded in U-labels (Unicode)
// as opposite to A-labels.
// Default to false, which means the list is containing Unicode domains.
// This is the default because the original PSL currently contains Unicode.
ASCIIEncoded bool
}
// FindOptions are the options you can use to customize the way a Rule
@ -119,7 +134,7 @@ func (l *List) AddRule(r *Rule) error {
return nil
}
// experimental
// Size returns the size of the list, which is the number of rules.
func (l *List) Size() int {
return len(l.rules)
}
@ -154,7 +169,18 @@ Scanning:
break
default:
rule := NewRule(line)
var rule *Rule
var err error
if options.ASCIIEncoded {
rule, err = NewRule(line)
} else {
rule, err = NewRuleUnicode(line)
}
if err != nil {
return []Rule{}, err
}
rule.Private = (section == 2)
l.AddRule(rule)
rules = append(rules, *rule)
@ -207,7 +233,9 @@ func (l *List) selectRules(name string, options *FindOptions) []Rule {
}
// NewRule parses the rule content, creates and returns a Rule.
func NewRule(content string) *Rule {
//
// The content of the rule MUST be encoded in ASCII (A-labels).
func NewRule(content string) (*Rule, error) {
var rule *Rule
var value string
@ -226,6 +254,28 @@ func NewRule(content string) *Rule {
value = content
rule = &Rule{Type: NormalType, Value: value, Length: len(Labels(value))}
}
return rule, nil
}
// NewRuleUnicode is like NewRule, but expects the content to be encoded in Unicode (U-labels).
func NewRuleUnicode(content string) (*Rule, error) {
var err error
content, err = idna.ToASCII(content)
if err != nil {
return nil, err
}
return NewRule(content)
}
// MustNewRule is like NewRule, but panics if the content cannot be parsed.
func MustNewRule(content string) *Rule {
rule, err := NewRule(content)
if err != nil {
panic(err)
}
return rule
}

File diff suppressed because it is too large Load Diff