81 lines
1.5 KiB
Go
81 lines
1.5 KiB
Go
package whois
|
|
|
|
import "strings"
|
|
|
|
func buildResultMeta(r Result, source, server string) ResultMeta {
|
|
if strings.TrimSpace(source) == "" {
|
|
source = "whois"
|
|
}
|
|
meta := ResultMeta{
|
|
Source: strings.TrimSpace(source),
|
|
Server: strings.TrimSpace(server),
|
|
RawLen: len(r.rawData),
|
|
}
|
|
meta.ReasonCode, meta.Reason = classifyResultReason(r)
|
|
meta.QualityScore = scoreResultQuality(r, meta.ReasonCode)
|
|
return meta
|
|
}
|
|
|
|
func classifyResultReason(r Result) (ErrorCode, string) {
|
|
raw := strings.TrimSpace(r.rawData)
|
|
if raw == "" {
|
|
return ErrorCodeEmptyResponse, "empty response"
|
|
}
|
|
if !r.exists {
|
|
if rawHasAccessDenied(raw) {
|
|
return ErrorCodeAccessDenied, "access denied"
|
|
}
|
|
if rawHasNotFound(raw) {
|
|
return ErrorCodeNotFound, "not found"
|
|
}
|
|
return ErrorCodeNotFound, "not found"
|
|
}
|
|
|
|
score := scoreResultQuality(r, ErrorCodeOK)
|
|
if score < 60 {
|
|
return ErrorCodeParseWeak, "weak parse"
|
|
}
|
|
return ErrorCodeOK, "ok"
|
|
}
|
|
|
|
func scoreResultQuality(r Result, code ErrorCode) int {
|
|
switch code {
|
|
case ErrorCodeEmptyResponse:
|
|
return 0
|
|
case ErrorCodeAccessDenied:
|
|
return 10
|
|
case ErrorCodeNotFound:
|
|
return 20
|
|
}
|
|
|
|
score := 40
|
|
if strings.TrimSpace(r.domain) != "" {
|
|
score += 15
|
|
}
|
|
if strings.TrimSpace(r.registrar) != "" {
|
|
score += 10
|
|
}
|
|
if len(r.nsServers) > 0 {
|
|
score += 10
|
|
}
|
|
if len(r.statusRaw) > 0 {
|
|
score += 5
|
|
}
|
|
if r.hasRegisterDate {
|
|
score += 7
|
|
}
|
|
if r.hasExpireDate {
|
|
score += 7
|
|
}
|
|
if r.hasUpdateDate {
|
|
score += 6
|
|
}
|
|
if score > 100 {
|
|
score = 100
|
|
}
|
|
if score < 0 {
|
|
score = 0
|
|
}
|
|
return score
|
|
}
|