main.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package main
  2. import (
  3. "fmt"
  4. "html/template"
  5. "log"
  6. "net/http"
  7. "os"
  8. "time"
  9. "github.com/gorilla/mux"
  10. "github.com/gorilla/sessions"
  11. )
  12. const (
  13. NOMYSQL = false
  14. INDEX_TEMPLATE = "ui\\templates\\index.html" //TODO в var структуру с парсом из файла JSON
  15. )
  16. var (
  17. logger *log.Logger
  18. dBConnector connection
  19. sessionsStore = sessions.NewCookieStore([]byte("mysecretcookie"))
  20. logInTemplate = template.Must(template.ParseFiles("ui\\templates\\login.html"))
  21. signInTemplate = template.Must(template.ParseFiles("ui\\templates\\signin.html"))
  22. gameTemplate = template.Must(template.ParseFiles("ui\\templates\\game.html"))
  23. requestRouter *mux.Router
  24. )
  25. func createLogger() {
  26. startTime := time.Now()
  27. logFileName := "logs/go-site_log_" + startTime.Format("2006-01-02_15-04-05") + ".txt"
  28. file, err := os.OpenFile(logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
  29. logger = log.New(file, "", log.Ldate|log.Ltime)
  30. if err != nil {
  31. log.Fatal(err)
  32. }
  33. }
  34. type justFilesFilesystem struct {
  35. fs http.FileSystem
  36. }
  37. func (fs justFilesFilesystem) Open(name string) (http.File, error) {
  38. f, err := fs.fs.Open(name)
  39. if err != nil {
  40. return nil, err
  41. }
  42. return neuteredReaddirFile{f}, nil
  43. }
  44. type neuteredReaddirFile struct {
  45. http.File
  46. }
  47. func (f neuteredReaddirFile) Readdir(count int) ([]os.FileInfo, error) {
  48. return nil, nil
  49. }
  50. func main() {
  51. createLogger()
  52. logger.Print("Hello, log file!")
  53. requestRouter = mux.NewRouter()
  54. dBConnector.Init("config.json")
  55. requestRouter.HandleFunc("/", indexHandler).Methods("GET")
  56. requestRouter.HandleFunc("/", indexPostHandler).Methods("POST") //Есть ли нужда в обработке POST для /
  57. requestRouter.HandleFunc("/login/", logInGetHandler).Methods("GET")
  58. requestRouter.HandleFunc("/login/", logInPostHandler).Methods("POST")
  59. requestRouter.HandleFunc("/logout/", logOutGetHandler).Methods("GET")
  60. requestRouter.HandleFunc("/signin/", signInGetHandler).Methods("GET")
  61. requestRouter.HandleFunc("/signin/", signInPostHandler).Methods("POST")
  62. requestRouter.HandleFunc("/game/", gameGetHandler).Methods("GET")
  63. requestRouter.HandleFunc("/game/", gamePostHandler).Methods("POST")
  64. requestRouter.HandleFunc("/files/torrents/{hash}.torrent", DownloadTorrentHandler).Methods("GET")
  65. fs := justFilesFilesystem{http.Dir("resources/")}
  66. http.Handle("/resources/", http.StripPrefix("/resources/", http.FileServer(fs)))
  67. http.Handle("/", requestRouter)
  68. fmt.Println("Starting web-listener")
  69. logger.Fatal(http.ListenAndServe(":8080", nil))
  70. }