From 5b46f3adf5bf08f4d12e610b43cc957367f07133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Mon, 20 Mar 2023 17:59:43 +0700 Subject: [PATCH] Move exchanging of XMPP contacts to account confirmation Since the ejabberd service is now being enabled after the confirmation, we also need to move the exchanging of roster contacts to that point. --- app/models/user.rb | 15 ++++++++- app/services/create_account.rb | 7 ---- spec/models/user_spec.rb | 48 ++++++++++++++++++++++++++++ spec/services/create_account_spec.rb | 28 ---------------- 4 files changed, 62 insertions(+), 36 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 5734369..ebe76cb 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 diff --git a/app/services/create_account.rb b/app/services/create_account.rb index bc05e50..1219063 100644 --- a/app/services/create_account.rb +++ b/app/services/create_account.rb @@ -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? diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index b1724f1..1dfc1ac 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -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 diff --git a/spec/services/create_account_spec.rb b/spec/services/create_account_spec.rb index 9e35a2f..064d1ab 100644 --- a/spec/services/create_account_spec.rb +++ b/spec/services/create_account_spec.rb @@ -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