55 lines
1 KiB
Go
55 lines
1 KiB
Go
package checker
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"fmt"
|
|
"math"
|
|
"strings"
|
|
"time"
|
|
|
|
"gitnet.fr/deblan/expiration-check/logger"
|
|
)
|
|
|
|
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
|
|
|
|
d := Domain{
|
|
Name: domain,
|
|
DaysLeft: math.Floor(daysLeft),
|
|
Date: date.Format(time.DateTime),
|
|
}
|
|
|
|
logger.Get().Logf(`CheckCertificate: domain="%s" value="%+v"`, domain, d)
|
|
|
|
return d
|
|
}
|
|
|
|
logger.Get().Logf("CheckCertificate: domain=%s err=%s", domain, err)
|
|
|
|
return Domain{Name: domain, Failed: true}
|
|
}
|
|
|
|
func CheckCertificates(domains []string) []Domain {
|
|
values := []Domain{}
|
|
|
|
for _, domain := range domains {
|
|
values = append(values, CheckCertificate(domain))
|
|
}
|
|
|
|
return values
|
|
}
|