From 3e1697e737cae24ba398f7062c27ce4ced2b8626 Mon Sep 17 00:00:00 2001
From: Paul Duncan <pabs@pablotron.org>
Date: Sun, 13 Mar 2016 19:10:06 -0400
Subject: add test auth stub

---
 src/guff/handlers.cr              |  6 +++++-
 src/guff/handlers/test-auth.cr    | 32 ++++++++++++++++++++++++++++++++
 src/guff/views/ecrs/test/auth.ecr | 20 ++++++++++++++++++++
 src/guff/views/html/test/auth.cr  | 27 +++++++++++++++++++++++++++
 4 files changed, 84 insertions(+), 1 deletion(-)
 create mode 100644 src/guff/handlers/test-auth.cr
 create mode 100644 src/guff/views/ecrs/test/auth.ecr
 create mode 100644 src/guff/views/html/test/auth.cr

(limited to 'src/guff')

diff --git a/src/guff/handlers.cr b/src/guff/handlers.cr
index 91bc42b..e573673 100644
--- a/src/guff/handlers.cr
+++ b/src/guff/handlers.cr
@@ -20,10 +20,14 @@ module Guff
         HTTP::DeflateHandler.new as HTTP::Handler
       },
     }, {
-      env:  %w{development},
       init: ->(models : Models) {
         GuffStuffHandler.new(models) as HTTP::Handler
       },
+    }, {
+      env:  %w{development},
+      init: ->(models : Models) {
+        TestAuthHandler.new(models) as HTTP::Handler
+      },
     }, {
       env:  %w{development},
       init: ->(models : Models) {
diff --git a/src/guff/handlers/test-auth.cr b/src/guff/handlers/test-auth.cr
new file mode 100644
index 0000000..5cf5769
--- /dev/null
+++ b/src/guff/handlers/test-auth.cr
@@ -0,0 +1,32 @@
+require "../handler"
+require "../views/html/test/auth"
+
+class Guff::Handlers::TestAuthHandler < Guff::Handler
+  PATH_RE = %r{^/test/auth/?$}
+  def call(context : HTTP::Server::Context)
+    if PATH_RE.match(context.request.path.not_nil!)
+      case context.request.method
+      when "GET", "HEAD"
+        draw_page(context)
+      when "POST"
+        set_auth(context)
+      else
+        raise "unknown method"
+      end
+    else
+      call_next(context)
+    end
+  end
+
+  private def draw_page(context)
+    TestAuthHTMLView.run(@models, context)
+  end
+
+  private def set_auth(context)
+    params = HTTP::Params.parse(context.request.body as String)
+
+    # TODO: extract user id and set it in session
+
+    redirect(context, "/test/blog")
+  end
+end
diff --git a/src/guff/views/ecrs/test/auth.ecr b/src/guff/views/ecrs/test/auth.ecr
new file mode 100644
index 0000000..770e6b3
--- /dev/null
+++ b/src/guff/views/ecrs/test/auth.ecr
@@ -0,0 +1,20 @@
+<h1><%= h(TITLE) %></h1>
+
+<div class='container'>
+  <div class='col-md-8 col-md-offset-2'>
+    <div class='panel panel-default'>
+      <div class='panel-heading'>
+        <b>
+          <i class='fa fa-search'></i>
+          Auth Test
+        </b>
+      </div><!-- panel-heading -->
+
+      <div class='panel-body'>
+        <p>
+          Auth test.
+        </p>
+      </div><!-- panel-body -->
+    </div><!-- panel -->
+  </div><!-- col-md-8 -->
+</div><!-- container -->
diff --git a/src/guff/views/html/test/auth.cr b/src/guff/views/html/test/auth.cr
new file mode 100644
index 0000000..bdada74
--- /dev/null
+++ b/src/guff/views/html/test/auth.cr
@@ -0,0 +1,27 @@
+require "ecr/macros"
+require "../page"
+
+class Guff::TestAuthHTMLView
+  TITLE = "Guff Auth Test"
+  FEATURES = %w{bootstrap font-awesome}
+
+  def self.run(models, context : HTTP::Server::Context)
+    new(models).run(context)
+  end
+
+  def initialize(@models : Models)
+  end
+
+  def run(context)
+    page = PageHTMLView.new(TITLE, self.to_s)
+    page.add_features(FEATURES)
+    context.response.content_type = page.content_type
+    context.response.puts page
+  end
+
+  def h(s : String)
+    HTML.escape(s || "")
+  end
+
+  ECR.def_to_s("./src/guff/views/ecrs/test/auth.ecr")
+end
-- 
cgit v1.2.3