diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d83690e..0943415 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,4 +1,5 @@ class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 5d2c395..9a076f6 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -21,22 +21,20 @@ def show def create @message = Message.new(message_params) @message.message_id = SecureRandom.uuid; + @message.authenticated = !@message.password? - respond_to do |format| - if @message.save - format.html { redirect_to action: 'index', notice: 'Message was successfully created.' } - else - format.html { render :new } - end + if @message.save + MessageMailer.sd_message(@message).deliver_now + 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..b6226c1 --- /dev/null +++ b/app/mailers/message_mailer.rb @@ -0,0 +1,11 @@ +class MessageMailer < ApplicationMailer + + default from: 'selfdestructmsg@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 @@ + + + + + + +
+ View it here:
+ <%= url_for(only_path: false, action: 'show', controller: 'recipients', id: @message.message_id) %>.
+
+
+ Content: + <%= @message.content %> +
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 b55e214..943153b 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -14,7 +14,20 @@ 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 = { + :address => "smtp.gmail.com", + :port => 587, + :user_name => 'selfdestructmsg', + :password => '$0theRBfly', + :authentication => "plain", + :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 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..6c3bb28 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" + t.datetime "updated_at" 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