Files

52 lines
1.6 KiB
Go
Raw Permalink Normal View History

package saas
import (
"context"
"data-terminal-cloud/internal/devicefleet"
"data-terminal-cloud/internal/identity"
"errors"
"github.com/jackc/pgx/v5"
)
func (s *Service) FleetTenant(ctx context.Context, p identity.Principal, public string, mutate bool) (string, error) {
if s.Fleet == nil {
return "", errors.New("fleet unavailable")
}
a, err := resolveOpsFirmwareAccess(ctx, s.pool, p, public, mutate)
return a.tenantID, err
}
func (s *Service) FleetState(ctx context.Context, p identity.Principal, public, tenant string) (devicefleet.State, error) {
if s.Fleet == nil {
return devicefleet.State{}, errors.New("fleet unavailable")
}
var id string
if tenant != "" {
a, err := resolveOpsFirmwareAccess(ctx, s.pool, p, tenant, false)
if err != nil {
return devicefleet.State{}, err
}
if err = s.pool.QueryRow(ctx, `SELECT id::text FROM device WHERE public_id=$1 AND tenant_id=$2`, public, a.tenantID).Scan(&id); err != nil {
return devicefleet.State{}, ErrAccessDenied
}
} else {
a, _, err := resolveDevice(ctx, s.pool, p, public, identity.CapabilityHouseholdRead, false)
if err != nil {
return devicefleet.State{}, err
}
id = a.deviceID
}
return s.Fleet.State(ctx, id)
}
func (s *Service) FleetOTA(ctx context.Context, p identity.Principal, public, request string, code int64) (devicefleet.Task, error) {
if s.Fleet == nil {
return devicefleet.Task{}, errors.New("fleet unavailable")
}
return s.Fleet.Start(ctx, request, code, func(tx pgx.Tx) (string, error) {
a, _, err := resolveDevice(ctx, tx, p, public, identity.CapabilityDeviceManage, true)
if err != nil {
return "", err
}
return a.deviceID, nil
})
}