From f1ab371118a91fb4568131df78dba571bbb005c9 Mon Sep 17 00:00:00 2001 From: Clyde Tedrick Date: Mon, 2 Nov 2015 01:29:41 -0600 Subject: [PATCH 1/6] mailer integration, remaining flow control --- app/controllers/application_controller.rb | 6 +++ app/controllers/messages_controller.rb | 20 ++++----- app/controllers/recipients_controller.rb | 41 +++++++++++++++++++ app/mailers/application_mailer.rb | 4 ++ app/mailers/message_mailer.rb | 11 +++++ app/views/layouts/mailer.html.erb | 5 +++ app/views/layouts/mailer.text.erb | 1 + app/views/message_mailer/sd_message.html.erb | 14 +++++++ app/views/recipients/authenticate.html.erb | 13 ++++++ app/views/recipients/show.html.erb | 6 +++ config/environments/development.rb | 12 +++++- config/routes.rb | 4 ++ db/migrate/20151029052305_create_messages.rb | 2 +- db/schema.rb | 6 +-- test/controllers/readme_controller_test.rb | 7 ++++ test/mailers/message_mailer_test.rb | 7 ++++ .../previews/message_mailer_preview.rb | 4 ++ 17 files changed, 148 insertions(+), 15 deletions(-) create mode 100644 app/controllers/recipients_controller.rb create mode 100644 app/mailers/application_mailer.rb create mode 100644 app/mailers/message_mailer.rb create mode 100644 app/views/layouts/mailer.html.erb create mode 100644 app/views/layouts/mailer.text.erb create mode 100644 app/views/message_mailer/sd_message.html.erb create mode 100644 app/views/recipients/authenticate.html.erb create mode 100644 app/views/recipients/show.html.erb create mode 100644 test/controllers/readme_controller_test.rb create mode 100644 test/mailers/message_mailer_test.rb create mode 100644 test/mailers/previews/message_mailer_preview.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d83690e..a5120b8 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,5 +1,11 @@ class ApplicationController < ActionController::Base + before_filter :set_mailer_host + # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception + + def set_mailer_host + ActionMailer::Base.default_url_options[:host] = request.host_with_port + end end diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 5d2c395..44a2752 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -21,22 +21,22 @@ def show def create @message = Message.new(message_params) @message.message_id = SecureRandom.uuid; - - respond_to do |format| - if @message.save - format.html { redirect_to action: 'index', notice: 'Message was successfully created.' } - else - format.html { render :new } - end + @message.authenticated = !@message.password? + + if @message.save + puts 'message created' + MessageMailer.sd_message(@message).deliver_now + puts 'message sent?' + redirect_to action: 'index', notice: 'Message was successfully created.' + else + render :new end end # DELETE /messages/1 def destroy @message.destroy - respond_to do |format| - format.html { redirect_to action: 'index', notice: 'Message was successfully destroyed.' } - end + redirect_to action: 'index', notice: 'Message was successfully destroyed.' end private diff --git a/app/controllers/recipients_controller.rb b/app/controllers/recipients_controller.rb new file mode 100644 index 0000000..c8c545e --- /dev/null +++ b/app/controllers/recipients_controller.rb @@ -0,0 +1,41 @@ +class RecipientsController < ApplicationController + + before_action :set_message + + # GET /recipients/1 + def show + if @message.authenticated? + @message.delete() + else + redirect_to action: 'authenticate' + end + end + + # GET /recipients/1/authenticate + def authenticate + end + + # POST /recipients/1 + def authenticatedShow + paramHash = message_params + if @message.password == paramHash[:password] && @message.update(authenticated: true) + redirect_to action: 'show' + else + redirect_to action: 'authenticate' + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_message + @message = Message.find_by message_id: params[:id] + if !@message + redirect_to root_path + end + end + + # Never trust parameters from the scary internet, only allow the white list through. + def message_params + params.require(:message).permit(:password) + end +end diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb new file mode 100644 index 0000000..d25d889 --- /dev/null +++ b/app/mailers/application_mailer.rb @@ -0,0 +1,4 @@ +class ApplicationMailer < ActionMailer::Base + default from: "from@example.com" + layout 'mailer' +end diff --git a/app/mailers/message_mailer.rb b/app/mailers/message_mailer.rb new file mode 100644 index 0000000..c0a45a5 --- /dev/null +++ b/app/mailers/message_mailer.rb @@ -0,0 +1,11 @@ +class MessageMailer < ApplicationMailer + + default from: 'iamclyde@gmail.com' + + def sd_message(message) + @message = message + @url = 'http://example.com/login' + mail(to: @message.recipient, subject: 'A Message') + end + +end diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb new file mode 100644 index 0000000..991cf0f --- /dev/null +++ b/app/views/layouts/mailer.html.erb @@ -0,0 +1,5 @@ + + + <%= yield %> + + diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb new file mode 100644 index 0000000..37f0bdd --- /dev/null +++ b/app/views/layouts/mailer.text.erb @@ -0,0 +1 @@ +<%= yield %> diff --git a/app/views/message_mailer/sd_message.html.erb b/app/views/message_mailer/sd_message.html.erb new file mode 100644 index 0000000..37e134e --- /dev/null +++ b/app/views/message_mailer/sd_message.html.erb @@ -0,0 +1,14 @@ + + + + + + +

