package vistas import ( "fmt" "os" "net/http" "strings" "bytes" "regexp" "github.com/gin-gonic/gin" "github.com/yuin/goldmark" ) func Letra(c *gin.Context) { letra := c.PostForm("slug") // FIXME: Sanitize // Sanitize "letra" letra = regexp.MustCompile(`[^a-zA-Z0-9ñÑáéíóú\- ]+`).ReplaceAllString(letra, "") arquivo := "./letras/" + letra + ".md" contido, err := os.ReadFile(arquivo) if err != nil { fmt.Println("Error lendo.") c.Data(http.StatusNotFound, "text/html; charset=utf-8", []byte("Song not found.")) } toml_marxes_atopados := 0 var markdown string for _, linea := range strings.Split(string(contido[:]), "\n") { // quitase a cabeceira toml, fai falta atopar un bloque: // +++ // title = "Foo, the song" // +++ if strings.HasPrefix(linea, "+++") { toml_marxes_atopados = toml_marxes_atopados + 1 } // Si xa se atoparon os dos marxes do toml e non estamos en un deles: if toml_marxes_atopados == 2 && !strings.HasPrefix(linea, "+++") { markdown = markdown + linea +"\n" } } // markdown a html var buf bytes.Buffer if err := goldmark.Convert([]byte(markdown), &buf); err != nil { fmt.Println("Error convertindo markdown a html") c.Data(http.StatusInternalServerError, "text/html; charset=utf-8", []byte("Error converting to html.")) } else { c.Data(http.StatusOK, "text/html; charset=utf-8", []byte(buf.String())) } }