goaで指定するホスト名はRFC1035に準拠させること
2017-08-09 / Go
goaのコード読んでて気づいたのでメモ。
DSLのHost
APIが想定しているホスト名を指定するためのDSL(func)で、以下のように実装されている。
// Regular expression used to validate RFC1035 hostnames*/
var hostnameRegex = regexp.MustCompile(`^[[:alnum:]][[:alnum:]\-]{0,61}[[:alnum:]]|[[:alpha:]]$`)
// Host sets the API hostname.
func Host(host string) {
if !hostnameRegex.MatchString(host) {
dslengine.ReportError(`invalid hostname value "%s"`, host)
return
}
if a, ok := apiDefinition(); ok {
a.Host = host
}
}
入力されたホスト名に対して hostnameRegex
の正規表現にマッチするかのチェックを行っている。
RFC1035 とは
DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION ということで色々書いてある。
2.3.1. Preferred name syntax では以下のように言及されている。
They must start with a letter, end with a letter or digit,
and have as interior characters only letters, digits, and hyphen.
There are also some restrictions on the length.
Labels must be 63 characters or less.
この辺りの内容を正規表現で表しているっぽい。