package checker import ( "crypto/tls" "fmt" "math" "strings" "time" ) func FormatDomain(domain string) string { elements := strings.Split(domain, ":") if len(elements) == 1 { return fmt.Sprintf("%s:443", elements[0]) } return domain } func CheckCertificate(domain string) Domain { now := time.Now() conn, err := tls.Dial("tcp", FormatDomain(domain), nil) if err == nil { date := conn.ConnectionState().PeerCertificates[0].NotAfter daysLeft := date.Sub(now).Hours() / 24 return Domain{ Name: domain, DaysLeft: math.Floor(daysLeft), Date: date.Format(time.DateTime), } } return Domain{Name: domain, Failed: true} } func CheckCertificates(domains []string) []Domain { values := []Domain{} for _, domain := range domains { values = append(values, CheckCertificate(domain)) } return values }