package main import ( "html/template" "io/ioutil" "net/http" "regexp" "strconv" "strings" "github.com/gin-gonic/gin" "github.com/microcosm-cc/bluemonday" "github.com/russross/blackfriday" ) func newNote(c *gin.Context) { title := randomAlliterateCombo() c.Redirect(302, "/"+title) } func editNote(c *gin.Context) { title := c.Param("title") if title == "ws" { wshandler(c.Writer, c.Request) } else if strings.ToLower(title) == "about" { //}&& strings.Contains(AllowedIPs, c.ClientIP()) != true { c.Redirect(302, "/about/view") } else { c.HTML(http.StatusOK, "index.tmpl", gin.H{ "Title": title, "ExternalIP": RuntimeArgs.ExternalIP, }) } } func everythingElse(c *gin.Context) { option := c.Param("option") title := c.Param("title") if option == "/view" { renderMarkdown(c, title) } else if option == "/list" { renderList(c, title) } else if title == "static" { serveStaticFile(c, option) } else { c.Redirect(302, "/"+title) } } func serveStaticFile(c *gin.Context, option string) { staticFile, err := ioutil.ReadFile("./static" + option) if err != nil { c.AbortWithStatus(404) } else { c.Data(200, contentType(option), []byte(staticFile)) } } func renderMarkdown(c *gin.Context, title string) { p := CowyoData{strings.ToLower(title), ""} err := p.load() if err != nil { panic(err) } unsafe := blackfriday.MarkdownCommon([]byte(p.Text)) html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) html2 := string(html) r, _ := regexp.Compile("\\$(.*?)\\$") for _, s := range r.FindAllString(html2, -1) { html2 = strings.Replace(html2, s, "
", 1) } c.HTML(http.StatusOK, "view.tmpl", gin.H{ "Title": title, "Body": template.HTML([]byte(html2)), }) } func reorderList(text string) ([]template.HTML, []string) { listItemsString := "" for _, lineString := range strings.Split(text, "\n") { if len(lineString) > 1 { if string(lineString[0]) != "-" { listItemsString += "- " + lineString + "\n" } else { listItemsString += lineString + "\n" } } } // get ordering of template.HTML for rendering renderedListString := string(blackfriday.MarkdownCommon([]byte(listItemsString))) listItems := []template.HTML{} endItems := []template.HTML{} for _, lineString := range strings.Split(renderedListString, "\n") { if len(lineString) > 1 { if strings.Contains(lineString, "