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.

この辺りの内容を正規表現で表しているっぽい。

Published: 2017-08-09  /  Tags: Go  /  Share: X