Add support for comparing duration before certificate expiration

This commit is contained in:
Elouan Martinet 2020-11-15 18:33:09 +01:00
parent d50721c8f0
commit 7d97e83875
3 changed files with 14 additions and 0 deletions

View File

@ -35,6 +35,11 @@ const (
// Values that could replace the placeholder: true, false // Values that could replace the placeholder: true, false
ConnectedPlaceHolder = "[CONNECTED]" ConnectedPlaceHolder = "[CONNECTED]"
// CertificateExpirationPlaceholder is a placeholder for the duration before certificate expiration, in milliseconds.
//
// Values that could replace the placeholder: 4461677039 (~52 days)
CertificateExpirationPlaceholder = "[CERTIFICATE_EXPIRATION]"
// LengthFunctionPrefix is the prefix for the length function // LengthFunctionPrefix is the prefix for the length function
LengthFunctionPrefix = "len(" LengthFunctionPrefix = "len("
@ -142,6 +147,8 @@ func sanitizeAndResolve(list []string, result *Result) []string {
element = body element = body
case ConnectedPlaceHolder: case ConnectedPlaceHolder:
element = strconv.FormatBool(result.Connected) element = strconv.FormatBool(result.Connected)
case CertificateExpirationPlaceholder:
element = strconv.FormatInt(int64(result.CertificateExpiration.Milliseconds()), 10)
default: default:
// if contains the BodyPlaceHolder, then evaluate json path // if contains the BodyPlaceHolder, then evaluate json path
if strings.Contains(element, BodyPlaceHolder) { if strings.Contains(element, BodyPlaceHolder) {

View File

@ -169,6 +169,10 @@ func (service *Service) call(result *Result) {
result.Errors = append(result.Errors, err.Error()) result.Errors = append(result.Errors, err.Error())
return return
} }
if response.TLS != nil {
certificate := response.TLS.PeerCertificates[0]
result.CertificateExpiration = certificate.NotAfter.Sub(time.Now())
}
result.HTTPStatus = response.StatusCode result.HTTPStatus = response.StatusCode
result.Connected = response.StatusCode > 0 result.Connected = response.StatusCode > 0
result.Body, err = ioutil.ReadAll(response.Body) result.Body, err = ioutil.ReadAll(response.Body)

View File

@ -45,6 +45,9 @@ type Result struct {
// Timestamp when the request was sent // Timestamp when the request was sent
Timestamp time.Time `json:"timestamp"` Timestamp time.Time `json:"timestamp"`
// CertificateExpiration is the duration before the certificate expires
CertificateExpiration time.Duration `json:"certificate-expiration,omitempty"`
} }
// ConditionResult result of a Condition // ConditionResult result of a Condition