urloli/srv.go

125 行
4.4 KiB
Go
Raw 通常表示 履歴

2023-05-10 15:29:26 +09:00
package main
import (
"text/template"
"fmt"
"net/http"
)
type Page struct {
Tit string
Err string
Url string
Dom string
Lan string
2023-05-10 17:40:34 +09:00
Ver string
2023-05-10 15:29:26 +09:00
}
func serv (cnf Config, port int) {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
2023-05-13 12:17:41 +09:00
ftmpl := []string{cnf.webpath + "/view/index.html", cnf.webpath + "/view/header.html", cnf.webpath + "/view/footer.html"}
2023-05-10 15:29:26 +09:00
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
2023-05-13 12:17:41 +09:00
data := &Page{Ver: version}
2023-05-10 15:29:26 +09:00
cookie, err := r.Cookie("lang")
if err != nil {
data.Lan = "ja"
} else {
data.Lan = cookie.Value
2023-05-10 15:29:26 +09:00
}
uri := r.URL.Path
query := r.URL.Query()
qnewurl := query.Get("newurl")
2023-05-13 12:17:41 +09:00
data.Tit = getloc("top", data.Lan)
ftmpl[0] = cnf.webpath + "/view/index.html"
tmpl := template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
2023-05-10 15:29:26 +09:00
if r.Method == "POST" {
err := r.ParseForm()
if err != nil { fmt.Println(err) }
if r.PostForm.Get("sosin") != "" {
if r.PostForm.Get("newadd") != "" {
addurl := r.PostForm.Get("newadd")
chkprx := checkprefix(addurl)
chklim := checkcharlim(addurl)
if !chkprx {
2023-05-13 12:17:41 +09:00
data.Tit = getloc("fuseiurl", data.Lan)
data.Err = getloc("errfusei", data.Lan)
ftmpl[0] = cnf.webpath + "/view/404.html"
tmpl = template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
2023-05-10 15:29:26 +09:00
}
if !chklim {
2023-05-13 12:17:41 +09:00
data.Tit = getloc("fuseiurl", data.Lan)
data.Err = getloc("errcharlim", data.Lan)
ftmpl[0] = cnf.webpath + "/view/404.html"
tmpl = template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
2023-05-10 15:29:26 +09:00
}
if chklim && chkprx {
chkfn, _ := geturl(addurl, cnf.linkpath, true)
if chkfn != "" {
http.Redirect(w, r, addurl, http.StatusSeeOther)
return
} else {
res := insertjson(addurl, cnf.linkpath)
2023-05-10 17:35:18 +09:00
data.Url = res
data.Dom = cnf.domain
2023-05-13 12:17:41 +09:00
data.Tit = getloc("tansyukuzumi", data.Lan)
ftmpl[0] = cnf.webpath + "/view/submitted.html"
tmpl = template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
2023-05-10 15:29:26 +09:00
}
}
} else {
2023-05-13 12:17:41 +09:00
data.Tit = getloc("mikensyutu", data.Lan)
data.Err = getloc("errurlent", data.Lan)
ftmpl[0] = cnf.webpath + "/view/404.html"
tmpl = template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
2023-05-10 15:29:26 +09:00
}
} else if r.PostForm.Get("langchange") != "" {
cookie, err := r.Cookie("lang")
if err != nil || cookie.Value == "ja" {
http.SetCookie(w, &http.Cookie {Name: "lang", Value: "en", MaxAge: 31536000, Path: "/"})
2023-05-10 15:29:26 +09:00
} else {
http.SetCookie(w, &http.Cookie {Name: "lang", Value: "ja", MaxAge: 31536000, Path: "/"})
2023-05-10 15:29:26 +09:00
}
http.Redirect(w, r, "/", http.StatusSeeOther)
return
}
} else {
if uri == "/" && qnewurl == "" {
2023-05-13 12:17:41 +09:00
ftmpl[0] = cnf.webpath + "/view/index.html"
tmpl = template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
2023-05-10 15:29:26 +09:00
} else if uri != "/" && qnewurl == "" {
red, _ := geturl(uri[1:], cnf.linkpath, false)
if red != "" {
http.Redirect(w, r, red, http.StatusSeeOther)
return
} else {
2023-05-13 12:17:41 +09:00
data.Tit = getloc("mikensyutu", data.Lan)
data.Err = getloc("errurlnai", data.Lan)
ftmpl[0] = cnf.webpath + "/view/404.html"
tmpl = template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
2023-05-10 15:29:26 +09:00
}
} else if uri == "/" && qnewurl != "" {
2023-05-10 17:35:18 +09:00
data.Url = qnewurl
data.Dom = cnf.domain
2023-05-13 12:17:41 +09:00
data.Tit = getloc("tansyukuzumi", data.Lan)
ftmpl[0] = cnf.webpath + "/view/submitted.html"
tmpl = template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
2023-05-10 15:29:26 +09:00
} else {
2023-05-13 12:17:41 +09:00
data.Tit = getloc("mikensyutu", data.Lan)
data.Err = getloc("errurlnai", data.Lan)
ftmpl[0] = cnf.webpath + "/view/404.html"
tmpl = template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
2023-05-10 15:29:26 +09:00
}
}
tmpl.Execute(w, data)
data = nil
})
fmt.Println(fmt.Sprint("http://127.0.0.1:", port, " でサーバーを実行中。終了するには、CTRL+Cを押して下さい。"))
http.ListenAndServe(fmt.Sprint(":", port), nil)
}