Add depot, attendant, jetfire, optimus, ota services with kustomize overlays
This commit is contained in:
104
services/ota_update_go/handlers/cars_change_access.go
Normal file
104
services/ota_update_go/handlers/cars_change_access.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"otaupdate/services"
|
||||
|
||||
"github.com/fiskerinc/cloud-services/pkg/loggerdataresp"
|
||||
"github.com/fiskerinc/cloud-services/pkg/tmobile"
|
||||
"github.com/fiskerinc/cloud-services/pkg/vindecoder"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// HandleCarChangeAccess godoc
|
||||
// @Summary change access for a vin to connect to fisker cloud
|
||||
// @Description Note: when a VIN is added or removed, changes will take time to propagate to the network filters
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param Authorization header string false "Bearer <ID token>"
|
||||
// @Param Api-Key header string false "<API token>"
|
||||
// @Param data body CarChangeAccessInput true "car change access data"
|
||||
// @Success 200 {object} HandleCarsAllowedAccessResponse
|
||||
// @Failure 400 {object} common.JSONError "Bad request"
|
||||
// @Failure 401 {object} common.JSONError "Unauthorized"
|
||||
// @Failure 503 {object} common.JSONError "Service unavailable"
|
||||
// @Router /cars/change_access [post]
|
||||
func HandleCarChangeAccess(w http.ResponseWriter, r *http.Request) {
|
||||
ccai := CarChangeAccessInput{}
|
||||
err := json.NewDecoder(r.Body).Decode(&ccai)
|
||||
if loggerdataresp.BadDataErrorResp(w, err, http.StatusBadRequest) {
|
||||
return
|
||||
}
|
||||
|
||||
failedVINs := []string{}
|
||||
for _, vin := range ccai.VINs {
|
||||
ok := vindecoder.ValidateVINSimple(vin)
|
||||
if !ok {
|
||||
failedVINs = append(failedVINs, vin)
|
||||
}
|
||||
}
|
||||
if len(failedVINs) > 0 {
|
||||
errors.New(fmt.Sprintf("VINS Invalid, no changes made: %+v", failedVINs))
|
||||
loggerdataresp.BadDataErrorResp(w, err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
err = CarChangeAccess(ccai)
|
||||
if loggerdataresp.BadDataErrorResp(w, err, http.StatusBadRequest) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func CarChangeAccess(ccai CarChangeAccessInput) (err error) {
|
||||
// Add/Remove from the database
|
||||
if ccai.AllowCloudAccess != nil {
|
||||
if *ccai.AllowCloudAccess {
|
||||
err = services.GetDB().GetCars().WhitelistCars(ccai.VINs, ccai.Source)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
err = services.GetDB().GetCars().BlacklistCars(ccai.VINs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ccai.AllowTMobileAccess != nil {
|
||||
var miniClient *tmobile.TMobileMiniClient
|
||||
miniClient, err = tmobile.NewTMobileMiniClient()
|
||||
if err != nil {
|
||||
return errors.WithMessage(err, "Failed to Create TMOible Client")
|
||||
}
|
||||
|
||||
var iccids []string
|
||||
iccids, err = services.GetDB().GetCars().GetICCIDs(ccai.VINs)
|
||||
if err != nil {
|
||||
return errors.WithMessage(err, "Failed to get ICCIDs")
|
||||
}
|
||||
tmobileInput := tmobile.ChangeDeviceActivation{
|
||||
ICCIDs: iccids,
|
||||
Enabled: *ccai.AllowTMobileAccess,
|
||||
}
|
||||
|
||||
// Add/Remove from TMobile
|
||||
// TODO when T-Mobile gets back about access
|
||||
err = miniClient.ChangeDeviceStatus(context.Background(), tmobileInput)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
type CarChangeAccessInput struct {
|
||||
VINs []string `json:"vins"` // List of VINs that will be changed
|
||||
AllowCloudAccess *bool `json:"allow_cloud_access,omitempty"` // Cars can connect through gateway
|
||||
AllowTMobileAccess *bool `json:"allow_tmobile_access,omitempty"` // Cars get tmobile access
|
||||
Source string `json:"source,omitempty"`
|
||||
}
|
||||
Reference in New Issue
Block a user