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))
}