74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
// Copyright 2023 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/signalapp/svr2/web/client"
|
|
"google.golang.org/protobuf/encoding/protojson"
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
pb "github.com/signalapp/svr2/proto"
|
|
)
|
|
|
|
var (
|
|
addr = flag.String("addr", "localhost:8081", "Address (hostname:port) where control server is listening")
|
|
binary = flag.Bool("bin", false, "If true, assume a binary formatted proto file. Otherwise, protojson")
|
|
)
|
|
|
|
func main() {
|
|
flag.Usage = func() {
|
|
fmt.Fprint(flag.CommandLine.Output(), "Issue a control command for a HostToEnclaveRequest proto \n")
|
|
fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s [flags] proto_filename \n", os.Args[0])
|
|
flag.PrintDefaults()
|
|
}
|
|
flag.Parse()
|
|
if flag.NArg() == 0 {
|
|
flag.Usage()
|
|
os.Exit(1)
|
|
}
|
|
|
|
bs, err := requestBody(flag.Args()[0])
|
|
if err != nil {
|
|
fmt.Fprint(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
cc := client.ControlClient{Addr: *addr}
|
|
resp, err := cc.DoJSON(bs)
|
|
if err != nil {
|
|
fmt.Fprint(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|
|
fmt.Fprintln(os.Stderr, "successfully executed control request")
|
|
fmt.Println(protojson.Format(resp))
|
|
}
|
|
|
|
func requestBody(filename string) ([]byte, error) {
|
|
bs, err := os.ReadFile(filename)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to read file : %v", err)
|
|
}
|
|
|
|
request := pb.HostToEnclaveRequest{}
|
|
if *binary {
|
|
err = proto.Unmarshal(bs, &request)
|
|
} else {
|
|
err = protojson.Unmarshal(bs, &request)
|
|
}
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to parse proto : %v", err)
|
|
}
|
|
if !*binary {
|
|
return bs, nil
|
|
}
|
|
if bs, err = protojson.Marshal(&request); err != nil {
|
|
return nil, fmt.Errorf("failed to marshal proto : %v", err)
|
|
}
|
|
return bs, nil
|
|
}
|