package controllers_pages import ( "log" "main/mvc/models" "main/mvc/models/models_pages" "main/tools" "net/http" ) // Обработчик главной страницы func MainPageHandler(app *models.App) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var err error // Количество запросов, обработанных сервером за 24ч if r.Method == "COUNT" { var count []byte if count, err = tools.GetJournalctlLogsCount("server", app.Cfg.ServerDomain, 24); err != nil { log.Printf("%s", err.Error()) } sendCount(w, count) return } // Пасхалка if r.Method == "LOVE" { sendLove(w) return } // Пасхалка 2 if r.Method == "LIMINAL" { sendLiminal(w) return } // Страничка рендерится только если ее нет в кэше page, ok := app.PagesCache.Get(models_pages.MainPageTmplName) if !ok { pageData, err := models_pages.RenderMainPage(app.Templates, app.Version) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } ETag := models.GenerateETag(pageData) page = &models.Page{Data: pageData, ETag: ETag} app.PagesCache.Set(models_pages.MainPageTmplName, page) } sendMainPage(r, w, page) }) } // Отправляет страницу func sendMainPage(r *http.Request, w http.ResponseWriter, page *models.Page) { w.Header().Set("Cache-Control", "public, max-age=31536000") w.Header().Set("ETag", page.ETag) w.Header().Set("Content-Type", "text/html; charset=utf-8") if match := r.Header.Get("If-None-Match"); match == page.ETag { w.WriteHeader(http.StatusNotModified) return } w.Write(page.Data) } // Ответ на метод COUNT func sendCount(w http.ResponseWriter, data []byte) { w.Header().Set("Content-Type", "text/plain; charset=utf-8") w.WriteHeader(http.StatusOK) w.Write(data) } // Ответ на метод LOVE func sendLove(w http.ResponseWriter) { w.Header().Set("Content-Type", "text/plain; charset=utf-8") w.WriteHeader(http.StatusOK) w.Write([]byte("13.01.2005\n")) } // Ответ на метод LIMINAL func sendLiminal(w http.ResponseWriter) { w.Header().Set("Content-Type", "text/plain; charset=utf-8") w.WriteHeader(http.StatusOK) text := "If you're not careful and you slip out of reality in the wrong place, you'll end up in the Backstage, where there's nothing but the stench of old damp carpet, yellow-colored madness, the endless unbearable hum of fluorescent lights, and roughly six hundred million square miles of randomly arranged empty rooms.\n" w.Write([]byte(text)) }