FIX: save registration IP address for invited users

This commit is contained in:
Arpit Jalan 2019-04-13 13:04:25 +05:30
parent b71f19d394
commit 95ada3f190
5 changed files with 17 additions and 9 deletions

View File

@ -45,7 +45,7 @@ class InvitesController < ApplicationController
if invite.present?
begin
user = invite.redeem(username: params[:username], name: params[:name], password: params[:password], user_custom_fields: params[:user_custom_fields])
user = invite.redeem(username: params[:username], name: params[:name], password: params[:password], user_custom_fields: params[:user_custom_fields], ip_address: request.remote_ip)
if user.present?
log_on_user(user) if user.active?
post_process_invite(user)

View File

@ -53,8 +53,8 @@ class Invite < ActiveRecord::Base
invalidated_at.nil?
end
def redeem(username: nil, name: nil, password: nil, user_custom_fields: nil)
InviteRedeemer.new(self, username, name, password, user_custom_fields).redeem unless expired? || destroyed? || !link_valid?
def redeem(username: nil, name: nil, password: nil, user_custom_fields: nil, ip_address: nil)
InviteRedeemer.new(self, username, name, password, user_custom_fields, ip_address).redeem unless expired? || destroyed? || !link_valid?
end
def self.invite_by_email(email, invited_by, topic = nil, group_ids = nil, custom_message = nil)

View File

@ -1,4 +1,4 @@
InviteRedeemer = Struct.new(:invite, :username, :name, :password, :user_custom_fields) do
InviteRedeemer = Struct.new(:invite, :username, :name, :password, :user_custom_fields, :ip_address) do
def redeem
Invite.transaction do
@ -12,7 +12,7 @@ InviteRedeemer = Struct.new(:invite, :username, :name, :password, :user_custom_f
end
# extracted from User cause it is very specific to invites
def self.create_user_from_invite(invite, username, name, password = nil, user_custom_fields = nil)
def self.create_user_from_invite(invite, username, name, password = nil, user_custom_fields = nil, ip_address = nil)
if username && UsernameValidator.new(username).valid_format? && User.username_available?(username)
available_username = username
else
@ -25,7 +25,9 @@ InviteRedeemer = Struct.new(:invite, :username, :name, :password, :user_custom_f
username: available_username,
name: available_name,
active: false,
trust_level: SiteSetting.default_invitee_trust_level
trust_level: SiteSetting.default_invitee_trust_level,
ip_address: ip_address,
registration_ip_address: ip_address
}
user = User.unstage(user_params)
@ -92,7 +94,7 @@ InviteRedeemer = Struct.new(:invite, :username, :name, :password, :user_custom_f
def get_invited_user
result = get_existing_user
result ||= InviteRedeemer.create_user_from_invite(invite, username, name, password, user_custom_fields)
result ||= InviteRedeemer.create_user_from_invite(invite, username, name, password, user_custom_fields, ip_address)
result.send_welcome_message = false
result
end

View File

@ -12,12 +12,15 @@ describe InviteRedeemer do
expect(user.approved).to eq(true)
end
it "can set the password too" do
it "can set the password and ip_address" do
password = 's3cure5tpasSw0rD'
user = InviteRedeemer.create_user_from_invite(Fabricate(:invite, email: 'walter.white@email.com'), 'walter', 'Walter White', password)
ip_address = '192.168.1.1'
user = InviteRedeemer.create_user_from_invite(Fabricate(:invite, email: 'walter.white@email.com'), 'walter', 'Walter White', password, nil, ip_address)
expect(user).to have_password
expect(user.confirm_password?(password)).to eq(true)
expect(user.approved).to eq(true)
expect(user.ip_address).to eq(ip_address)
expect(user.registration_ip_address).to eq(ip_address)
end
it "raises exception with record and errors" do

View File

@ -276,6 +276,9 @@ describe InvitesController do
expect(response.status).to eq(200)
expect(session[:current_user_id]).to eq(invite.user_id)
expect(invite.redeemed?).to be_truthy
user = User.find(invite.user_id)
expect(user.ip_address).to be_present
expect(user.registration_ip_address).to be_present
end
it 'redirects to the first topic the user was invited to' do