70 lines
2.0 KiB
Go
70 lines
2.0 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
"main/mvc/controllers"
|
||
"main/mvc/controllers/controllers_pages"
|
||
"main/mvc/models"
|
||
"main/tools"
|
||
"net/http"
|
||
)
|
||
|
||
func main() {
|
||
var err error
|
||
var app *models.App
|
||
|
||
// Инициализация приложения
|
||
if app, err = models.InitApp(); err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
|
||
// Добавление префикса в виде домена сервера к записям в лог
|
||
log.SetPrefix(fmt.Sprintf("%s | ", app.Cfg.ServerDomain))
|
||
|
||
// Настройка маршрутов
|
||
router := setupRoutes(app)
|
||
|
||
// Запуск сервера
|
||
if ok, err := tools.IsIPInUse(app.Cfg.ServerIP); err != nil {
|
||
log.Fatal(err)
|
||
} else if ok {
|
||
runServer(app.Cfg.ServerIP, app.Cfg.ServerPort, router)
|
||
} else {
|
||
runServer(app.Cfg.LocalIP, app.Cfg.LocalPort, router)
|
||
}
|
||
}
|
||
|
||
// Настраивает маршруты
|
||
func setupRoutes(app *models.App) *http.ServeMux {
|
||
router := http.NewServeMux()
|
||
|
||
// Цепочка обработчиков, которые сработают до отдачи страницы юзеру
|
||
m := controllers.MiddlewaresChain
|
||
|
||
// Обработка статических файлов
|
||
router.Handle(app.Cfg.AssetsDir, m(controllers.StaticHandler()))
|
||
|
||
// Главные странички
|
||
{
|
||
// Обработка главной страницы
|
||
router.Handle("/", m(controllers_pages.MainPageHandler(app)))
|
||
// Обработка страницы со списком постов
|
||
router.Handle("/posts/", m(controllers_pages.PostsPageHandler(app)))
|
||
// Обработка страничек постов
|
||
for key := range app.Posts {
|
||
postLink := string(key)
|
||
router.Handle(postLink, m(controllers_pages.PostPageHandler(app)))
|
||
}
|
||
}
|
||
|
||
return router
|
||
}
|
||
|
||
// Запускает сервер на указанном IP, PORT
|
||
func runServer(ip, port string, router http.Handler) {
|
||
addr := ip + port
|
||
log.Println("Run on", addr)
|
||
log.Fatal(http.ListenAndServe(addr, router))
|
||
}
|