From 1951e39b63fddb91a63de4efc319856c5c39ce97 Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 12 Nov 2023 12:45:19 +0100 Subject: [PATCH] Support Pulsares Energy Manager (#10755) --- cmd/setup.go | 2 +- util/sponsor/auth.go | 7 +++++++ util/sponsor/pulsares.go | 27 +++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 util/sponsor/pulsares.go diff --git a/cmd/setup.go b/cmd/setup.go index 3e218ab2b..a90942d37 100644 --- a/cmd/setup.go +++ b/cmd/setup.go @@ -368,7 +368,7 @@ func configureEnvironment(cmd *cobra.Command, conf globalConfig) (err error) { } // setup sponsorship (allow env override) - if err == nil && conf.SponsorToken != "" { + if err == nil { err = sponsor.ConfigureSponsorship(conf.SponsorToken) } diff --git a/util/sponsor/auth.go b/util/sponsor/auth.go index 6cdf45393..acef59bd0 100644 --- a/util/sponsor/auth.go +++ b/util/sponsor/auth.go @@ -29,6 +29,13 @@ func IsAuthorizedForApi() bool { // check and set sponsorship token func ConfigureSponsorship(token string) error { + if token == "" { + var err error + if token, err = readSerial(); token == "" || err != nil { + return err + } + } + host := util.Getenv("GRPC_URI", cloud.Host) conn, err := cloud.Connection(host) if err != nil { diff --git a/util/sponsor/pulsares.go b/util/sponsor/pulsares.go new file mode 100644 index 000000000..a446110c3 --- /dev/null +++ b/util/sponsor/pulsares.go @@ -0,0 +1,27 @@ +package sponsor + +import ( + "os" + "time" +) + +func readSerial() (string, error) { + f, err := os.OpenFile("/dev/PulsaresSerial", os.O_RDWR, 0o644) + if err != nil { + return "", nil + } + + if _, err := f.Write([]byte{0x0E, 0x00, 0xD0, 0x05}); err != nil { + return "", err + } + + // serial timeout + time.AfterFunc(3*time.Second, func() { + _ = f.Close() + }) + + b := make([]byte, 512) + n, err := f.Read(b) + + return string(b[:n]), err +}