Skip to content

Instantly share code, notes, and snippets.

@will3942
Created December 4, 2013 21:34
Show Gist options
  • Save will3942/7796003 to your computer and use it in GitHub Desktop.
Save will3942/7796003 to your computer and use it in GitHub Desktop.
Go: Markdown blogging system.
package main
import (
"html/template"
"net/http"
"path/filepath"
"strings"
"io/ioutil"
"github.com/russross/blackfriday"
)
type Post struct {
Title string
Date string
Summary string
Body string
File string
}
func handlerequest(w http.ResponseWriter, r *http.Request) {
if (r.URL.Path[1:] == "") {
posts := getPosts()
t := template.New("index.html")
t, _ = t.ParseFiles("index.html")
t.Execute(w, posts)
} else {
f = "posts/" + r.URL.Path[1:] + ".md"
fileread, _ := ioutil.ReadFile(f)
lines := strings.Split(string(fileread), "\n")
title := string(lines[0])
date := string(lines[1])
summary := string(lines[2])
body := strings.Join(lines[3:len(lines)], "\n")
body = string(blackfriday.MarkdownCommon([]byte(body)))
post = Post{title, date, summary, body, r.URL.Path[1:]}
t := template.New("post.html")
t, _ = t.ParseFiles("post.html")
t.Execute(w, post)
}
}
func getPosts() []Post{
a := []Post{}
files, _ := filepath.Glob("posts/*")
for _, f := range files {
file := strings.Replace(f, "posts/", "", -1)
file = strings.Replace(file, ".md", "", -1)
fileread, _ := ioutil.ReadFile(f)
lines := strings.Split(string(fileread), "\n")
title := string(lines[0])
date := string(lines[1])
summary := string(lines[2])
body := strings.Join(lines[3:len(lines)], "\n")
body = string(blackfriday.MarkdownCommon([]byte(body)))
a = append(a, Post{title, date, summary, body, file})
}
return a
}
func main() {
http.HandleFunc("/", handlerequest)
http.ListenAndServe(":8000", nil)
}
@karlcoelho
Copy link

Some HTML is unescaped in post.html. Fix?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment