From daf390bf6c78c8de8f2e810898dd7a81bb499b5c Mon Sep 17 00:00:00 2001 From: serr Date: Sat, 5 Apr 2025 18:26:56 +0300 Subject: [PATCH] new --- .gitignore | 1 + assets/css/styles.css | 57 ++++++++++++ assets/pic/favicon.webp | Bin 0 -> 488 bytes assets/pic/footer.webp | Bin 0 -> 9586 bytes assets/pic/header.webp | Bin 0 -> 61546 bytes assets/templates/main.gohtml | 117 +++++++++++++++++++++++ cache/cache.go | 25 +++++ config/config.go | 40 ++++++++ go.mod | 3 + main.go | 176 +++++++++++++++++++++++++++++++++++ tools/inet.go | 31 ++++++ 11 files changed, 450 insertions(+) create mode 100644 .gitignore create mode 100644 assets/css/styles.css create mode 100644 assets/pic/favicon.webp create mode 100644 assets/pic/footer.webp create mode 100644 assets/pic/header.webp create mode 100644 assets/templates/main.gohtml create mode 100644 cache/cache.go create mode 100644 config/config.go create mode 100644 go.mod create mode 100644 main.go create mode 100644 tools/inet.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0cffcb3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.json \ No newline at end of file diff --git a/assets/css/styles.css b/assets/css/styles.css new file mode 100644 index 0000000..61dada0 --- /dev/null +++ b/assets/css/styles.css @@ -0,0 +1,57 @@ +/* Design idea from here https://mo.rijndael.cc/ */ + +body { + display: flex; + flex-wrap: wrap; + margin: 0; + align-items: flex-start; + padding: 10px; +} + +header, main, footer { + margin: 5px; + display: flex; + flex-direction: column; + gap: 10px; +} + +header, footer { + flex: 2; +} + +main { + flex: 3; +} + +header > div, +footer > div, +main > div { + box-shadow: 5px 5px 0 0 lightgrey; + box-sizing: border-box; + border: 1px solid; + width: 100%; + text-align: center; + color: black; + padding-left: 10px; + padding-right: 10px; +} + +header > div > ul, +footer > div > ul, +main > div > ul { + text-align: left; +} + +header > div > h1, +footer > div > h1, +main > div > h1 { + box-sizing: border-box; + border-top: 1px solid; + border-bottom: 1px solid; +} + +@media (max-width: 1200px) { + header, footer, main { + flex: 1 100%; + } +} \ No newline at end of file diff --git a/assets/pic/favicon.webp b/assets/pic/favicon.webp new file mode 100644 index 0000000000000000000000000000000000000000..b2cc3c18ed170aabfd31f84c6c6ca6ddbae3c774 GIT binary patch literal 488 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 -g@S2KAs8c|Mie{oElpWtPejm5$1y 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 Ufca-nm!04M00000000000P_TIZ2$lO literal 0 HcmV?d00001 diff --git a/assets/templates/main.gohtml b/assets/templates/main.gohtml new file mode 100644 index 0000000..ac62c4d --- /dev/null +++ b/assets/templates/main.gohtml @@ -0,0 +1,117 @@ + + + + hikan.ru + + + + + + +
+
+ +
+
+
+

+ some system information +

+
    +
  • unix timestamp of page rendering - {{ .renderingTimestamp }}
  • +
+
+
+
+
+

+ $whoami +

+

+ my name is serr (you can easily guess my real name if you speak Russian :d), and i didn't come up with that nickname, i just started being called it +

+

+ i was born in 2003, i'm currently a cybersecurity major at university +

+

+ pronouns: he/him +

+
+
+

+ what do i do? +

+

+ programming is my everything - my job, my hobby, my lifelong obsession +

+

+ i love growing in all areas of programming - i am literally interested in everything: cybersecurity (chaotically breaking things, analyzing code, writing automated analyzers, and moving bytes back and forth), concurrency/multithreading, web development, low-level programming, cryptography and a lot more! +

+

+ i like the idea of symbolic/concolic execution and virtual code execution in general +

+
+
+

+ things i love +

+
    +
  • coffee. i REALLY love coffee. almost any. and a lot of
  • +
  • movies and TV series (especially TV series). i watch something almost every day
  • +
  • true crime. i'm obsessed with serial killer cases, mysterious disappearances, unsolved murders - all that dark stuff
  • +
  • russian underground rap like Slava KPSS, Zamay, MB Packet, Ovsyankin etc.
  • +
  • simple and extensible code. i think if your code is overly complex, it means you are doing something wrong. most things are simpler than they seem
  • +
+
+
+

+ projects +

+ +
+
+

+ nice links +

+ +
+
+ + + \ No newline at end of file diff --git a/cache/cache.go b/cache/cache.go new file mode 100644 index 0000000..9c5a616 --- /dev/null +++ b/cache/cache.go @@ -0,0 +1,25 @@ +package cache + +import "sync" + +type Cache struct { + Data map[string]any + Mu sync.RWMutex +} + +func Init() *Cache { + return &Cache{Data: make(map[string]any)} +} + +func (c *Cache) Get(key string) (any, bool) { + c.Mu.RLock() + pageData, ok := c.Data[key] + c.Mu.RUnlock() + return pageData, ok +} + +func (c *Cache) Set(key string, data any) { + c.Mu.Lock() + c.Data[key] = data + c.Mu.Unlock() +} diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..21a7a36 --- /dev/null +++ b/config/config.go @@ -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 Init() *Config { + return &Config{} +} + +func (c *Config) Load(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 +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..c8beda6 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.23.2 diff --git a/main.go b/main.go new file mode 100644 index 0000000..9ac77ea --- /dev/null +++ b/main.go @@ -0,0 +1,176 @@ +package main + +import ( + "bytes" + "log" + "main/cache" + "main/config" + "main/tools" + "net/http" + "os" + "path/filepath" + "strings" + "text/template" + "time" +) + +// App представляет основное состояние приложения +type App struct { + Templates *template.Template // Шаблоны страниц + Config *config.Config // Конфиг + StartTime int64 // Время запуска + Cache *cache.Cache // Кэш (отрендеренные странички) +} + +func main() { + var app *App + var err error + + // Инициализация приложения + if app, err = AppInit("config.json"); err != nil { + log.Fatal(err) + } + + // Настройка маршрутов и запуск + if app.SetupRouterAndRun() != nil { + log.Fatal(err) + } +} + +// Запускает сервер на указанном IP и порту +func RunServer(ip, port string, router http.Handler) { + addr := ip + port + log.Println("Run on", addr) + log.Fatal(http.ListenAndServe(addr, router)) +} + +// Инициализирует приложение +func AppInit(configPath string) (*App, error) { + + a := &App{ + StartTime: time.Now().Unix(), + Config: config.Init(), + Cache: cache.Init(), + } + + // Загрузка конфига + if err := a.Config.Load(configPath); err != nil { + return nil, err + } + + // Загрузка шаблонов + if err := a.LoadTemplates(a.Config.TemplatesPath, a.Config.TemplatesExt); err != nil { + log.Fatal(err) + } + + return a, nil +} + +func (a *App) SetupRouterAndRun() error { + // Настройка маршрутов + router := a.SetupRouter() + + // Запуск сервера + if ok, err := tools.IsIPInUse(a.Config.ServerIP); err != nil { + return err + } else if ok { + RunServer(a.Config.ServerIP, a.Config.Port, router) + } else { + RunServer(a.Config.LocalIP, a.Config.Port, router) + } + + return nil +} + +// Настраивает маршруты +func (a *App) SetupRouter() *http.ServeMux { + router := http.NewServeMux() + + // Обработка статических файлов с кэшированием + router.Handle(a.Config.AssetsPath, a.StaticHandler()) + + // Обработка главной страницы + router.Handle("/", a.MainPageHandler()) + + return router +} + +// Обработчик статических файлов с кэшированием +func (a *App) StaticHandler() http.HandlerFunc { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Add("Cache-Control", "public, max-age=31536000, immutable") + // Здесь используется встроенный файловый сервер Go (http.FileServer), который: + // Реализует интерфейс http.Handler (и поэтому имеет метод ServeHTTP) + // Автоматически обслуживает статические файлы из файловой системы + // Сам обрабатывает HTTP-запросы, определяет MIME-типы, отправляет правильные заголовки и т.д. + http.FileServer(http.Dir(".")).ServeHTTP(w, r) + }) +} + +// Обработчик главной страницы +func (a *App) MainPageHandler() http.HandlerFunc { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var err error + tmplName := "main" + a.Config.TemplatesExt + + // Страничка рендерится только если ее нет в кэше + pageData, ok := a.Cache.Get(tmplName) + if !ok { + context := map[string]any{ + "version": a.StartTime, + "renderingTimestamp": time.Now().Unix(), + } + pageData, err = a.RenderPage(tmplName, context) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + a.Cache.Set(tmplName, pageData) + } + + a.SendPage(w, pageData.([]byte)) + }) +} + +// Загрузка шаблонов +func (a *App) LoadTemplates(templatesPath string, ext string) error { + tmpls := template.New("") + + err := filepath.Walk(templatesPath, func(path string, f os.FileInfo, err error) error { + if err != nil { + return err + } + if !f.IsDir() && strings.HasSuffix(f.Name(), ext) { + _, err = tmpls.ParseFiles(path) + if err != nil { + return err + } + } + return nil + }) + + if err != nil { + return err + } + + a.Templates = tmpls + return nil +} + +// Рендерит шаблон в срез байт +func (a *App) RenderPage(tmplName string, context any) ([]byte, error) { + var pageData bytes.Buffer + + if err := a.Templates.ExecuteTemplate(&pageData, tmplName, context); err != nil { + return nil, err + } + + return pageData.Bytes(), nil +} + +// Отправляет страницу +func (a *App) SendPage(w http.ResponseWriter, data []byte) { + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.WriteHeader(http.StatusOK) + w.Write(data) +} diff --git a/tools/inet.go b/tools/inet.go new file mode 100644 index 0000000..9832117 --- /dev/null +++ b/tools/inet.go @@ -0,0 +1,31 @@ +package tools + +import ( + "net" + "strings" +) + +// Проверяет есть ли айпи-адрес среди адресов сетевых интерфейсов +func IsIPInUse(targetIP string) (bool, error) { + // Получаем список всех сетевых интерфейсов + interfaces, err := net.Interfaces() + if err != nil { + return false, err + } + + for _, iface := range interfaces { + // Получаем адреса для каждого интерфейса + addrs, err := iface.Addrs() + if err != nil { + return false, err + } + + for _, addr := range addrs { + if strings.Split(addr.String(), "/")[0] == targetIP { + return true, nil + } + } + } + + return false, nil // Адрес не найден +}