package main import ( "fmt" "html/template" "log" "net/http" "os" "time" "github.com/gorilla/mux" "github.com/gorilla/sessions" ) const ( NOMYSQL = false RootUuid = "7e92ebbd-750f-4a34-ad62-bc6a4f47cbfa" //TODO в var структуру с парсом из файла JSON NewIndexTemplate = "ui\\templates\\newindex.html" TorrentList = "ui\\templates\\torrentlist.html" TorrentEntry = "ui\\templates\\torrententry.html" NewsList = "ui\\templates\\newslist.html" NewsEntry = "ui\\templates\\newsentry.html" ) var ( logger *log.Logger dBConnector connection sessionsStore = sessions.NewCookieStore([]byte("mysecretcookie")) logInTemplate = template.Must(template.ParseFiles("ui\\templates\\login.html")) signInTemplate = template.Must(template.ParseFiles("ui\\templates\\signin.html")) gameTemplate = template.Must(template.ParseFiles("ui\\templates\\game.html")) requestRouter *mux.Router ) func createLogger() { startTime := time.Now() logFileName := "logs/go-site_log_" + startTime.Format("2006-01-02_15-04-05") + ".txt" file, err := os.OpenFile(logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) logger = log.New(file, "", log.Ldate|log.Ltime) if err != nil { log.Fatal(err) } } type justFilesFilesystem struct { fs http.FileSystem } func (fs justFilesFilesystem) Open(name string) (http.File, error) { f, err := fs.fs.Open(name) if err != nil { return nil, err } return neuteredReaddirFile{f}, nil } type neuteredReaddirFile struct { http.File } func (f neuteredReaddirFile) Readdir(count int) ([]os.FileInfo, error) { return nil, nil } func main() { createLogger() logger.Print("Hello, log file!") requestRouter = mux.NewRouter() dBConnector.Init("config.json") requestRouter.HandleFunc("/", indexHandler).Methods("GET") requestRouter.HandleFunc("/", indexPostHandler).Methods("POST") //Есть ли нужда в обработке POST для / requestRouter.HandleFunc("/login/", logInGetHandler).Methods("GET") requestRouter.HandleFunc("/login/", logInPostHandler).Methods("POST") requestRouter.HandleFunc("/logout/", logOutGetHandler).Methods("GET") requestRouter.HandleFunc("/signin/", signInGetHandler).Methods("GET") requestRouter.HandleFunc("/signin/", signInPostHandler).Methods("POST") requestRouter.HandleFunc("/game/", gameGetHandler).Methods("GET") requestRouter.HandleFunc("/game/", gamePostHandler).Methods("POST") requestRouter.HandleFunc("/files/torrents/{hash}.torrent", DownloadTorrentHandler).Methods("GET") requestRouter.HandleFunc("/forum", ForumHandler).Methods("GET") requestRouter.HandleFunc(`/forum/{rest:[a-zA-Zа-яА-Я0-9=\-\/\_\.]+}`, ForumHandler).Methods("GET") fs := justFilesFilesystem{http.Dir("resources/")} http.Handle("/resources/", http.StripPrefix("/resources/", http.FileServer(fs))) http.Handle("/", requestRouter) fmt.Println("Starting web-listener") logger.Fatal(http.ListenAndServe(":8080", nil)) }