]> Sergey Matveev's repositories - sgblog.git/blobdiff - cmd/sgblog/gemini.go
Serve /img/ on gemini
[sgblog.git] / cmd / sgblog / gemini.go
index 527874eae26488228777311f4369c0745da12d73..ccf719d94523025961c04748b705bd0d823e5b80 100644 (file)
@@ -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"))
        }