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 }