diff --git a/app/assets/stylesheets/administrate/overrides.css.scss b/app/assets/stylesheets/administrate/overrides.css.scss
new file mode 100644
index 0000000..7b325fa
--- /dev/null
+++ b/app/assets/stylesheets/administrate/overrides.css.scss
@@ -0,0 +1,4 @@
+.sign_out {
+ position: absolute;
+ bottom: 1.5em;
+}
diff --git a/app/controllers/admin/application_controller.rb b/app/controllers/admin/application_controller.rb
index 59c4ec9..dff706f 100644
--- a/app/controllers/admin/application_controller.rb
+++ b/app/controllers/admin/application_controller.rb
@@ -5,11 +5,9 @@
# If you want to add pagination or other controller-level concerns,
# you're free to overwrite the RESTful controller actions.
class Admin::ApplicationController < Administrate::ApplicationController
- before_filter :authenticate_admin
+ include Monban::ControllerHelpers
- def authenticate_admin
- # TODO Add authentication logic here.
- end
+ before_filter :require_login
# Override this value to specify the number of elements to display at a time
# on index pages. Defaults to 20.
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index a4f3f59..261b08d 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,4 +1,5 @@
class ApplicationController < ActionController::Base
+ include Monban::ControllerHelpers
protect_from_forgery
rescue_from ActiveRecord::RecordNotFound, with: :render_404
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
new file mode 100644
index 0000000..c9ecd45
--- /dev/null
+++ b/app/controllers/sessions_controller.rb
@@ -0,0 +1,29 @@
+class SessionsController < ApplicationController
+ layout 'administrate/login'
+
+ skip_before_action :require_login, only: [:new, :create]
+
+ def new
+ end
+
+ def create
+ user = authenticate_session(session_params)
+
+ if sign_in(user)
+ redirect_to admin_root_path
+ else
+ render :new
+ end
+ end
+
+ def destroy
+ sign_out
+ redirect_to root_path
+ end
+
+ private
+
+ def session_params
+ params.require(:session).permit(:email, :password)
+ end
+end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
new file mode 100644
index 0000000..e817abd
--- /dev/null
+++ b/app/controllers/users_controller.rb
@@ -0,0 +1,25 @@
+class UsersController < ApplicationController
+ skip_before_action :require_login, only: [:new, :create]
+
+ def new
+ @user = User.new
+ end
+
+ def create
+ @user = sign_up(user_params)
+
+ if @user.valid?
+ sign_in(@user)
+ redirect_to root_path
+ else
+ render :new
+ end
+ end
+
+ private
+
+ def user_params
+ params.require(:user).permit(:email, :password)
+ end
+end
+
diff --git a/app/models/user.rb b/app/models/user.rb
index 4a57cf0..fb96cd8 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,2 +1,4 @@
class User < ActiveRecord::Base
+ validates :email, presence: true, uniqueness: true
+ validates :password_digest, presence: true
end
diff --git a/app/views/layouts/administrate/application.html.erb b/app/views/layouts/administrate/application.html.erb
new file mode 100644
index 0000000..f1ea89d
--- /dev/null
+++ b/app/views/layouts/administrate/application.html.erb
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+ <%= content_for(:title) %> | <%= Rails.application.class.parent_name.titlecase %>
+ <%= stylesheet_link_tag "//fonts.googleapis.com/css?family=Lato:300,400,900", media: "all" %>
+ <%= stylesheet_link_tag "administrate/application", media: "all" %>
+ <%= stylesheet_link_tag "administrate/overrides", media: "all" %>
+ <%= csrf_meta_tags %>
+
+
+
+
+
+
+
+ <%= content_for(:search) %>
+
+ <%= render "flashes" -%>
+ <%= yield %>
+
+
+
+
+ <%= render "javascript" %>
+
+
diff --git a/app/views/layouts/administrate/login.html.erb b/app/views/layouts/administrate/login.html.erb
new file mode 100644
index 0000000..0d43525
--- /dev/null
+++ b/app/views/layouts/administrate/login.html.erb
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+ <%= content_for(:title) %> | <%= Rails.application.class.parent_name.titlecase %>
+ <%= stylesheet_link_tag "//fonts.googleapis.com/css?family=Lato:300,400,900", media: "all" %>
+ <%= stylesheet_link_tag "administrate/application", media: "all" %>
+ <%= stylesheet_link_tag "login", media: "all" %>
+ <%= csrf_meta_tags %>
+
+
+
+
+
+
+ <%= render "administrate/application/flashes" -%>
+ <%= yield %>
+
+
+
+
+
diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb
new file mode 100644
index 0000000..1581ed9
--- /dev/null
+++ b/app/views/sessions/new.html.erb
@@ -0,0 +1,13 @@
+<%= form_for :session, url: session_path do |form| %>
+
+ <%= form.label :email %>
+ <%= form.email_field :email %>
+
+
+ <%= form.label :password %>
+ <%= form.password_field :password %>
+
+
+ <%= form.submit "Sign in" %>
+
+<% end %>
diff --git a/app/views/users/new.html.erb b/app/views/users/new.html.erb
new file mode 100644
index 0000000..c99474d
--- /dev/null
+++ b/app/views/users/new.html.erb
@@ -0,0 +1,23 @@
+<%= form_for @user do |form| %>
+
+ <% if @user.errors.any? %>
+ <%= pluralize(@user.errors.count, "error") %> prevented your account from being created:
+
+ <% @user.errors.full_messages.each do |error_message| %>
+ - <%= error_message %>
+ <% end %>
+
+ <% end %>
+
+
+ <%= form.label :email %>
+ <%= form.email_field :email %>
+
+
+ <%= form.label :password %>
+ <%= form.password_field :password %>
+
+
+ <%= form.submit "Sign up" %>
+
+<% end %>
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
index ac1916a..2eaad7f 100644
--- a/config/initializers/session_store.rb
+++ b/config/initializers/session_store.rb
@@ -1,6 +1,6 @@
# Be sure to restart your server when you modify this file.
-DanBarberPhoto::Application.config.session_store :cookie_store, key: '_danbarberphoto_session', secure: true
+DanBarberPhoto::Application.config.session_store :cookie_store, key: '_danbarberphoto_session'
# Use the database for sessions instead of the cookie-based default,
# which shouldn't be used to store highly confidential information
diff --git a/config/locales/monban.en.yml b/config/locales/monban.en.yml
new file mode 100644
index 0000000..3eeebfa
--- /dev/null
+++ b/config/locales/monban.en.yml
@@ -0,0 +1,5 @@
+en:
+ activerecord:
+ attributes:
+ user:
+ password_digest: "Password"
diff --git a/config/routes.rb b/config/routes.rb
index 1993957..0c4174b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,4 +1,12 @@
+require 'monban/constraints/signed_in'
+require 'monban/constraints/signed_out'
+
DanBarberPhoto::Application.routes.draw do
+ resource :session, only: [:new, :create, :destroy]
+ resources :users, only: [:new, :create]
+ resource :session, only: [:new, :create, :destroy]
+ resources :users, only: [:new, :create]
+
namespace :admin do
DashboardManifest::DASHBOARDS.each do |dashboard_resource|
resources dashboard_resource
diff --git a/db/migrate/20151023163642_create_users.rb b/db/migrate/20151023165644_create_users.rb
similarity index 66%
rename from db/migrate/20151023163642_create_users.rb
rename to db/migrate/20151023165644_create_users.rb
index 9500386..9e89afe 100644
--- a/db/migrate/20151023163642_create_users.rb
+++ b/db/migrate/20151023165644_create_users.rb
@@ -1,8 +1,8 @@
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
- t.string :email
- t.string :password_digest, limit: 60
+ t.string :email, null: false
+ t.string :password_digest, null: false, limit: 60
t.timestamps null: false
end
diff --git a/db/schema.rb b/db/schema.rb
index 3becb29..15320f0 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20151023163642) do
+ActiveRecord::Schema.define(version: 20151023165644) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -68,8 +68,8 @@ ActiveRecord::Schema.define(version: 20151023163642) do
add_index "sessions", ["updated_at"], name: "index_sessions_on_updated_at", using: :btree
create_table "users", force: :cascade do |t|
- t.string "email"
- t.string "password_digest", limit: 60
+ t.string "email", null: false
+ t.string "password_digest", limit: 60, null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
diff --git a/spec/factories/users.rb b/spec/factories/users.rb
index 110df4c..4e46c1b 100644
--- a/spec/factories/users.rb
+++ b/spec/factories/users.rb
@@ -3,5 +3,4 @@ FactoryGirl.define do
email "test@example.com"
password_digest ""
end
-
end