From e0bc82657b36776cf755fda62d1bbcbed19df1e9 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Mon, 7 Jan 2019 14:22:08 +0530 Subject: [PATCH] FIX: better accept invite flow when user is invited via a link --- .../discourse/controllers/invites-show.js.es6 | 5 +++-- .../discourse/templates/invites/show.hbs | 10 ++++------ app/controllers/invites_controller.rb | 15 +++++++++------ config/locales/server.en.yml | 1 + spec/requests/invites_controller_spec.rb | 1 + 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/invites-show.js.es6 b/app/assets/javascripts/discourse/controllers/invites-show.js.es6 index 78c6bbcf0c8..128269b8e6b 100644 --- a/app/assets/javascripts/discourse/controllers/invites-show.js.es6 +++ b/app/assets/javascripts/discourse/controllers/invites-show.js.es6 @@ -94,8 +94,9 @@ export default Ember.Controller.extend( "successMessage", result.message || I18n.t("invites.success") ); - this.set("redirectTo", result.redirect_to); - DiscourseURL.redirectTo(result.redirect_to || "/"); + if (result.redirect_to) { + DiscourseURL.redirectTo(result.redirect_to || "/"); + } } else { if ( result.errors && diff --git a/app/assets/javascripts/discourse/templates/invites/show.hbs b/app/assets/javascripts/discourse/templates/invites/show.hbs index 65c775087b6..e8877238d36 100644 --- a/app/assets/javascripts/discourse/templates/invites/show.hbs +++ b/app/assets/javascripts/discourse/templates/invites/show.hbs @@ -8,13 +8,12 @@
-

{{i18n 'invites.invited_by'}}

- -

{{user-info user=invitedBy}}

- {{#if successMessage}} -

{{successMessage}}

+

+

{{{successMessage}}}

{{else}} +

{{i18n 'invites.invited_by'}}

+

{{user-info user=invitedBy}}

{{{yourEmailMessage}}} {{#if externalAuthsEnabled}} @@ -63,7 +62,6 @@

{{errorMessage}}
{{/if}} - {{/if}}
diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb index c888cffab4d..a178e401dac 100644 --- a/app/controllers/invites_controller.rb +++ b/app/controllers/invites_controller.rb @@ -47,16 +47,19 @@ class InvitesController < ApplicationController begin user = invite.redeem(username: params[:username], name: params[:name], password: params[:password], user_custom_fields: params[:user_custom_fields]) if user.present? - log_on_user(user) + log_on_user(user) if user.active? post_process_invite(user) end - topic = user.present? ? invite.topics.first : nil + response = { success: true } + if user.present? && user.active? + topic = invite.topics.first + response[:redirect_to] = topic.present? ? path("#{topic.relative_url}") : path("/") + else + response[:message] = I18n.t('invite.confirm_email') + end - render json: { - success: true, - redirect_to: topic.present? ? path("#{topic.relative_url}") : path("/") - } + render json: response rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved => e render json: { success: false, diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 906e5eea508..743a573e480 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -185,6 +185,7 @@ en:

Otherwise please Reset Password.

user_exists: "There's no need to invite %{email}, they already have an account!" + confirm_email: "

You’re almost done! We sent an activation mail to your email address. Please follow the instructions in the mail to activate your account.

If it doesn’t arrive, check your spam folder.

" bulk_invite: file_should_be_csv: "The uploaded file should be of csv format." diff --git a/spec/requests/invites_controller_spec.rb b/spec/requests/invites_controller_spec.rb index c2557e5c7c1..b814df7234b 100644 --- a/spec/requests/invites_controller_spec.rb +++ b/spec/requests/invites_controller_spec.rb @@ -355,6 +355,7 @@ describe InvitesController do put "/invites/show/#{invite.invite_key}.json", params: { password: "verystrongpassword" } expect(response.status).to eq(200) expect(JSON.parse(response.body)["success"]).to eq(true) + expect(JSON.parse(response.body)["message"]).to eq(I18n.t("invite.confirm_email")) invited_user = User.find_by_email(invite.email) expect(invited_user.active).to eq(false)