server.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package main
  2. import (
  3. "flag"
  4. "html/template"
  5. "log"
  6. "net/http"
  7. "time"
  8. )
  9. var host = flag.String("h", "localhost", "host")
  10. var port = flag.String("p", "80", "port")
  11. var url = flag.String("b", "", "API URL")
  12. var app Application
  13. var errorPage = template.Must(template.ParseFiles("./html/error.html"))
  14. func serveIndex(w http.ResponseWriter, r *http.Request) {
  15. t := template.Must(template.ParseFiles("./html/index.html"))
  16. t.Execute(w, app.Languages)
  17. }
  18. func displaySearchResults(w http.ResponseWriter, r *http.Request) {
  19. var info SearchInfo
  20. info.GetInfoFromRequest(r)
  21. if info.Phrase != "" {
  22. var searchResults SearchResults
  23. if info.LanguageCode == "" || app.checkLanguage(info.LanguageCode) {
  24. searchResults = app.search(app.GetTMs(info.LanguageCode), info.Phrase)
  25. info.ResultsServed = searchResults.TotalResults
  26. writeLog(info)
  27. } else {
  28. errorPage.Execute(w, "Language not valid!")
  29. return
  30. }
  31. if len(searchResults.Results) > 0 {
  32. t := template.Must(template.New("results.html").ParseFiles("./html/results.html"))
  33. t.Execute(w, searchResults)
  34. } else {
  35. errorPage.Execute(w, "Nothing found!")
  36. }
  37. } else {
  38. errorPage.Execute(w, "You need to enter search phrase!")
  39. }
  40. }
  41. func displayTMs(w http.ResponseWriter, r *http.Request) {
  42. var info SearchInfo
  43. info.GetInfoFromRequest(r)
  44. var TMList []TM
  45. if info.LanguageCode == "" || app.checkLanguage(info.LanguageCode) {
  46. TMList = app.GetTMs(info.LanguageCode)
  47. info.ResultsServed = len(TMList)
  48. writeLog(info)
  49. } else {
  50. errorPage.Execute(w, "Language not valid!")
  51. return
  52. }
  53. if len(TMList) > 0 {
  54. t := template.Must(template.New("tms.html").ParseFiles("./html/tms.html"))
  55. t.Execute(w, TMList)
  56. } else {
  57. errorPage.Execute(w, "No TMs to display!")
  58. }
  59. }
  60. func main() {
  61. flag.Parse()
  62. if *url == "" {
  63. log.Fatalln("Can't do anything without URL to API")
  64. }
  65. app.setBaseURL(*url)
  66. status, err := app.login()
  67. if !status || err != nil {
  68. log.Fatalf("Couldn't log in: %s", err)
  69. }
  70. app.loadLanguages()
  71. app.Delay = time.Duration(20 * time.Second)
  72. hostname := *host + ":" + *port
  73. http.HandleFunc("/", serveIndex)
  74. http.HandleFunc("/q", displaySearchResults)
  75. http.HandleFunc("/tms", displayTMs)
  76. http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
  77. log.Fatal(http.ListenAndServe(hostname, nil))
  78. }