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: + + <% 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