Move exchanging of XMPP contacts to account confirmation
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing

Since the ejabberd service is now being enabled after the confirmation,
we also need to move the exchanging of roster contacts to that point.
This commit is contained in:
Râu Cao 2023-03-20 17:59:43 +07:00
parent 90680368fb
commit 5b46f3adf5
Signed by: raucao
GPG Key ID: 15E65F399D084BA9
4 changed files with 62 additions and 36 deletions

View File

@ -53,7 +53,14 @@ class User < ApplicationRecord
end
def devise_after_confirmation
enable_service %w[discourse gitea mediawiki ejabberd]
enable_service %w[ discourse ejabberd gitea mediawiki ]
#TODO enable in development when we have easy setup of ejabberd etc.
return if Rails.env.development?
if inviter.present?
exchange_xmpp_contact_with_inviter if Setting.ejabberd_enabled?
end
end
def reset_password(new_password, new_password_confirmation)
@ -120,6 +127,12 @@ class User < ApplicationRecord
ldap.delete_attribute(dn,:service)
end
def exchange_xmpp_contact_with_inviter
return unless inviter.services_enabled.include?("ejabberd") &&
services_enabled.include?("ejabberd")
XmppExchangeContactsJob.perform_later(inviter, self.cn, self.ou)
end
private
def ldap

View File

@ -15,7 +15,6 @@ class CreateAccount < ApplicationService
if @invitation.present?
update_invitation(user.id)
exchange_xmpp_contacts if Setting.ejabberd_enabled
end
end
@ -43,12 +42,6 @@ class CreateAccount < ApplicationService
CreateLdapUserJob.perform_later(@username, @domain, @email, hashed_pw)
end
def exchange_xmpp_contacts
#TODO enable in development when we have easy setup of ejabberd etc.
return if Rails.env.development?
XmppExchangeContactsJob.perform_later(@invitation.user, @username, @domain)
end
def create_lndhub_account(user)
#TODO enable in development when we have a local lndhub (mock?) API
return if Rails.env.development?

View File

@ -101,4 +101,52 @@ RSpec.describe User, type: :model do
end
end
describe "#exchange_xmpp_contact_with_inviter" do
include ActiveJob::TestHelper
let(:user) { create :user, cn: "willherschel", ou: "kosmos.org" }
let(:guest) { create :user, id: 2, cn: "isaacnewton", ou: "kosmos.org", email: "newt@example.com" }
before do
Invitation.create! user: user, invited_user_id: guest.id, used_at: DateTime.now
allow_any_instance_of(User).to receive(:services_enabled).and_return(%w[ ejabberd ])
end
it "enqueues a job to exchange XMPP contacts between inviter and invitee" do
guest.send(:exchange_xmpp_contact_with_inviter)
expect(enqueued_jobs.size).to eq(1)
args = enqueued_jobs.first['arguments']
expect(args[0]['_aj_globalid']).to match('gid://akkounts/User')
expect(args[1]).to eq('isaacnewton')
expect(args[2]).to eq('kosmos.org')
end
after do
clear_enqueued_jobs
end
end
describe "#devise_after_confirmation" do
let(:user) { create :user, cn: "willherschel", ou: "kosmos.org" }
it "enables default services" do
expect(user).to receive(:enable_service).with(%w[ discourse ejabberd gitea mediawiki ])
user.send(:devise_after_confirmation)
end
context "for invited user with ejabberd enabled" do
let(:guest) { create :user, id: 2, cn: "isaacnewton", ou: "kosmos.org", email: "newt@example.com" }
before do
Invitation.create! user: user, invited_user_id: guest.id, used_at: DateTime.now
allow_any_instance_of(User).to receive(:enable_service).and_return(true)
end
it "exchanges XMPP contacts with the inviter" do
expect(guest).to receive(:exchange_xmpp_contact_with_inviter)
guest.send(:devise_after_confirmation)
end
end
end
end

View File

@ -65,34 +65,6 @@ RSpec.describe CreateAccount, type: :model do
end
end
describe "#exchange_xmpp_contacts" do
include ActiveJob::TestHelper
let(:inviter) { create :user, cn: "willherschel", ou: "kosmos.org" }
let(:invitation) { create :invitation, user: inviter }
let(:service) { CreateAccount.new(
username: 'isaacnewton',
email: 'isaacnewton@example.com',
password: 'bright-ideas-in-autumn',
invitation: invitation
)}
it "enqueues a job to exchange XMPP contacts between inviter and invitee" do
service.send(:exchange_xmpp_contacts)
expect(enqueued_jobs.size).to eq(1)
args = enqueued_jobs.first['arguments']
expect(args[0]['_aj_globalid']).to match('gid://akkounts/User')
expect(args[1]).to eq('isaacnewton')
expect(args[2]).to eq('kosmos.org')
end
after do
clear_enqueued_jobs
end
end
describe "#create_lndhub_account" do
include ActiveJob::TestHelper