118 lines
2.4 KiB
Go
118 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
"os"
|
|
"runtime"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"skunkyart/misc"
|
|
"skunkyart/post"
|
|
"skunkyart/user"
|
|
"skunkyart/util"
|
|
)
|
|
|
|
func main() {
|
|
util.ParseConfig()
|
|
print("Getting CSRF Token..\033[B\r")
|
|
util.CSRFToken()
|
|
print("CSRF Token has been getted.\033[B\r\n")
|
|
|
|
go func() {
|
|
for {
|
|
time.Sleep(30 * time.Minute)
|
|
util.CSRFToken()
|
|
println("CSRF token has been updated.")
|
|
}
|
|
}()
|
|
|
|
println("SkunkyArt listening on http://" + util.Conf.Listen)
|
|
|
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
e, p := endpoint(r.URL.Path)
|
|
c := make(chan string, 100)
|
|
|
|
// some args
|
|
page, _ := strconv.ParseInt(r.URL.Query().Get("p"), 10, 32)
|
|
q := url.QueryEscape(r.URL.Query().Get("q"))
|
|
|
|
if util.Conf.Base_uri != "" {
|
|
w.Header().Set("Content-Location", util.Conf.Base_uri)
|
|
}
|
|
|
|
action := r.URL.Query().Get("a")
|
|
|
|
// uri
|
|
switch e {
|
|
case "image":
|
|
fmt.Fprintln(w, misc.Getimage(p, url.QueryEscape(r.URL.Query().Get("t"))))
|
|
|
|
case "avatar":
|
|
if p == "" {
|
|
w.WriteHeader(400)
|
|
fmt.Fprint(w, "Missing username.")
|
|
} else {
|
|
fmt.Fprintln(w, misc.Misc(strings.ToLower(p), false))
|
|
}
|
|
|
|
case "emoji":
|
|
fmt.Fprintln(w, misc.Misc(strings.ToLower(p), true))
|
|
|
|
case "group":
|
|
fmt.Fprintln(w, misc.GetGroup(action, r.URL.Query().Get("folder"), p, int(page)))
|
|
|
|
case "user":
|
|
fmt.Fprintln(w, user.Get(p, action, q, int(page)))
|
|
|
|
case "post":
|
|
go post.Get(p, int(page)+1, c)
|
|
fmt.Fprintln(w, <-c)
|
|
|
|
case "dd":
|
|
go misc.DD(int(page), c)
|
|
fmt.Fprintln(w, <-c)
|
|
|
|
case "search":
|
|
go misc.Search(q, r.URL.Query().Get("p"), r.URL.Query().Get("scope"), c)
|
|
fmt.Fprintln(w, <-c)
|
|
|
|
case "about":
|
|
fmt.Fprintln(w, "Its an alternative frontend for deviantart.com.\nCompiled with Go:", runtime.Version())
|
|
|
|
case "static":
|
|
file, err := os.ReadFile("static/" + p)
|
|
if err != nil {
|
|
fmt.Fprintln(w, "No such file")
|
|
} else {
|
|
w.Header().Add("Content-Type", "text/css")
|
|
fmt.Fprintln(w, string(file))
|
|
}
|
|
|
|
case "":
|
|
f, _ := os.ReadFile("templates/home.htm")
|
|
fmt.Fprintln(w, string(f))
|
|
|
|
default:
|
|
w.WriteHeader(404)
|
|
fmt.Fprintln(w, "404 - Not found.")
|
|
}
|
|
})
|
|
http.ListenAndServe(util.Conf.Listen, nil)
|
|
}
|
|
|
|
func endpoint(url string) (string, string) {
|
|
if util.Conf.Base_uri != "" {
|
|
url = strings.Replace(url, util.Conf.Base_uri, "/", 1)
|
|
}
|
|
|
|
end := strings.Index(url[1:], "/")
|
|
if end == -1 {
|
|
return url[1:], ""
|
|
}
|
|
return url[1 : end+1], url[end+2:]
|
|
}
|