diff options
Diffstat (limited to 'search/search.go')
-rw-r--r-- | search/search.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/search/search.go b/search/search.go new file mode 100644 index 0000000..1b297c3 --- /dev/null +++ b/search/search.go @@ -0,0 +1,56 @@ +// Copyright © 2022 siddharth ravikumar <s@ricketyspace.net> +// SPDX-License-Identifier: ISC + +package search + +import ( + "fmt" + "log" + "net/http" + "strings" + + "ricketyspace.net/peach/photon" + "ricketyspace.net/peach/version" +) + +type Search struct { + Title string + Version string + Location string + Message string + MatchingCoords []photon.Coordinates +} + +func NewSearch(r *http.Request) (*Search, error) { + s := new(Search) + s.Title = "search" + s.Version = version.Version + + if r.Method == "GET" { + return s, nil + } + + // Get location. + err := r.ParseForm() + if err != nil { + return s, fmt.Errorf("form: %v", err) + } + location := strings.TrimSpace(r.PostForm.Get("location")) + s.Location = location + if len(location) < 2 { + s.Message = "location invalid" + } + + // Try to fetch matching coordinates. + s.MatchingCoords, err = photon.Geocode(location) + if err != nil { + log.Printf("search: geocode: %v", err) + s.Message = "unable to lookup location" + return s, nil + } + if len(s.MatchingCoords) < 1 { + s.Message = "location not found" + return s, nil + } + return s, nil +} |