From bd0905b77b55ab1ff1ca88b73afc1311c80cf7ea Mon Sep 17 00:00:00 2001 From: Julio Date: Thu, 15 Mar 2018 20:22:16 -0700 Subject: [PATCH 1/4] init --- .gitignore | 3 ++ markdownpages/test.md | 1 + server.go | 66 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 markdownpages/test.md create mode 100644 server.go diff --git a/.gitignore b/.gitignore index a1338d6..bce6bfd 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ # Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 .glide/ + +.idea +.vscode \ No newline at end of file diff --git a/markdownpages/test.md b/markdownpages/test.md new file mode 100644 index 0000000..7b74be4 --- /dev/null +++ b/markdownpages/test.md @@ -0,0 +1 @@ +# header \ No newline at end of file diff --git a/server.go b/server.go new file mode 100644 index 0000000..660f4a5 --- /dev/null +++ b/server.go @@ -0,0 +1,66 @@ +package main + +import ( + "net/http" + "io" + "path" + "gopkg.in/russross/blackfriday.v2" + "io/ioutil" + "bytes" +) + +const MarkDownPages = "markdownpages" + +type WikiHandler struct { + root string +} + +func (h *WikiHandler) absPath(p string) string { + return path.Join(h.root, p) +} + +func (h *WikiHandler) get(path string) (io.Reader, error) { + abs := h.absPath(path) + + data, err := ioutil.ReadFile(abs) + if err != nil { + // handle error + return nil, err + } + + reader := bytes.NewReader( + blackfriday.Run(data)) + + return reader, nil + +} + +func (h *WikiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + + + var data io.Reader + var err error + + switch r.Method { + case http.MethodGet: // handle get request + data, err = h.get(r.URL.Path) + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } + + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusOK) + io.Copy(w, data) +} + +func main() { + handler := &WikiHandler{ + root: MarkDownPages, + } + + http.ListenAndServe(":8080", handler) +} From ecc48992e4b7eca0a18b7510bd88e9d9abb7cb8b Mon Sep 17 00:00:00 2001 From: Luc Date: Thu, 15 Mar 2018 23:54:59 -0400 Subject: [PATCH 2/4] added post --- markdownpages/foo.md | 1 + markdownpages/foo2.md | 1 + server.go | 29 +++++++++++++++++++++++++---- 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 markdownpages/foo.md create mode 100644 markdownpages/foo2.md diff --git a/markdownpages/foo.md b/markdownpages/foo.md new file mode 100644 index 0000000..30d74d2 --- /dev/null +++ b/markdownpages/foo.md @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/markdownpages/foo2.md b/markdownpages/foo2.md new file mode 100644 index 0000000..30d74d2 --- /dev/null +++ b/markdownpages/foo2.md @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/server.go b/server.go index 660f4a5..6dea03e 100644 --- a/server.go +++ b/server.go @@ -1,12 +1,14 @@ package main import ( - "net/http" + "bytes" "io" + "io/ioutil" + "net/http" + "os" "path" + "gopkg.in/russross/blackfriday.v2" - "io/ioutil" - "bytes" ) const MarkDownPages = "markdownpages" @@ -35,8 +37,21 @@ func (h *WikiHandler) get(path string) (io.Reader, error) { } -func (h *WikiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { +func (h *WikiHandler) post(r *http.Request) (io.Reader, error) { + + abs := h.absPath(r.URL.Path) + file, err := os.Create(abs) + if err != nil { + // handle error + return nil, err + } + + io.Copy(file, r.Body) + + return nil, nil +} +func (h *WikiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var data io.Reader var err error @@ -44,6 +59,12 @@ func (h *WikiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: // handle get request data, err = h.get(r.URL.Path) + + case http.MethodPost: + data, err = h.post(r) + + http.Redirect(w, r, r.URL.String(), http.StatusPermanentRedirect) + return default: http.Error(w, "method not allowed", http.StatusMethodNotAllowed) } From 5f18eaefea40deb4f40eaf24a3f6b3be55c7649d Mon Sep 17 00:00:00 2001 From: Julio Date: Thu, 15 Mar 2018 21:01:06 -0700 Subject: [PATCH 3/4] added form --- form.html | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 form.html diff --git a/form.html b/form.html new file mode 100644 index 0000000..b9bd8b7 --- /dev/null +++ b/form.html @@ -0,0 +1,45 @@ + + + Create page + + + + + + + +

Page "" not found

+

feel free to make one

+ +
+

+ +
+ +

+ + +
+ +
+ + + + + + \ No newline at end of file From ee33741ded5dcbbc8d35687ca6b08737ff2a61fa Mon Sep 17 00:00:00 2001 From: Julio Date: Thu, 15 Mar 2018 21:58:33 -0700 Subject: [PATCH 4/4] done --- markdownpages/.DS_Store | Bin 0 -> 6148 bytes markdownpages/foo2.md | 1 - markdownpages/test.md | 1 - page.html | 15 ++++++++++ server.go | 60 +++++++++++++++++++++++++++++++--------- 5 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 markdownpages/.DS_Store delete mode 100644 markdownpages/foo2.md delete mode 100644 markdownpages/test.md create mode 100644 page.html diff --git a/markdownpages/.DS_Store b/markdownpages/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + + + + +edit +
+ + + +%s + + + \ No newline at end of file diff --git a/server.go b/server.go index 6dea03e..468945c 100644 --- a/server.go +++ b/server.go @@ -9,9 +9,23 @@ import ( "path" "gopkg.in/russross/blackfriday.v2" + "log" + "fmt" + "strings" ) const MarkDownPages = "markdownpages" +var PageFormat string + +func init() { + + byt, err := ioutil.ReadFile("page.html") + if err != nil { + panic(err) + } + + PageFormat = string(byt) +} type WikiHandler struct { root string @@ -30,8 +44,8 @@ func (h *WikiHandler) get(path string) (io.Reader, error) { return nil, err } - reader := bytes.NewReader( - blackfriday.Run(data)) + reader := strings.NewReader( + fmt.Sprintf(PageFormat, blackfriday.Run(data))) return reader, nil @@ -39,6 +53,8 @@ func (h *WikiHandler) get(path string) (io.Reader, error) { func (h *WikiHandler) post(r *http.Request) (io.Reader, error) { + r.ParseForm() + abs := h.absPath(r.URL.Path) file, err := os.Create(abs) if err != nil { @@ -46,9 +62,16 @@ func (h *WikiHandler) post(r *http.Request) (io.Reader, error) { return nil, err } - io.Copy(file, r.Body) + fmt.Fprint(file, r.PostFormValue("post")) + + file.Close() + + data, _ := ioutil.ReadFile(abs) - return nil, nil + reader := bytes.NewReader( + blackfriday.Run(data)) + + return reader, nil } func (h *WikiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -56,26 +79,37 @@ func (h *WikiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var data io.Reader var err error + log.Printf("%s %s\n", r.Method, r.URL.Path) + switch r.Method { case http.MethodGet: // handle get request data, err = h.get(r.URL.Path) + if err != nil { + data, err = os.Open("form.html") + } + + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusOK) + io.Copy(w, data) case http.MethodPost: data, err = h.post(r) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusOK) + io.Copy(w, data) - http.Redirect(w, r, r.URL.String(), http.StatusPermanentRedirect) - return default: http.Error(w, "method not allowed", http.StatusMethodNotAllowed) } - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - w.WriteHeader(http.StatusOK) - io.Copy(w, data) } func main() {