package main import ( "flag" "html/template" "log" "net/http" "time" ) var host = flag.String("h", "localhost", "host") var port = flag.String("p", "80", "port") var url = flag.String("b", "", "API URL") var app Application var errorPage = template.Must(template.ParseFiles("./html/error.html")) func serveIndex(w http.ResponseWriter, r *http.Request) { t := template.Must(template.ParseFiles("./html/index.html")) t.Execute(w, app.Languages) } func displaySearchResults(w http.ResponseWriter, r *http.Request) { var info SearchInfo info.GetInfoFromRequest(r) if info.Phrase == "" { errorPage.Execute(w, "You need to enter search phrase!") return } if info.LanguageCode != "" && !app.checkLanguage(info.LanguageCode) { errorPage.Execute(w, "Language not valid!") return } tms := app.getTMs(info.LanguageCode) if len(tms) == 0 { errorPage.Execute(w, "Couldn't get TMs!") return } searchResults := app.search(tms, info.Phrase) info.ResultsServed = searchResults.TotalResults writeLog(info) if len(searchResults.Results) == 0 { errorPage.Execute(w, "Nothing found!") return } t := template.Must(template.New("results.html").ParseFiles("./html/results.html")) t.Execute(w, searchResults) } func displayTMs(w http.ResponseWriter, r *http.Request) { var info SearchInfo info.GetInfoFromRequest(r) if info.LanguageCode != "" && !app.checkLanguage(info.LanguageCode) { errorPage.Execute(w, "Language not valid!") return } TMList := app.getTMs(info.LanguageCode) info.ResultsServed = len(TMList) writeLog(info) if info.ResultsServed == 0 { errorPage.Execute(w, "No TMs to display!") return } t := template.Must(template.New("tms.html").ParseFiles("./html/tms.html")) t.Execute(w, TMList) } func main() { flag.Parse() if *url == "" { log.Fatalln("Can't do anything without URL to API") } app.setBaseURL(*url) status, err := app.login() if !status || err != nil { log.Fatalf("Couldn't log in: %s", err) } if !app.loadLanguages() { log.Fatal("Couldn't load languages!") } app.Delay = time.Duration(20 * time.Second) hostname := *host + ":" + *port http.HandleFunc("/", serveIndex) http.HandleFunc("/q", displaySearchResults) http.HandleFunc("/tms", displayTMs) http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) log.Fatal(http.ListenAndServe(hostname, nil)) }