82 lines
1.6 KiB
Go
82 lines
1.6 KiB
Go
|
package app
|
|||
|
|
|||
|
import (
|
|||
|
"io"
|
|||
|
"net/http"
|
|||
|
u "net/url"
|
|||
|
"os"
|
|||
|
"strconv"
|
|||
|
"strings"
|
|||
|
)
|
|||
|
|
|||
|
const addr string = "0.0.0.0:3003"
|
|||
|
|
|||
|
// роутер
|
|||
|
func Router() {
|
|||
|
// расшифровка эндпоинта из урл
|
|||
|
endpoint := func(url string) (string, string) {
|
|||
|
if CFG.Base_uri != "" {
|
|||
|
url = strings.Replace(url, CFG.Base_uri, "/", 1)
|
|||
|
}
|
|||
|
|
|||
|
end := strings.Index(url[1:], "/")
|
|||
|
if end == -1 {
|
|||
|
return url[1:], ""
|
|||
|
}
|
|||
|
return url[1 : end+1], url[end+2:]
|
|||
|
}
|
|||
|
|
|||
|
// функция, что управляет всем
|
|||
|
handle := func(w http.ResponseWriter, r *http.Request) {
|
|||
|
e, url := endpoint(r.URL.Path)
|
|||
|
var wr = io.WriteString
|
|||
|
open_n_send := func(name string) {
|
|||
|
f, e := os.ReadFile(name)
|
|||
|
err(e)
|
|||
|
wr(w, string(f))
|
|||
|
}
|
|||
|
|
|||
|
// структура с функциями
|
|||
|
var skunky skunkyart
|
|||
|
skunky.Args = r.URL.Query()
|
|||
|
skunky.Writer = w
|
|||
|
|
|||
|
arg := skunky.Args.Get
|
|||
|
skunky.Query = u.QueryEscape(arg("q"))
|
|||
|
if t := arg("type"); len(t) > 0 {
|
|||
|
skunky.Type = rune(t[0])
|
|||
|
}
|
|||
|
p, _ := strconv.Atoi(arg("p"))
|
|||
|
skunky.Page = p
|
|||
|
|
|||
|
// пути
|
|||
|
switch e {
|
|||
|
default:
|
|||
|
skunky.httperr(404)
|
|||
|
case "/", "":
|
|||
|
open_n_send("html/index.htm")
|
|||
|
case "post":
|
|||
|
slash := strings.Index(url, "/")
|
|||
|
skunky.Deviation(url[:slash], url[slash+1:])
|
|||
|
case "search":
|
|||
|
skunky.Search()
|
|||
|
case "media":
|
|||
|
skunky.Emojitar(url)
|
|||
|
case "about":
|
|||
|
open_n_send("html/about.htm")
|
|||
|
case "gui":
|
|||
|
w.Header().Add("content-type", "text/css")
|
|||
|
open_n_send(url)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
http.HandleFunc("/", handle)
|
|||
|
http.ListenAndServe(addr, nil)
|
|||
|
}
|
|||
|
|
|||
|
func err(e error) {
|
|||
|
if e != nil {
|
|||
|
println(e.Error())
|
|||
|
}
|
|||
|
}
|