Skip to content

Commit 133ad28

Browse files
committed
Created scaffolding to implement certificate upload via plugin
1 parent a921bce commit 133ad28

File tree

1 file changed

+34
-23
lines changed

1 file changed

+34
-23
lines changed

Diff for: cli/certificates/flash.go

+34-23
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ package certificates
2121
import (
2222
"bytes"
2323
"fmt"
24+
"io"
2425
"os"
2526
"strings"
2627
"time"
@@ -31,6 +32,7 @@ import (
3132
"github.com/arduino/arduino-fwuploader/cli/globals"
3233
"github.com/arduino/arduino-fwuploader/flasher"
3334
"github.com/arduino/arduino-fwuploader/indexes/download"
35+
"github.com/arduino/arduino-fwuploader/indexes/firmwareindex"
3436
"github.com/arduino/go-paths-helper"
3537
"github.com/sirupsen/logrus"
3638
"github.com/spf13/cobra"
@@ -65,23 +67,37 @@ func runFlash(cmd *cobra.Command, args []string) {
6567
// at the end cleanup the fwuploader temp dir
6668
defer globals.FwUploaderPath.RemoveAll()
6769

68-
packageIndex, firmwareIndex := common.InitIndexes()
6970
common.CheckFlags(commonFlags.Fqbn, commonFlags.Address)
71+
if len(certificateURLs) == 0 && len(certificatePaths) == 0 {
72+
feedback.Fatal("Error during certificates flashing: no certificates provided", feedback.ErrBadArgument)
73+
}
74+
75+
packageIndex, firmwareIndex := common.InitIndexes()
7076
board := common.GetBoard(firmwareIndex, commonFlags.Fqbn)
7177
uploadToolDir := common.DownloadRequiredToolsForBoard(packageIndex, board)
7278

73-
if len(certificateURLs) == 0 && len(certificatePaths) == 0 {
74-
feedback.Fatal("Error during certificates flashing: no certificates provided", feedback.ErrBadArgument)
79+
var res *flasher.FlashResult
80+
var err error
81+
if !board.IsPlugin() {
82+
res, err = flashCertificates(board, uploadToolDir)
83+
} else {
84+
// TODO
7585
}
7686

87+
feedback.PrintResult(res)
88+
if err != nil {
89+
os.Exit(int(feedback.ErrGeneric))
90+
}
91+
}
92+
93+
func flashCertificates(board *firmwareindex.IndexBoard, uploadToolDir *paths.Path) (*flasher.FlashResult, error) {
7794
loaderSketchPath, err := download.DownloadSketch(board.LoaderSketch)
7895
if err != nil {
7996
feedback.Fatal(fmt.Sprintf("Error downloading loader sketch from %s: %s", board.LoaderSketch.URL, err), feedback.ErrGeneric)
8097
}
8198
logrus.Debugf("loader sketch downloaded in %s", loaderSketchPath.String())
8299

83100
loaderSketch := strings.ReplaceAll(loaderSketchPath.String(), loaderSketchPath.Ext(), "")
84-
85101
programmerOut, programmerErr, err := common.FlashSketch(board, loaderSketch, uploadToolDir, commonFlags.Address)
86102
if err != nil {
87103
feedback.FatalError(err, feedback.ErrGeneric)
@@ -109,38 +125,33 @@ func runFlash(cmd *cobra.Command, args []string) {
109125
err = fmt.Errorf("unknown module: %s", moduleName)
110126
}
111127
if err != nil {
112-
113128
feedback.Fatal(fmt.Sprintf("Error during certificates flashing: %s", err), feedback.ErrGeneric)
114129
}
115130
defer f.Close()
116131

117132
// now flash the certificate
118133
certFileList := paths.NewPathList(certificatePaths...)
134+
flasherOut := new(bytes.Buffer)
135+
flasherErr := new(bytes.Buffer)
119136
if feedback.GetFormat() == feedback.JSON {
120-
flasherOut := new(bytes.Buffer)
121-
flasherErr := new(bytes.Buffer)
122137
err = f.FlashCertificates(&certFileList, certificateURLs, flasherOut)
123138
if err != nil {
124139
flasherErr.Write([]byte(fmt.Sprintf("Error during certificates flashing: %s", err)))
125140
}
126-
// Print the results
127-
feedback.PrintResult(&flasher.FlashResult{
128-
Programmer: (&flasher.ExecOutput{
129-
Stdout: programmerOut.String(),
130-
Stderr: programmerErr.String(),
131-
}),
132-
Flasher: (&flasher.ExecOutput{
133-
Stdout: flasherOut.String(),
134-
Stderr: flasherErr.String(),
135-
}),
136-
})
137-
if err != nil {
138-
os.Exit(int(feedback.ErrGeneric))
139-
}
140141
} else {
141-
err = f.FlashCertificates(&certFileList, certificateURLs, os.Stdout)
142+
err = f.FlashCertificates(&certFileList, certificateURLs, io.MultiWriter(flasherOut, os.Stdout))
142143
if err != nil {
143-
feedback.Fatal(fmt.Sprintf("Error during certificates flashing: %s", err), feedback.ErrGeneric)
144+
os.Stderr.Write([]byte(fmt.Sprintf("Error during certificates flashing: %s", err)))
144145
}
145146
}
147+
return &flasher.FlashResult{
148+
Programmer: &flasher.ExecOutput{
149+
Stdout: programmerOut.String(),
150+
Stderr: programmerErr.String(),
151+
},
152+
Flasher: &flasher.ExecOutput{
153+
Stdout: flasherOut.String(),
154+
Stderr: flasherErr.String(),
155+
},
156+
}, err
146157
}

0 commit comments

Comments
 (0)