119 lines
2.8 KiB
Go
119 lines
2.8 KiB
Go
package handlers
|
|
|
|
import (
|
|
"github.com/fiskerinc/cloud-services/services/depot/services"
|
|
|
|
"github.com/fiskerinc/cloud-services/pkg/common"
|
|
fv "github.com/fiskerinc/cloud-services/pkg/flashpackversion"
|
|
"github.com/fiskerinc/cloud-services/pkg/logger"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// get vehicle settings
|
|
func getSettings(db *services.DB, vin string) ([]common.CarSetting, error) {
|
|
settings, err := db.GetCars().GetVehicleSpecificSettings(&common.CarToDriver{
|
|
VIN: vin,
|
|
})
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
osVersionSetting, err := getOSVersion(vin)
|
|
if err == nil && osVersionSetting != nil {
|
|
settings = append(settings, *osVersionSetting)
|
|
} else {
|
|
logger.Error().Msgf("failed to get os version %v", err)
|
|
}
|
|
|
|
flashpackNumber, err := getFlashpackNumber(vin)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
if flashpackNumber != nil {
|
|
settings = append(settings, *flashpackNumber)
|
|
} else {
|
|
logger.Warn().Msgf("no flashpack number yet for vin %s because not enough ECUs have been updated", vin)
|
|
}
|
|
|
|
certNeedsRenewal, err := services.GetCertService().CheckCertificateNeedsRenewal(vin, common.CertICC)
|
|
if err != nil {
|
|
logger.Error().Msgf("failed to check for certificate renewal %v", err)
|
|
} else if certNeedsRenewal {
|
|
logger.Debug().Msg("ICC cert for vin " + vin + " is out of date")
|
|
|
|
settings = append(settings, common.CarSetting{
|
|
Name: "certificates",
|
|
Value: "expired",
|
|
Type: "string",
|
|
})
|
|
}
|
|
|
|
clearSettings(settings)
|
|
return settings, nil
|
|
}
|
|
|
|
// Get the OS version given a vin
|
|
func getOSVersion(vin string) (*common.CarSetting, error) {
|
|
sumsVersion, err := getSUMS(vin)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sumsDB := services.GetDB().GetUpdateManifestSUMSVersions()
|
|
sums, err := sumsDB.Select(sumsVersion)
|
|
if err != nil {
|
|
logger.Error().Msgf("can not load SUMS, %v", err)
|
|
return nil, err
|
|
}
|
|
|
|
cs := common.CarSetting{
|
|
Name: "os_version",
|
|
Value: sums.OSVersion,
|
|
Type: "string",
|
|
}
|
|
cs.CreatedAt = sums.CreatedAt
|
|
cs.UpdatedAt = sums.UpdatedAt
|
|
|
|
return &cs, nil
|
|
}
|
|
|
|
// Get the SUMS version from update manifest for a given vin
|
|
func getSUMS(vin string) (sumsVersion string, err error) {
|
|
carsDB := services.GetDB().GetCars()
|
|
car, err := carsDB.SelectByVIN(vin)
|
|
if err != nil {
|
|
logger.Err(err).Msgf("failed in getSUMS(vin string) for car %s to fetch car", vin)
|
|
return
|
|
}
|
|
|
|
return car.SUMSVersion, err
|
|
}
|
|
|
|
// Get the flash pack number
|
|
func getFlashpackNumber(vin string) (*common.CarSetting, error) {
|
|
cars := services.GetDB().GetCars()
|
|
|
|
car, err := cars.SelectByVIN(vin)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
flashpackNumber, err := fv.FindCurrentFlashpackVersionForCar(cars, *car)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if flashpackNumber != "" {
|
|
cs := &common.CarSetting{
|
|
Name: "flashpack_number",
|
|
Value: flashpackNumber,
|
|
Type: "string",
|
|
}
|
|
|
|
return cs, nil
|
|
}
|
|
|
|
return nil, nil
|
|
}
|