58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package common
|
|
|
|
import (
|
|
"crypto/x509"
|
|
"encoding/pem"
|
|
"fmt"
|
|
"time"
|
|
|
|
"fiskerinc.com/modules/common/dbbasemodel"
|
|
)
|
|
|
|
// CertificateRequest schema
|
|
const (
|
|
CertCharging string = "CHARGING"
|
|
CertICC string = "ICC"
|
|
CertTBOX string = "TBOX"
|
|
CertAftersales string = "AFTERSALES"
|
|
)
|
|
|
|
type Certificate struct {
|
|
PublicKey string `json:"public_key"`
|
|
CommonName string `json:"-" validate:"required"`
|
|
PrivateKey string `json:"private_key,omitempty" pg:"-"`
|
|
EncryptedKey []byte `json:"-" pg:"encrypted_key"`
|
|
SerialNumber string `json:"serial_number" pg:",pk"`
|
|
Type string `json:"type"`
|
|
Valid bool `json:"-" pg:",use_zero"`
|
|
CreatedBy string `json:"-" pg:"created_by"`
|
|
dbbasemodel.DBModelBase
|
|
}
|
|
|
|
func (cert Certificate) String() string {
|
|
return fmt.Sprintf("Certificate for Common Name:<%s>", cert.CommonName)
|
|
}
|
|
|
|
func (cert Certificate) IsExpiredOrInvalidAtTime(t time.Time, certDaysBeforeExp int) (bool, error) {
|
|
if !cert.Valid {
|
|
return true, nil
|
|
}
|
|
|
|
if cert.PublicKey != "" {
|
|
p, _ := pem.Decode([]byte(cert.PublicKey))
|
|
if p != nil {
|
|
c, err := x509.ParseCertificate(p.Bytes)
|
|
if err != nil {
|
|
return true, err
|
|
}
|
|
|
|
day := c.NotAfter.AddDate(0, 0, 0-certDaysBeforeExp)
|
|
if t.After(day) {
|
|
return true, nil
|
|
}
|
|
}
|
|
}
|
|
|
|
return false, nil
|
|
}
|