json config system added

master
serr 2025-03-27 23:16:57 +03:00
parent 9091ccde3b
commit 6017f7433a
3 changed files with 61 additions and 10 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
config
config.json

40
config/config.go Normal file
View File

@ -0,0 +1,40 @@
package config
import (
"encoding/json"
"os"
)
/*
For server start (author's note to self):
sudo systemctl stop server.service
go build main.go
sudo systemctl start server.service
*/
type Config struct {
AssetsPath string
TemplatesPath string
TemplatesExt string
LocalIP string
ServerIP string
Port string
}
func InitConfig() *Config {
return &Config{}
}
func (c *Config) LoadConfig(configPath string) error {
configFile, err := os.ReadFile(configPath)
if err != nil {
return err
}
err = json.Unmarshal(configFile, c)
if err != nil {
return err
}
return nil
}

29
main.go
View File

@ -3,7 +3,7 @@ package main
import (
"bytes"
"log"
cfg "main/config"
"main/config"
"main/tools"
"net/http"
"os"
@ -13,18 +13,28 @@ import (
"time"
)
const (
configPath = "./config/config.json"
)
// App представляет основное состояние приложения
type App struct {
templates *template.Template
startTime int64
templates *template.Template // Шаблоны страниц
config *config.Config // Конфиг
startTime int64 // Время запуска
}
func main() {
// Инициализация приложения
app := appInit()
// Загрузка конфига
if err := app.config.LoadConfig(configPath); err != nil {
log.Fatal(err)
}
// Загрузка шаблонов
if err := app.loadTemplates(cfg.TemplatesPath, cfg.TemplatesExt); err != nil {
if err := app.loadTemplates(app.config.TemplatesPath, app.config.TemplatesExt); err != nil {
log.Fatal(err)
}
@ -32,12 +42,12 @@ func main() {
router := app.setupRouter()
// Запуск сервера
if ok, err := tools.IsIPInUse(cfg.ServerIP); err != nil {
if ok, err := tools.IsIPInUse(app.config.ServerIP); err != nil {
log.Fatal(err)
} else if ok {
runServer(cfg.ServerIP, cfg.Port, router)
runServer(app.config.ServerIP, app.config.Port, router)
} else {
runServer(cfg.LocalIP, cfg.Port, router)
runServer(app.config.LocalIP, app.config.Port, router)
}
}
@ -52,6 +62,7 @@ func runServer(ip, port string, router http.Handler) {
func appInit() *App {
return &App{
startTime: time.Now().Unix(),
config: config.InitConfig(),
}
}
@ -60,7 +71,7 @@ func (a *App) setupRouter() *http.ServeMux {
router := http.NewServeMux()
// Обработка статических файлов
router.Handle(cfg.AssetsPath, http.FileServer(http.Dir(".")))
router.Handle(a.config.AssetsPath, http.FileServer(http.Dir(".")))
// Обработка главной страницы
router.Handle("/", http.HandlerFunc(a.handleMainPage))
@ -70,7 +81,7 @@ func (a *App) setupRouter() *http.ServeMux {
// Обработчик главной страницы
func (a *App) handleMainPage(w http.ResponseWriter, r *http.Request) {
tmplName := "main" + cfg.TemplatesExt
tmplName := "main" + a.config.TemplatesExt
context := map[string]any{
"timestamp": a.startTime,
}