From e2e9387bb677631faeaf45894578e07ccfd534ca Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Sat, 31 Jan 2015 23:00:52 -0800 Subject: [PATCH] Add hiring page mockup --- controllers/hire.moon | 47 ++++++++++++++++++++++++++++++++++--------- nginx.conf | 1 + views/about.moon | 3 --- views/hire.moon | 33 ++++++++++++++++++++++++++++++ views/success.moon | 8 ++++++++ 5 files changed, 79 insertions(+), 13 deletions(-) create mode 100644 views/hire.moon create mode 100644 views/success.moon diff --git a/controllers/hire.moon b/controllers/hire.moon index d8bf5eb..d786b8a 100644 --- a/controllers/hire.moon +++ b/controllers/hire.moon @@ -1,15 +1,42 @@ -gh = require('github').new({access_token: os.getenv "GITHUB_TOKEN", httpclient_driver: 'httpclient.ngx_driver'}) -http = require "lapis.nginx.http" - lapis = require "lapis" +csrf = require "lapis.csrf" +http = require "lapis.nginx.http" +mime = require "mime" -class About extends lapis.Application - [about: "/about"]: => - @user, err = gh\get_authenticated_user() +import respond_to from require "lapis.application" +import assert_valid from require "lapis.validate" - if err - @err = err +class Hire extends lapis.Application + [hire: "/hire"]: respond_to { + GET: => + @csrf_token = csrf.generate_token @ + return render: true - return status: 500, render: "error" + POST: => + csrf.assert_token @ - return render: true + assert_valid @params, { + { "name", exists: true, min_length: 3 } + { "message", exists: true, min_length: 15 } + { "email", exists: true, min_length: 3 } + } + + res, code = http.simple{ + url: "https://api.mailgun.net/v2/mailgun.xeserv.us/messages" + headers: { + "authentication": "Basic " .. (mime.b64 os.getenv "MAILGUN_KEY") + } + body: { + from: "#{@params.name} ", + to: "xena@yolo-swag.com", + subject: "I want to hire you!", + text: "Email from #{@params.name}:\n\n#{@params.message}\n\nPlease reply to #{@params.email}." + } + } + + if code != 200 + @err = res + return render: "error", status: 500 + + return render: "success" + } diff --git a/nginx.conf b/nginx.conf index ae46ff7..5dea3ec 100644 --- a/nginx.conf +++ b/nginx.conf @@ -5,6 +5,7 @@ daemon off; env PORT; env GITHUB_TOKEN; env GIT_REV; +env MAILGUN_KEY; events { worker_connections 1024; diff --git a/views/about.moon b/views/about.moon index bc259bc..fdc2773 100644 --- a/views/about.moon +++ b/views/about.moon @@ -14,7 +14,6 @@ class About extends Widget div class: "header", -> h1 "Christine Dodrill" - h4 "Rockstar Programmer" span "I am a GitHub power user. I am constantly learning new languages and tools. I strongly believe in knowing many languages and ways to do things so I can pick the right tool for the job." div class: "row nav", -> @@ -31,5 +30,3 @@ class About extends Widget div class: "col-md-4 col-xs-4 well", title: "Number of users following", -> i class: "fa fa-thumbs-o-up fa-lg" p @user.following - - diff --git a/views/hire.moon b/views/hire.moon new file mode 100644 index 0000000..ed0a2fd --- /dev/null +++ b/views/hire.moon @@ -0,0 +1,33 @@ +import Widget from require "lapis.html" + +class Hire extends Widget + content: => + div class: "row", -> + form class: "form-signin", method: "POST", action: "/hire", -> + input type: "hidden", name: "csrf_token", value: @csrf_token + + i class:"glyphicon glyphicon-ok form-control-feedback", -> + p "Required" + + div class: "form-group", -> + label for: "name", "Your Name" + div class: "input-group", -> + input type: "text", class: "form-control", name: "name", id: "name", placeholder: "Enter Name", :required + raw [[]] + + div class: "form-group", -> + label for: "email", "Your Email Address" + div class: "input-group", -> + input type: "email", class: "form-control", name: "email", id: "email", placeholder: "Enter Email Address", :required + raw [[]] + + div class: "form-group", -> + label for: "name", "Message" + div class: "input-group", -> + textarea type: "text", class: "form-control", name: "message", id: "message", rows: 5, :required + raw [[]] + + + raw [[]] + + diff --git a/views/success.moon b/views/success.moon new file mode 100644 index 0000000..0d1ac7e --- /dev/null +++ b/views/success.moon @@ -0,0 +1,8 @@ +import Widget from require "lapis.html" + +class Success extends Widget + content: => + center -> + h1 "Thanks!" + + p class: "lead", "Thanks for getting in touch! I'll get back with you as soon as I can."