mirror of
https://github.com/empayre/fleet.git
synced 2024-11-07 01:15:22 +00:00
177 lines
4.7 KiB
Go
177 lines
4.7 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/fleetdm/fleet/v4/server/fleet"
|
|
"github.com/go-kit/kit/endpoint"
|
|
)
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Begin File Carve
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
type carveBeginRequest struct {
|
|
NodeKey string `json:"node_key"`
|
|
BlockCount int64 `json:"block_count"`
|
|
BlockSize int64 `json:"block_size"`
|
|
CarveSize int64 `json:"carve_size"`
|
|
CarveId string `json:"carve_id"`
|
|
RequestId string `json:"request_id"`
|
|
}
|
|
|
|
type carveBeginResponse struct {
|
|
SessionId string `json:"session_id"`
|
|
Success bool `json:"success,omitempty"`
|
|
Err error `json:"error,omitempty"`
|
|
}
|
|
|
|
func (r carveBeginResponse) error() error { return r.Err }
|
|
|
|
func makeCarveBeginEndpoint(svc fleet.Service) endpoint.Endpoint {
|
|
return func(ctx context.Context, request interface{}) (interface{}, error) {
|
|
req := request.(carveBeginRequest)
|
|
|
|
payload := fleet.CarveBeginPayload{
|
|
BlockCount: req.BlockCount,
|
|
BlockSize: req.BlockSize,
|
|
CarveSize: req.CarveSize,
|
|
CarveId: req.CarveId,
|
|
RequestId: req.RequestId,
|
|
}
|
|
|
|
carve, err := svc.CarveBegin(ctx, payload)
|
|
if err != nil {
|
|
return carveBeginResponse{Err: err}, nil
|
|
}
|
|
|
|
return carveBeginResponse{SessionId: carve.SessionId, Success: true}, nil
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Receive Block for File Carve
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
type carveBlockRequest struct {
|
|
NodeKey string `json:"node_key"`
|
|
BlockId int64 `json:"block_id"`
|
|
SessionId string `json:"session_id"`
|
|
RequestId string `json:"request_id"`
|
|
Data []byte `json:"data"`
|
|
}
|
|
|
|
type carveBlockResponse struct {
|
|
Success bool `json:"success,omitempty"`
|
|
Err error `json:"error,omitempty"`
|
|
}
|
|
|
|
func (r carveBlockResponse) error() error { return r.Err }
|
|
|
|
func makeCarveBlockEndpoint(svc fleet.Service) endpoint.Endpoint {
|
|
return func(ctx context.Context, request interface{}) (interface{}, error) {
|
|
req := request.(carveBlockRequest)
|
|
|
|
payload := fleet.CarveBlockPayload{
|
|
SessionId: req.SessionId,
|
|
RequestId: req.RequestId,
|
|
BlockId: req.BlockId,
|
|
Data: req.Data,
|
|
}
|
|
|
|
err := svc.CarveBlock(ctx, payload)
|
|
if err != nil {
|
|
return carveBlockResponse{Err: err}, nil
|
|
}
|
|
|
|
return carveBlockResponse{Success: true}, nil
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Get Carve
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
type getCarveRequest struct {
|
|
ID int64
|
|
}
|
|
|
|
type getCarveResponse struct {
|
|
Carve fleet.CarveMetadata `json:"carve"`
|
|
Err error `json:"error,omitempty"`
|
|
}
|
|
|
|
func (r getCarveResponse) error() error { return r.Err }
|
|
|
|
func makeGetCarveEndpoint(svc fleet.Service) endpoint.Endpoint {
|
|
return func(ctx context.Context, request interface{}) (interface{}, error) {
|
|
req := request.(getCarveRequest)
|
|
carve, err := svc.GetCarve(ctx, req.ID)
|
|
if err != nil {
|
|
return getCarveResponse{Err: err}, nil
|
|
}
|
|
|
|
return getCarveResponse{Carve: *carve}, nil
|
|
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// List Carves
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
type listCarvesRequest struct {
|
|
ListOptions fleet.CarveListOptions
|
|
}
|
|
|
|
type listCarvesResponse struct {
|
|
Carves []fleet.CarveMetadata `json:"carves"`
|
|
Err error `json:"error,omitempty"`
|
|
}
|
|
|
|
func (r listCarvesResponse) error() error { return r.Err }
|
|
|
|
func makeListCarvesEndpoint(svc fleet.Service) endpoint.Endpoint {
|
|
return func(ctx context.Context, request interface{}) (interface{}, error) {
|
|
req := request.(listCarvesRequest)
|
|
carves, err := svc.ListCarves(ctx, req.ListOptions)
|
|
if err != nil {
|
|
return listCarvesResponse{Err: err}, nil
|
|
}
|
|
|
|
resp := listCarvesResponse{}
|
|
for _, carve := range carves {
|
|
resp.Carves = append(resp.Carves, *carve)
|
|
}
|
|
return resp, nil
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Get Carve Block
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
type getCarveBlockRequest struct {
|
|
ID int64
|
|
BlockId int64
|
|
}
|
|
|
|
type getCarveBlockResponse struct {
|
|
Data []byte `json:"data"`
|
|
Err error `json:"error,omitempty"`
|
|
}
|
|
|
|
func (r getCarveBlockResponse) error() error { return r.Err }
|
|
|
|
func makeGetCarveBlockEndpoint(svc fleet.Service) endpoint.Endpoint {
|
|
return func(ctx context.Context, request interface{}) (interface{}, error) {
|
|
req := request.(getCarveBlockRequest)
|
|
data, err := svc.GetBlock(ctx, req.ID, req.BlockId)
|
|
if err != nil {
|
|
return getCarveBlockResponse{Err: err}, nil
|
|
}
|
|
|
|
return getCarveBlockResponse{Data: data}, nil
|
|
}
|
|
}
|