main.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. RootUuid = "7e92ebbd-750f-4a34-ad62-bc6a4f47cbfa"
  15. //TODO в var структуру с парсом из файла JSON
  16. NewIndexTemplate = "ui\\templates\\newindex.html"
  17. TorrentList = "ui\\templates\\torrentlist.html"
  18. TorrentEntry = "ui\\templates\\torrententry.html"
  19. NewsList = "ui\\templates\\newslist.html"
  20. NewsEntry = "ui\\templates\\newsentry.html"
  21. )
  22. var (
  23. logger *log.Logger
  24. dBConnector connection
  25. sessionsStore = sessions.NewCookieStore([]byte("mysecretcookie"))
  26. logInTemplate = template.Must(template.ParseFiles("ui\\templates\\login.html"))
  27. signInTemplate = template.Must(template.ParseFiles("ui\\templates\\signin.html"))
  28. gameTemplate = template.Must(template.ParseFiles("ui\\templates\\game.html"))
  29. requestRouter *mux.Router
  30. )
  31. func createLogger() {
  32. startTime := time.Now()
  33. logFileName := "logs/go-site_log_" + startTime.Format("2006-01-02_15-04-05") + ".txt"
  34. file, err := os.OpenFile(logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
  35. logger = log.New(file, "", log.Ldate|log.Ltime)
  36. if err != nil {
  37. log.Fatal(err)
  38. }
  39. }
  40. type justFilesFilesystem struct {
  41. fs http.FileSystem
  42. }
  43. func (fs justFilesFilesystem) Open(name string) (http.File, error) {
  44. f, err := fs.fs.Open(name)
  45. if err != nil {
  46. return nil, err
  47. }
  48. return neuteredReaddirFile{f}, nil
  49. }
  50. type neuteredReaddirFile struct {
  51. http.File
  52. }
  53. func (f neuteredReaddirFile) Readdir(count int) ([]os.FileInfo, error) {
  54. return nil, nil
  55. }
  56. func main() {
  57. createLogger()
  58. logger.Print("Hello, log file!")
  59. requestRouter = mux.NewRouter()
  60. dBConnector.Init("config.json")
  61. requestRouter.HandleFunc("/", indexHandler).Methods("GET")
  62. requestRouter.HandleFunc("/", indexPostHandler).Methods("POST") //Есть ли нужда в обработке POST для /
  63. requestRouter.HandleFunc("/login/", logInGetHandler).Methods("GET")
  64. requestRouter.HandleFunc("/login/", logInPostHandler).Methods("POST")
  65. requestRouter.HandleFunc("/logout/", logOutGetHandler).Methods("GET")
  66. requestRouter.HandleFunc("/signin/", signInGetHandler).Methods("GET")
  67. requestRouter.HandleFunc("/signin/", signInPostHandler).Methods("POST")
  68. requestRouter.HandleFunc("/game/", gameGetHandler).Methods("GET")
  69. requestRouter.HandleFunc("/game/", gamePostHandler).Methods("POST")
  70. requestRouter.HandleFunc("/files/torrents/{hash}.torrent", DownloadTorrentHandler).Methods("GET")
  71. requestRouter.HandleFunc("/forum", ForumHandler).Methods("GET")
  72. requestRouter.HandleFunc(`/forum/{rest:[a-zA-Zа-яА-Я0-9=\-\/\_\.]+}`, ForumHandler).Methods("GET")
  73. fs := justFilesFilesystem{http.Dir("resources/")}
  74. http.Handle("/resources/", http.StripPrefix("/resources/", http.FileServer(fs)))
  75. http.Handle("/", requestRouter)
  76. fmt.Println("Starting web-listener")
  77. logger.Fatal(http.ListenAndServe(":8080", nil))
  78. }