From: Sergey Matveev Date: Sun, 30 Jul 2023 11:44:09 +0000 (+0300) Subject: Serve /img/ on gemini X-Git-Tag: v0.30.0~1 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b238d11be5852ecba1b72116545e7c8b2fed6133;p=sgblog.git Serve /img/ on gemini --- diff --git a/cmd/sgblog/gemini-entry.tmpl b/cmd/sgblog/gemini-entry.tmpl index 67d6fc4..abbca9e 100644 --- a/cmd/sgblog/gemini-entry.tmpl +++ b/cmd/sgblog/gemini-entry.tmpl @@ -1,4 +1,4 @@ -{{$Cfg := .Cfg -}}{{$CR := printf "\r"}}20 text/gemini{{$CR}} +{{$CR := printf "\r"}}20 text/gemini{{$CR}} # {{.Title}} {{$.T.Get "What"}}: {{.Commit.Hash.String}} {{$.T.Get "When"}}: {{.When}} @@ -12,7 +12,7 @@ ``` {{end -}} {{- if .Images}} -{{range $idx, $img := .Images}}=> http://{{$Cfg.ImgDomain}}/{{$img.Path}} {{$img.Alt}} +{{range $idx, $img := .Images}}=> /img/{{$img.Path}} {{$img.Alt}} {{end}} {{end -}} {{- if .Cfg.CommentsEmail}} diff --git a/cmd/sgblog/gemini.go b/cmd/sgblog/gemini.go index 527874e..ccf719d 100644 --- a/cmd/sgblog/gemini.go +++ b/cmd/sgblog/gemini.go @@ -26,7 +26,9 @@ import ( "log" "net/url" "os" + "path" "strconv" + "strings" "text/template" "github.com/go-git/go-git/v5" @@ -209,6 +211,24 @@ func serveGemini(cfgPath string) { if err != nil { log.Fatalln(err) } + } else if strings.HasPrefix(u.Path, "/img/") { + pth := strings.TrimPrefix(u.Path, "/img/") + if strings.Contains(pth, "..") { + log.Fatalln("unacceptable double dots") + } + typ := ImgTypes[path.Ext(pth)] + if typ == "" { + typ = "application/octet-stream" + } + fd, err := os.Open(path.Join(cfg.ImgPath, pth)) + if err != nil { + log.Fatalln(err) + } + bw := bufio.NewWriter(os.Stdout) + bw.Write([]byte("20 " + typ + "\r\n")) + io.Copy(bw, bufio.NewReader(fd)) + fd.Close() + bw.Flush() } else { makeGemErr(errors.New("unknown URL action")) } diff --git a/common.go b/common.go index 9a33a4a..1f5984a 100644 --- a/common.go +++ b/common.go @@ -15,7 +15,7 @@ import ( ) const ( - Version = "0.29.0" + Version = "0.30.0" WhenFmt = "2006-01-02 15:04:05Z07:00" )