A message has been left for you

+

+ View it here: + <%= url_for(only_path: false, action: 'show', controller: 'recipients', id: @message.message_id) %>. +
+

+ + \ No newline at end of file diff --git a/app/views/recipients/authenticate.html.erb b/app/views/recipients/authenticate.html.erb new file mode 100644 index 0000000..03d5ab4 --- /dev/null +++ b/app/views/recipients/authenticate.html.erb @@ -0,0 +1,13 @@ +

Please Authenticate

+ +<%= form_for(@message, method: 'post', url: '/recipients/' + @message.message_id) do |m| %> + +
+ <%= m.label :password %>
+ <%= m.password_field :password %> +
+ +
+ <%= m.submit %> +
+<% end %> \ No newline at end of file diff --git a/app/views/recipients/show.html.erb b/app/views/recipients/show.html.erb new file mode 100644 index 0000000..21e8e3f --- /dev/null +++ b/app/views/recipients/show.html.erb @@ -0,0 +1,6 @@ +

This message has been deleted. Once you leave this page it will no longer be available.

+ +

+ Content: + <%= @message.content %> +

diff --git a/config/environments/development.rb b/config/environments/development.rb index b55e214..825267d 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -14,7 +14,17 @@ config.action_controller.perform_caching = false # Don't care if the mailer can't send. - config.action_mailer.raise_delivery_errors = false + #config.action_mailer.raise_delivery_errors = false + config.action_mailer.raise_delivery_errors = true + config.action_mailer.delivery_method = :smtp + config.action_mailer.smtp_settings = { + :address => "smtp.gmail.com", + :port => 587, + :user_name => 'selfdestructmsg', + :password => '$0theRBfly', + :authentication => "plain", + :enable_starttls_auto => true + } # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log diff --git a/config/routes.rb b/config/routes.rb index 6119e01..ab98d27 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,9 @@ Rails.application.routes.draw do resources 'messages', :only => [:index, :new, :create, :show, :destroy] + + get 'recipients/:id' => 'recipients#show' + get 'recipients/:id/authenticate' => 'recipients#authenticate' + post 'recipients/:id' => 'recipients#authenticatedShow' # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes". diff --git a/db/migrate/20151029052305_create_messages.rb b/db/migrate/20151029052305_create_messages.rb index 76fecde..86a8637 100644 --- a/db/migrate/20151029052305_create_messages.rb +++ b/db/migrate/20151029052305_create_messages.rb @@ -5,7 +5,7 @@ def change t.text :recipient t.text :password t.text :message_id, :unique => true - t.boolean :viewed + t.boolean :authenticated t.timestamps null: false end diff --git a/db/schema.rb b/db/schema.rb index eae5808..cbfa29b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -18,9 +18,9 @@ t.text "recipient" t.text "password" t.text "message_id" - t.boolean "viewed" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.boolean "authenticated" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end end diff --git a/test/controllers/readme_controller_test.rb b/test/controllers/readme_controller_test.rb new file mode 100644 index 0000000..119c11b --- /dev/null +++ b/test/controllers/readme_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class ReadmeControllerTest < ActionController::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/mailers/message_mailer_test.rb b/test/mailers/message_mailer_test.rb new file mode 100644 index 0000000..3fbbaaa --- /dev/null +++ b/test/mailers/message_mailer_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class MessageMailerTest < ActionMailer::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/mailers/previews/message_mailer_preview.rb b/test/mailers/previews/message_mailer_preview.rb new file mode 100644 index 0000000..d375497 --- /dev/null +++ b/test/mailers/previews/message_mailer_preview.rb @@ -0,0 +1,4 @@ +# Preview all emails at http://localhost:3000/rails/mailers/message_mailer +class MessageMailerPreview < ActionMailer::Preview + +end From ab79b89030db0867bffac805096f593549427de3 Mon Sep 17 00:00:00 2001 From: Clyde Tedrick Date: Mon, 2 Nov 2015 01:40:23 -0600 Subject: [PATCH 2/6] clean up --- app/controllers/messages_controller.rb | 2 -- app/mailers/message_mailer.rb | 2 +- config/environments/development.rb | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 44a2752..9a076f6 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -24,9 +24,7 @@ def create @message.authenticated = !@message.password? if @message.save - puts 'message created' MessageMailer.sd_message(@message).deliver_now - puts 'message sent?' redirect_to action: 'index', notice: 'Message was successfully created.' else render :new diff --git a/app/mailers/message_mailer.rb b/app/mailers/message_mailer.rb index c0a45a5..b6226c1 100644 --- a/app/mailers/message_mailer.rb +++ b/app/mailers/message_mailer.rb @@ -1,6 +1,6 @@ class MessageMailer < ApplicationMailer - default from: 'iamclyde@gmail.com' + default from: 'selfdestructmsg@gmail.com' def sd_message(message) @message = message diff --git a/config/environments/development.rb b/config/environments/development.rb index 825267d..ac96022 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -14,7 +14,6 @@ config.action_controller.perform_caching = false # Don't care if the mailer can't send. - #config.action_mailer.raise_delivery_errors = false config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { From d9dd4cc8c85927f269dd3e96d57971b26aca10d5 Mon Sep 17 00:00:00 2001 From: Clyde Tedrick Date: Mon, 2 Nov 2015 01:45:36 -0600 Subject: [PATCH 3/6] more clean up --- app/views/messages/index.html.erb | 2 +- app/views/messages/show.json.jbuilder | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 app/views/messages/show.json.jbuilder diff --git a/app/views/messages/index.html.erb b/app/views/messages/index.html.erb index 3dd513a..d1d0d85 100644 --- a/app/views/messages/index.html.erb +++ b/app/views/messages/index.html.erb @@ -15,7 +15,7 @@ <% @messages.each do |message| %> - <%= 'TODO: host/messages/' + message.message_id %> + <%= url_for(only_path: false, action: 'show', controller: 'recipients', id: message.message_id) %> <%= message.recipient %> <%= link_to 'Delete Message', message, method: :delete %> diff --git a/app/views/messages/show.json.jbuilder b/app/views/messages/show.json.jbuilder deleted file mode 100644 index f72c54e..0000000 --- a/app/views/messages/show.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.extract! @message, :content, :password, :Recipient From 6ce30f21c2e498e03458f54d98c83ac8cbe287ce Mon Sep 17 00:00:00 2001 From: Clyde Tedrick Date: Mon, 2 Nov 2015 02:00:28 -0600 Subject: [PATCH 4/6] wrong review route --- app/views/messages/index.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/messages/index.html.erb b/app/views/messages/index.html.erb index d1d0d85..59ded91 100644 --- a/app/views/messages/index.html.erb +++ b/app/views/messages/index.html.erb @@ -15,7 +15,7 @@ <% @messages.each do |message| %> - <%= url_for(only_path: false, action: 'show', controller: 'recipients', id: message.message_id) %> + <%= link_to 'Review message', message %> <%= message.recipient %> <%= link_to 'Delete Message', message, method: :delete %> From f14cb1cf9a07d7cead3bd12e3ed20168f76deb48 Mon Sep 17 00:00:00 2001 From: Clyde Tedrick Date: Sun, 8 Nov 2015 18:24:39 -0600 Subject: [PATCH 5/6] mailer default url review comment --- app/controllers/application_controller.rb | 7 +------ config/application.rb | 2 ++ config/environments/development.rb | 4 ++++ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a5120b8..0943415 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,11 +1,6 @@ class ApplicationController < ActionController::Base - before_filter :set_mailer_host - + # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception - - def set_mailer_host - ActionMailer::Base.default_url_options[:host] = request.host_with_port - end end diff --git a/config/application.rb b/config/application.rb index 87bdd44..fd2b477 100644 --- a/config/application.rb +++ b/config/application.rb @@ -8,6 +8,7 @@ module SelfDestruct class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. @@ -22,5 +23,6 @@ class Application < Rails::Application # Do not swallow errors in after_commit/after_rollback callbacks. config.active_record.raise_in_transactional_callbacks = true + end end diff --git a/config/environments/development.rb b/config/environments/development.rb index ac96022..943153b 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -25,6 +25,10 @@ :enable_starttls_auto => true } + config.action_mailer.default_url_options = { + :host => 'localhost:3000' + } + # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log From 5236f79bf1e848f2091a47c6b7f50740b00379f7 Mon Sep 17 00:00:00 2001 From: Clyde Tedrick Date: Wed, 2 Dec 2015 14:08:48 -0600 Subject: [PATCH 6/6] review comments --- db/schema.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index cbfa29b..6c3bb28 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -19,8 +19,8 @@ t.text "password" t.text "message_id" t.boolean "authenticated" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" end end