From e6a1baa32b6fa2f3df9afcacbf9e126b7e15196a Mon Sep 17 00:00:00 2001 From: Yannick Ulrich Date: Fri, 21 Oct 2022 23:08:29 +0100 Subject: [PATCH] Validate navigation parameters before passing them on --- infinitime.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/infinitime.go b/infinitime.go index 1089846..23ceae7 100644 --- a/infinitime.go +++ b/infinitime.go @@ -62,6 +62,41 @@ var charNames = map[string]string{ NavProgressChar: "Navigation Progress", } +var NavFlagNames = []string{ + "arrive", "arrive-left", "arrive-right", "arrive-straight", + "close", + "continue", "continue-left", "continue-right", "continue-slight-left", + "continue-slight-right", "continue-straight", "continue-uturn", + "depart", "depart-left", "depart-right", "depart-straight", + "end-of-road-left", "end-of-road-right", + "ferry", "flag", + "fork", "fork-left", "fork-right", "fork-straight", + "fork-slight-left", "fork-slight-right", + "invalid", "invalid-left", "invalid-right", + "invalid-slight-left", "invalid-slight-right", + "invalid-straight", "invalid-uturn", + "merge-left", "merge-right", "merge-slight-left", + "merge-slight-right", "merge-straight", + "new-name-left", "new-name-right", "new-name-sharp-left", "new-name-sharp-right", + "new-name-slight-left", "new-name-slight-right", "new-name-straight", + "notification-left", "notification-right", + "notification-sharp-left", "notification-sharp-right", + "notification-slight-left", "notification-slight-right", + "notification-straight", + "off-ramp-left", "off-ramp-right", "off-ramp-sharp-left", "off-ramp-sharp-right", + "off-ramp-slight-left", "off-ramp-slight-right", "off-ramp-straight", + "on-ramp-left", "on-ramp-right", "on-ramp-sharp-left", "on-ramp-sharp-right", + "on-ramp-slight-left", "on-ramp-slight-right", "on-ramp-straight", + "rotary", "rotary-left", "rotary-right", "rotary-sharp-left", "rotary-sharp-right", + "rotary-slight-left", "rotary-slight-right", "rotary-straight", + "roundabout", "roundabout-left", "roundabout-right", + "roundabout-sharp-left", "roundabout-sharp-right", + "roundabout-slight-left", "roundabout-slight-right", "roundabout-straight", + "turn-left", "turn-right", "turn-sharp-left", "turn-sharp-right", + "turn-slight-left", "turn-slight-right", "turn-stright", + "updown", "uturn", +} + type NavigationEvent struct { flag string narrative string @@ -99,6 +134,8 @@ var ( ErrNotConnected = errors.New("not connected") ErrNoTimelineHeader = errors.New("events must contain the timeline header") ErrPairTimeout = errors.New("reached timeout while pairing") + ErrNavProgress = errors.New("progress needs to between 0 and 100") + ErrNavInvalidFlag = errors.New("this flag is invalid") ) type ErrCharNotAvail struct { @@ -751,8 +788,24 @@ func (i *Device) Notify(title, body string) error { ) } +func CheckValidNavFlag(flag string) error { + for _, v := range NavFlagNames { + if v == flag { + return nil + } + } + return ErrNavInvalidFlag +} + // Navigation sends a NavigationEvent to the watch func (i *Device) Navigation(flag string, narrative string, dist string, progress uint8) error { + if progress > 100 { + return ErrNavProgress + } + if err := CheckValidNavFlag(flag); err != nil { + return err + } + if flag != i.navigationEv.flag { log.Debug().Str("func", "Navigation"). Msg("Sending flag")