about summary refs log tree commit diff
path: root/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'server.go')
-rw-r--r--server.go126
1 files changed, 126 insertions, 0 deletions
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", "<h1>Hello World</h1>")
+}
+
+// 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/<category name> 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"])
+	}
+
+}