mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 12:37:56 +00:00
chore: Rotate pubsub token on password change (#7194)
Fixes: https://linear.app/chatwoot/issue/CW-1350/
This commit is contained in:
@@ -6,6 +6,16 @@ module Pubsubable
|
|||||||
included do
|
included do
|
||||||
# Used by the actionCable/PubSub Service we use for real time communications
|
# Used by the actionCable/PubSub Service we use for real time communications
|
||||||
has_secure_token :pubsub_token
|
has_secure_token :pubsub_token
|
||||||
|
before_save :rotate_pubsub_token
|
||||||
|
end
|
||||||
|
|
||||||
|
def rotate_pubsub_token
|
||||||
|
# ATM we are only rotating the token if the user is changing their password
|
||||||
|
return unless is_a?(User)
|
||||||
|
|
||||||
|
# Using the class method to avoid the extra Save
|
||||||
|
# TODO: Should we do this on signin ?
|
||||||
|
self.pubsub_token = self.class.generate_unique_secure_token if will_save_change_to_encrypted_password?
|
||||||
end
|
end
|
||||||
|
|
||||||
def pubsub_token
|
def pubsub_token
|
||||||
|
|||||||
@@ -34,6 +34,22 @@ RSpec.describe User do
|
|||||||
|
|
||||||
it { expect(user.pubsub_token).not_to be_nil }
|
it { expect(user.pubsub_token).not_to be_nil }
|
||||||
it { expect(user.saved_changes.keys).not_to eq('pubsub_token') }
|
it { expect(user.saved_changes.keys).not_to eq('pubsub_token') }
|
||||||
|
|
||||||
|
context 'rotates the pubsub_token' do
|
||||||
|
it 'changes the pubsub_token when password changes' do
|
||||||
|
pubsub_token = user.pubsub_token
|
||||||
|
user.password = Faker::Internet.password(special_characters: true)
|
||||||
|
user.save!
|
||||||
|
expect(user.pubsub_token).not_to eq(pubsub_token)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'will not change pubsub_token when other attributes change' do
|
||||||
|
pubsub_token = user.pubsub_token
|
||||||
|
user.name = Faker::Name.name
|
||||||
|
user.save!
|
||||||
|
expect(user.pubsub_token).to eq(pubsub_token)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'hmac_identifier' do
|
describe 'hmac_identifier' do
|
||||||
|
|||||||
Reference in New Issue
Block a user