From 8fdc9ddb460f6dc76363da7c64bdae15927bf430 Mon Sep 17 00:00:00 2001 From: Derek Stevens Date: Tue, 7 Jun 2022 00:59:41 -0600 Subject: [PATCH] added build/delete, started styling --- archetype/adapter.go | 7 +- archetype/eureka.go | 20 ++++- nirvash.go | 45 +++++++++++ static/bg2.png | Bin 0 -> 48629 bytes static/style.css | 165 +++++++++++++++++++++++++++++++++++++- templates/build.html | 23 ++++++ templates/build_run.html | 14 ++++ templates/cms_create.html | 2 + templates/cms_edit.html | 29 +++++-- templates/cms_list.html | 5 +- templates/cms_new.html | 15 ++-- templates/cms_save.html | 2 + templates/delete.html | 14 ++++ templates/header.html | 3 + 14 files changed, 327 insertions(+), 17 deletions(-) create mode 100644 static/bg2.png create mode 100644 templates/build.html create mode 100644 templates/build_run.html create mode 100644 templates/delete.html diff --git a/archetype/adapter.go b/archetype/adapter.go index a8caf13..e2b493e 100644 --- a/archetype/adapter.go +++ b/archetype/adapter.go @@ -1,5 +1,10 @@ package archetype +type BuildStatus struct { + Success bool + Message string +} + type Adapter interface { Init(cfg *Config) Name() string @@ -14,5 +19,5 @@ type Adapter interface { CreatePage(slug, title, content string) error SavePage(oldSlug, newSlug, title, content string) error DeletePage(slug string) error - Build(buildOptions map[string]string) (bool, string) + Build(buildOptions map[string][]string) BuildStatus } diff --git a/archetype/eureka.go b/archetype/eureka.go index 99e613b..47f5255 100644 --- a/archetype/eureka.go +++ b/archetype/eureka.go @@ -4,6 +4,7 @@ import ( "errors" "io/ioutil" "os" + "os/exec" "path/filepath" "strings" ) @@ -141,7 +142,20 @@ func (self *EurekaAdapter) DeletePage(slug string) error { return os.Remove(filepath.Join(self.Root, "inc", slug)) } -func (self *EurekaAdapter) Build(buildOptions map[string]string) (bool, string) { - // TODO: shell out to build.sh with buildOptions, record exit status and output - return true, "Build successful" +func (self *EurekaAdapter) Build(buildOptions map[string][]string) BuildStatus { + + twtxt := buildOptions["twtxt"][0] + cmdArgs := "" + if twtxt != "" { + cmdArgs += " -t " + twtxt + } + + cmd := exec.Command("./build.sh", cmdArgs) + cmd.Dir = self.Root + out, err := cmd.CombinedOutput() + + return BuildStatus{ + Success: err == nil, + Message: string(out), + } } diff --git a/nirvash.go b/nirvash.go index 50142ea..14023f8 100644 --- a/nirvash.go +++ b/nirvash.go @@ -117,5 +117,50 @@ func main() { udb, "/")) + rtr.Get( + `/build`, + middleware.Fortify( + middleware.Protected( + shell.WithAdapter( + renderer.Template( + "templates/build.html", + "templates/header.html", + "templates/footer.html"), + cfg.Adapter), + http.MethodGet, + udb, + "/login"))) + + rtr.Post( + `/build-run`, + middleware.Defend( + middleware.Protected( + shell.WithAdapter( + renderer.Template( + "templates/build_run.html", + "templates/header.html", + "templates/footer.html"), + cfg.Adapter), + http.MethodGet, + udb, + "/login"), + udb, + "/")) + + rtr.Post( + `/delete/(?P\S+)`, + middleware.Defend( + middleware.Protected( + shell.WithAdapter( + renderer.Template( + "templates/delete.html", + "templates/header.html", + "templates/footer.html"), + cfg.Adapter), + http.MethodGet, + udb, + "/login"), + udb, + "/")) http.ListenAndServe(":8080", rtr) } diff --git a/static/bg2.png b/static/bg2.png new file mode 100644 index 0000000000000000000000000000000000000000..cb711d61c5f1ceaea85589c710a2a1da0a7c17af GIT binary patch literal 48629 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 + +
+ +
Build Options +{{ if $buildOpts }} + {{ range $optName := $buildOpts }} + + {{ end }} +{{ else }} +There are no build options for this adapter. +{{ end }} +
+ + +
+ +{{ template "footer" . }} \ No newline at end of file diff --git a/templates/build_run.html b/templates/build_run.html new file mode 100644 index 0000000..e0c7e61 --- /dev/null +++ b/templates/build_run.html @@ -0,0 +1,14 @@ +{{ $buildOpts := .PostForm }} +{{ $status := ((.Context).Value "adapter").Build $buildOpts }} + +{{ template "header" . }} + +{{ if ne ($status).Success true }} +

Build Error

+
{{($status).Message}}
+{{ else }} +

Build Successful

+
{{($status).Message}}
+{{ end }} + +{{ template "footer" . }} \ No newline at end of file diff --git a/templates/cms_create.html b/templates/cms_create.html index c5b919d..bcb668c 100644 --- a/templates/cms_create.html +++ b/templates/cms_create.html @@ -6,8 +6,10 @@ {{ template "header" . }} {{ if $createErr }} +

Page Creation Error

There was an error creating the page: {{ ($createErr).Error }} {{ else }} +

Page Created

Page '{{ $title }}' created successfully {{ end }} diff --git a/templates/cms_edit.html b/templates/cms_edit.html index 35e4f0f..c265d7b 100644 --- a/templates/cms_edit.html +++ b/templates/cms_edit.html @@ -5,7 +5,9 @@ {{ $noEmpty := .FormValue "no-empty" }} {{ template "header" . }} -
« + +

Edit Page

+
{{ if $noEmpty }} Empty fields are not allowed - please try again
@@ -13,12 +15,27 @@ {{ if $editableSlugs }} -
+
+
{{ end }} -
- last edited {{($page).Edited}}
-
+
+
+ last edited {{($page).Edited.Format "2006-01-02 15:04"}}
+
+
-{{ template "footer" . }} \ No newline at end of file +
Danger Zone +
+ +
+
+ +
+
+{{ template "footer" . }} diff --git a/templates/cms_list.html b/templates/cms_list.html index b2a2c4d..69a80b3 100644 --- a/templates/cms_list.html +++ b/templates/cms_list.html @@ -1,8 +1,11 @@ {{ $pages := ((.Context).Value "adapter").ListPages }} {{ template "header" .}} + +

Pages

+
- New Page + New Page
    {{ range $slug, $title := $pages }}
  • {{$title}}
  • diff --git a/templates/cms_new.html b/templates/cms_new.html index e2abd4c..3b09e39 100644 --- a/templates/cms_new.html +++ b/templates/cms_new.html @@ -3,18 +3,23 @@ {{ $noEmpty := .FormValue "no-empty" }} {{ template "header" . }} -« + +

    New Page

    +
    {{ if $noEmpty }} Empty fields are not allowed - please try again
    {{ end }} {{ if $editableSlugs }} -
    +
    +
    {{ end }} -
    -
    +
    +
    +
    +
    -{{ template "footer" . }} \ No newline at end of file +{{ template "footer" . }} diff --git a/templates/cms_save.html b/templates/cms_save.html index 84ed709..fc2e68a 100644 --- a/templates/cms_save.html +++ b/templates/cms_save.html @@ -7,8 +7,10 @@ {{ template "header" . }} {{ if $saveErr }} +

    Page Save Error

    There was an error saving the page: {{ ($saveErr).Error }} {{ else }} +

    Page Saved

    Page '{{ $title }}' saved successfully {{ end }} diff --git a/templates/delete.html b/templates/delete.html new file mode 100644 index 0000000..e5aad23 --- /dev/null +++ b/templates/delete.html @@ -0,0 +1,14 @@ +{{ $slug := ((.Context).Value "params").Slug }} +{{ $deleteErr := ((.Context).Value "adapter").DeletePage $slug }} + +{{ template "header" . }} + +{{ if $deleteErr }} +

    Deletion Error

    + There was an error deleting the page: {{ ($deleteErr).Error }} +{{ else }} +

    Page Deleted

    + Page at '{{ $slug }}' was deleted +{{ end }} + +{{ template "footer" . }} \ No newline at end of file diff --git a/templates/header.html b/templates/header.html index 7aea7d5..572df2a 100644 --- a/templates/header.html +++ b/templates/header.html @@ -5,14 +5,17 @@ + Nirvash — CMS +

    Nirvash CMS