From d4471645a0749bc46aee62b83621bbede0bd2538 Mon Sep 17 00:00:00 2001 From: Emile Date: Thu, 29 Aug 2019 23:16:12 +0200 Subject: working implementation --- server.go | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 server.go (limited to 'server.go') diff --git a/server.go b/server.go new file mode 100644 index 0000000..5524b0a --- /dev/null +++ b/server.go @@ -0,0 +1,126 @@ +package main + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "log" + "os" + "strings" + + "net/http" + + TLE "git.darknebu.la/Satellite/TLE" + "github.com/gorilla/mux" +) + +var ( + categories []string +) + +func main() { + r := mux.NewRouter() + + r.HandleFunc("/", indexHandler) + r.HandleFunc("/dumpall", dumpallHandler) + r.HandleFunc("/{station}/{name}", getHandler) + + log.Fatal(http.ListenAndServe(":8080", r)) +} + +func indexHandler(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "%s", "

Hello World

") +} + +// dumpallHandler dumps all categories +func dumpallHandler(w http.ResponseWriter, r *http.Request) { + log.Println("[ ] Dumping all TLEs") + + // read the name of the categories from the categories.txt file and write + // the result to the categories slice + content, err := ioutil.ReadFile("categories.txt") + if err != nil { + log.Printf("%s", "could not read categories.txt file!") + } + lines := strings.Split(string(content), "\n") + + for _, line := range lines { + categories = append(categories, line) + } + + // download all the categories to the data/ directory + for _, category := range categories { + downloadCategory(category) + } + + log.Println("[+] Done dumping all TLEs") +} + +// downloadCategory downloads the given category from celestrack +func downloadCategory(categoryName string) { + + // define where to download the TLEs from + base := "https://celestrak.com/NORAD/elements/" + downloadURL := fmt.Sprintf("%s%s.txt", base, categoryName) + + // define the HTTP GET request and make it + resp, err := http.Get(downloadURL) + if err != nil { + log.Printf("Could not download %s", categoryName) + } + defer resp.Body.Close() + + // read the respose from the GET request + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + log.Printf("Could not read the category %s", categoryName) + } + + // write the response to the corresponding file + filename := fmt.Sprintf("data/%s.txt", categoryName) + f, err := os.Create(filename) // creating the file + if err != nil { + fmt.Printf("Could not create file data/%s.txt", categoryName) + } + _, err = f.WriteString(string(body)) // writing the TLE to the file + if err != nil { + fmt.Printf("Could not write to file data/%s.txt", categoryName) + } +} + +// get Handler returns the specified TLE +func getHandler(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + + // read the TLEs from the categories file + //content, err := ioutil.ReadFile("categories.txt") + //if err != nil { + // log.Println("Could note read categories.txt") + //} + + // handle the response according to the query parameter "format" + // if ?format=json is given, return + if r.URL.Query().Get("format") == "json" { + w.Header().Set("Content-Type", "application/json") + + RawTLE := `ISS (ZARYA) +1 25544U 98067A 19229.39083552 .00000228 00000-0 11917-4 0 9993 +2 25544 51.6447 57.6210 0007373 294.0868 138.8050 15.50381554184754` + + JsonTLE, err := TLE.NewTLE(RawTLE) + if err != nil { + fmt.Println(err) + } + + // convert the TLE to json + b, err := json.MarshalIndent(JsonTLE, "", " ") + if err != nil { + fmt.Println("error: ", err) + } + fmt.Fprintf(w, string(b)) + //fmt.Fprintf(w, "{\"response\": \"Getting the TLE for %s/%s as json\"}", vars["station"], vars["name"]) + } else { + fmt.Fprintf(w, "Getting the TLE for %s/%s raw", vars["station"], vars["name"]) + } + +} -- cgit 1.4.1