SVNからのミラー
This commit is contained in:
89
srv.go
Normal file
89
srv.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"text/template"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type Page struct {
|
||||
Tit, Err, Bdy, Dec, Img, Url, Dom, Ver, Ves string
|
||||
}
|
||||
|
||||
func extractGurl(r *http.Request) (string, error) {
|
||||
rq := r.URL.RawQuery
|
||||
q, err := url.QueryUnescape(rq)
|
||||
if err != nil {
|
||||
return "URLを受取に失敗", err
|
||||
}
|
||||
|
||||
gurl := strings.Replace(q, "/?url=", "", -1)
|
||||
|
||||
return gurl, nil
|
||||
}
|
||||
|
||||
func serv (cnf Config, port int) {
|
||||
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
err = os.Chdir(dir)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir(cnf.webpath + "/static"))))
|
||||
ftmpl := []string{cnf.webpath + "/view/index.html", cnf.webpath + "/view/header.html", cnf.webpath + "/view/footer.html"}
|
||||
|
||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
// 1.xで、URLは「/?url=」が付いたけど、2.0.0からは不要になった
|
||||
// だから、下記の部分は古いURLの為だ
|
||||
urls, ok := r.URL.Query()["url"]
|
||||
if ok && len(urls[0]) > 0 {
|
||||
http.Redirect(w, r, "/" + urls[0], http.StatusMovedPermanently)
|
||||
return
|
||||
}
|
||||
|
||||
data := &Page{Ver: version, Ves: strings.ReplaceAll(version, ".", "")}
|
||||
uri := r.URL.Path
|
||||
gurl, err := extractGurl(r)
|
||||
if err != nil {
|
||||
data.Tit = "エラー"
|
||||
data.Err = err.Error()
|
||||
ftmpl[0] = cnf.webpath + "/view/404.html"
|
||||
}
|
||||
|
||||
if uri == "/" {
|
||||
ftmpl[0] = cnf.webpath + "/view/index.html"
|
||||
} else {
|
||||
furl := uri + "?" + gurl
|
||||
page := get(furl, cnf)
|
||||
data.Tit = page["title"]
|
||||
if page["err"] != "" {
|
||||
data.Err = page["err"]
|
||||
ftmpl[0] = cnf.webpath + "/view/404.html"
|
||||
} else {
|
||||
data.Bdy = page["content"]
|
||||
data.Img = "/static/logo.jpg"
|
||||
if isarticle(furl) {
|
||||
data.Dec = page["desc"]
|
||||
data.Img = page["img"]
|
||||
data.Url = cnf.domain + furl
|
||||
}
|
||||
ftmpl[0] = cnf.webpath + "/view/news.html"
|
||||
}
|
||||
}
|
||||
|
||||
tmpl := template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2]))
|
||||
tmpl.Execute(w, data)
|
||||
data = nil
|
||||
})
|
||||
|
||||
fmt.Println(fmt.Sprint("http://" + cnf.ip + ":", port, " でサーバーを実行中。終了するには、CTRL+Cを押して下さい。"))
|
||||
http.ListenAndServe(fmt.Sprint(cnf.ip + ":", port), nil)
|
||||
}
|
||||
Reference in New Issue
Block a user