Skip to content
Snippets Groups Projects
Unverified Commit 6cc8295d authored by Khemissi Amir's avatar Khemissi Amir Committed by GitHub
Browse files

Pre-release Fixes 0: Fixed email logo issue and lack of forget PWD feedback (#4687)

* Mailing: Minor fixes and improvements to emails.

* Mailing: Removed unecessary tests.

* v2 users migration: Removed auto reset password process.

* Forget Password (FE): Added proper feedback.
parent 4400c1a6
No related branches found
No related tags found
No related merge requests found
......@@ -329,6 +329,7 @@
"password_updated": "Password updated.",
"account_activated": "Account activated.",
"activation_email_sent": "Activation email has been sent",
"reset_pwd_email_sent": "Reset password email should be sent, kindly check your inbox",
"challenge_passed": "Challenge Passed"
},
"session": {
......
......@@ -31,7 +31,9 @@ module Api
UserMailer.with(
email:,
name: current_user.name,
signup_url: root_url(inviteToken: invitation.token)
signup_url: root_url(inviteToken: invitation.token),
base_url: request.base_url,
provider: current_provider
).invitation_email.deliver_later
rescue StandardError => e
logger.error "Failed to send invitation to #{email} - #{e}"
......
......@@ -70,13 +70,6 @@ module Api
user = User.new(user_hash.merge(provider: 'greenlight', role:))
return render_error status: :bad_request unless user.save
return render_data status: :created if user.external_id?
token = user.generate_reset_token!
UserMailer.with(user:, expires_in: User::RESET_TOKEN_VALIDITY_PERIOD.from_now,
reset_url: reset_password_url(token)).reset_password_email.deliver_later
render_data status: :created
end
......
......@@ -22,7 +22,8 @@ module Api
token = user.generate_reset_token!
UserMailer.with(user:, expires_in: User::RESET_TOKEN_VALIDITY_PERIOD.from_now,
reset_url: reset_password_url(token)).reset_password_email.deliver_later
reset_url: reset_password_url(token), base_url: request.base_url,
provider: current_provider).reset_password_email.deliver_later
render_data status: :ok
end
......
......@@ -51,7 +51,8 @@ module Api
token = user.generate_activation_token!
UserMailer.with(user:, expires_in: User::ACTIVATION_TOKEN_VALIDITY_PERIOD.from_now,
activation_url: activate_account_url(token)).activate_account_email.deliver_later
activation_url: activate_account_url(token), base_url: request.base_url,
provider: current_provider).activate_account_email.deliver_later
create_default_room(user)
......
......@@ -14,7 +14,8 @@ module Api
token = @user.generate_activation_token!
UserMailer.with(user: @user, expires_in: User::ACTIVATION_TOKEN_VALIDITY_PERIOD.from_now,
activation_url: activate_account_url(token)).activate_account_email.deliver_later
activation_url: activate_account_url(token), base_url: request.base_url,
provider: current_provider).activate_account_email.deliver_later
render_data status: :ok
end
......
......@@ -12,6 +12,7 @@ export default function useCreateResetPwd() {
(user) => axios.post('/reset_password.json', { user }),
{
onSuccess: () => {
toast.success(t('toast.success.user.reset_pwd_email_sent'));
navigate('/');
},
onError: () => {
......
# frozen_string_literal: true
class UserMailer < ApplicationMailer
before_action :branding
before_action :preset, :branding # :preset must be called before :branding.
# Sends a test email
def test_email
......@@ -25,6 +25,7 @@ class UserMailer < ApplicationMailer
end
def invitation_email
@email = params[:email]
@name = params[:name]
@signup_url = params[:signup_url]
@email = params[:email]
......@@ -32,9 +33,17 @@ class UserMailer < ApplicationMailer
mail(to: @email, subject: t('email.invitation.invitation_to_join'))
end
private
def preset
@provider = params[:provider] || 'greenlight'
@base_url = params[:base_url]
end
def branding
branding_hash = SiteSetting.includes(:setting).where(settings: { name: %w[PrimaryColor BrandingImage] }).pluck(:'settings.name', :value).to_h
@brand_image = branding_hash['BrandingImage']
branding_hash = SiteSetting.includes(:setting).where(provider: @provider, settings: { name: %w[PrimaryColor BrandingImage] })
.pluck(:name, :value).to_h
@brand_image = ActionController::Base.helpers.image_url(branding_hash['BrandingImage'], host: @base_url)
@brand_color = branding_hash['PrimaryColor']
end
end
......@@ -120,13 +120,13 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
context 'when decryption passes' do
describe 'when decrypted params encapsulation is conform and data is valid' do
context 'when external_id isn\'t present' do
it 'returns :created, creates a user and sends a reset email' do
it 'returns :created, creates a user' do
encrypted_params = encrypt_params({ user: valid_user_params }, expires_in: 10.seconds)
expect_any_instance_of(described_class).to receive(:generate_secure_pwd).and_call_original
expect { post :create_user, params: { v2: { encrypted_params: } } }.to change(User, :count).from(0).to(1)
expect(ActionMailer::MailDeliveryJob).to have_been_enqueued.at(:no_wait).exactly(:once).with('UserMailer', 'reset_password_email',
'deliver_now', Hash)
expect(ActionMailer::MailDeliveryJob).not_to have_been_enqueued
user = User.take
expect(user.name).to eq(valid_user_params[:name])
expect(user.email).to eq(valid_user_params[:email])
......@@ -136,14 +136,13 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
expect(user.provider).to eq('greenlight')
expect(response).to have_http_status(:created)
expect(user.password_digest).to be_present
expect(user.reset_digest).to be_present
end
end
context 'when external_id is present' do
before { valid_user_params[:external_id] = 'EXTERNAL' }
it 'returns :created, creates a user but does not generate a pwd nor send a reset email' do
it 'returns :created, creates a user but does not generate a pwd' do
encrypted_params = encrypt_params({ user: valid_user_params }, expires_in: 10.seconds)
expect_any_instance_of(described_class).not_to receive(:generate_secure_pwd).and_call_original
......@@ -159,7 +158,6 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
expect(user.provider).to eq('greenlight')
expect(response).to have_http_status(:created)
expect(user.password_digest).to be_blank
expect(user.reset_digest).to be_blank
end
end
......@@ -167,9 +165,10 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
describe 'when language is empty' do
before { valid_user_params[:language] = nil }
it 'returns :created, creates a user with the default locale and sends a reset email' do
it 'returns :created, creates a user with the default locale' do
encrypted_params = encrypt_params({ user: valid_user_params }, expires_in: 10.seconds)
expect { post :create_user, params: { v2: { encrypted_params: } } }.to change(User, :count).from(0).to(1)
expect(ActionMailer::MailDeliveryJob).not_to have_been_enqueued
user = User.take
expect(user.name).to eq(valid_user_params[:name])
......@@ -185,9 +184,10 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
describe 'when language is "default"' do
before { valid_user_params[:language] = 'default' }
it 'returns :created, creates a user with the default locale and sends a reset email' do
it 'returns :created, creates a user with the default locale' do
encrypted_params = encrypt_params({ user: valid_user_params }, expires_in: 10.seconds)
expect { post :create_user, params: { v2: { encrypted_params: } } }.to change(User, :count).from(0).to(1)
expect(ActionMailer::MailDeliveryJob).not_to have_been_enqueued
user = User.take
expect(user.name).to eq(valid_user_params[:name])
......
# frozen_string_literal: true
require 'rails_helper'
describe UserMailer, type: :mailer do
describe '#reset_password_email' do
it 'sets correct reset mail message' do
freeze_time
user = build(:user)
mail = described_class.with(user:, reset_url: 'https://reset.password.now/token', expires_in: 1.day.from_now).reset_password_email
expect(mail.subject).to eq 'Password Reset Request'
expect(mail.to).to eq([user.email])
expect(mail.body.encoded).to match(user.email)
expect(mail.body.encoded).to match('href="https://reset.password.now/token"')
expect(mail.body.encoded).to match('The link will expire in 1 day.')
end
end
describe '#activate_account_email' do
it 'sets correct activation mail message' do
freeze_time
user = build(:user)
mail = described_class.with(user:, activation_url: 'https://activate.account.now/token', expires_in: 1.day.from_now).activate_account_email
expect(mail.subject).to eq 'Account Activation'
expect(mail.to).to eq([user.email])
expect(mail.body.encoded).to match('href="https://activate.account.now/token"')
expect(mail.body.encoded).to match('The link will expire in 1 day.')
end
end
describe '#test_email' do
it 'sets correct test mail message' do
mail = described_class.with(to: 'user@users.com', subject: 'Test Subject').test_email
expect(mail.subject).to eq 'Test Subject'
expect(mail.to).to eq(['user@users.com'])
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment