From 02ab21726d2ccfdd3933d77d30923fdb44587914 Mon Sep 17 00:00:00 2001 From: Mac Siri Date: Wed, 18 Apr 2018 13:19:08 -0400 Subject: [PATCH] Create "invalid token" page for EmailSubscriptionController (#218) * Update email-unsubscription expiration to 31 days * Create invalid_token template * Fix lint --- app/assets/stylesheets/email_subscriptions.scss | 4 ++++ .../additional_content_boxes_controller.rb | 15 ++++++++------- app/controllers/email_subscriptions_controller.rb | 2 +- app/labor/boosted_article.rb | 1 - app/mailers/application_mailer.rb | 2 +- .../email_subscriptions/invalid_token.html.erb | 12 ++++++++++++ spec/requests/email_subscriptions_spec.rb | 8 ++++---- 7 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 app/views/email_subscriptions/invalid_token.html.erb diff --git a/app/assets/stylesheets/email_subscriptions.scss b/app/assets/stylesheets/email_subscriptions.scss index ecffec8c9..6bc5ba082 100644 --- a/app/assets/stylesheets/email_subscriptions.scss +++ b/app/assets/stylesheets/email_subscriptions.scss @@ -11,6 +11,10 @@ } } +.unsubscribed--red { + background: #ea919a; +} + .unsubscribed__title { font-weight: 600; font-size: 26px; diff --git a/app/controllers/additional_content_boxes_controller.rb b/app/controllers/additional_content_boxes_controller.rb index 04a3ed37f..3edcfe7fc 100644 --- a/app/controllers/additional_content_boxes_controller.rb +++ b/app/controllers/additional_content_boxes_controller.rb @@ -1,18 +1,19 @@ class AdditionalContentBoxesController < ApplicationController - def index articles_ids = params[:article_id].split(",") @article = Article.find(articles_ids[0]) @for_user_article = ClassicArticle. - new(current_user || @article, {not_ids: articles_ids}).get + new(current_user || @article, not_ids: articles_ids).get if (!user_signed_in? || current_user&.display_sponsors) && - @article.user.permit_adjacent_sponsors && + @article.user.permit_adjacent_sponsors && rand(2) == 1 @boosted_article = BoostedArticle. - new(current_user, @article, {not_ids: (articles_ids+[@for_user_article])}).get + new(current_user, @article, not_ids: (articles_ids + [@for_user_article])).get + end + unless @boosted_article + @alt_classic = ClassicArticle. + new(@article, not_ids: (articles_ids + [@for_user_article])).get end - @alt_classic = ClassicArticle. - new(@article, {not_ids: (articles_ids+[@for_user_article])}).get unless @boosted_article render "boxes", layout: false end -end \ No newline at end of file +end diff --git a/app/controllers/email_subscriptions_controller.rb b/app/controllers/email_subscriptions_controller.rb index 33a5319a4..3d7715756 100644 --- a/app/controllers/email_subscriptions_controller.rb +++ b/app/controllers/email_subscriptions_controller.rb @@ -7,7 +7,7 @@ class EmailSubscriptionsController < ApplicationController user.update(verified_params[:email_type] => false) @email_type = preferred_email_name(verified_params[:email_type]) else - not_found + render "invalid_token" end rescue ActiveSupport::MessageVerifier::InvalidSignature not_found diff --git a/app/labor/boosted_article.rb b/app/labor/boosted_article.rb index fdc3ba18c..798314ec2 100644 --- a/app/labor/boosted_article.rb +++ b/app/labor/boosted_article.rb @@ -1,5 +1,4 @@ class BoostedArticle - attr_accessor :user, :article, :tags, :not_ids def initialize(user, article, options) @user = user diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index 05bd80276..0e655997c 100644 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -6,7 +6,7 @@ class ApplicationMailer < ActionMailer::Base Rails.application.message_verifier(:unsubscribe).generate( user_id: id, email_type: email_type.to_sym, - expires_at: Time.now + 2.days, + expires_at: Time.now + 31.days, ) end end diff --git a/app/views/email_subscriptions/invalid_token.html.erb b/app/views/email_subscriptions/invalid_token.html.erb new file mode 100644 index 000000000..580616554 --- /dev/null +++ b/app/views/email_subscriptions/invalid_token.html.erb @@ -0,0 +1,12 @@ + +
+
+ Token expired or invalid +
+
+
+ Please + sign-in + to manage your email preferences. +
+
diff --git a/spec/requests/email_subscriptions_spec.rb b/spec/requests/email_subscriptions_spec.rb index de68b6553..694ce8233 100644 --- a/spec/requests/email_subscriptions_spec.rb +++ b/spec/requests/email_subscriptions_spec.rb @@ -7,7 +7,7 @@ RSpec.describe "EmailSubscriptions", type: :request do Rails.application.message_verifier(:unsubscribe).generate( user_id: user_id, email_type: :email_mention_notifications, - expires_at: Time.now + 2.days, + expires_at: Time.now + 31.days, ) end @@ -30,9 +30,9 @@ RSpec.describe "EmailSubscriptions", type: :request do it "won't work if it's past expireation date" do token = generate_token(user.id) - Timecop.freeze(Date.today + 3) do - expect { get email_subscriptions_unsubscribe_url(ut: token) }. - to raise_error(ActionController::RoutingError) + Timecop.freeze(Date.today + 32) do + get email_subscriptions_unsubscribe_url(ut: token) + expect(response).to render_template("invalid_token") end end end