From 705bd63b422db1e37cf86754220b32968e3d9705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Fri, 7 Apr 2023 23:02:11 +0200 Subject: [PATCH] Add configurable default room bookmarks for new users --- app/jobs/xmpp_set_default_bookmarks_job.rb | 26 +++++++++ app/models/setting.rb | 7 +++ app/services/ejabberd_api_client.rb | 7 ++- .../settings/services/_ejabberd.html.erb | 57 ++++++++++++------- 4 files changed, 77 insertions(+), 20 deletions(-) create mode 100644 app/jobs/xmpp_set_default_bookmarks_job.rb diff --git a/app/jobs/xmpp_set_default_bookmarks_job.rb b/app/jobs/xmpp_set_default_bookmarks_job.rb new file mode 100644 index 0000000..92cd8a5 --- /dev/null +++ b/app/jobs/xmpp_set_default_bookmarks_job.rb @@ -0,0 +1,26 @@ +class XmppSetDefaultBookmarksJob < ApplicationJob + queue_as :default + + def perform(user) + return unless Setting.xmpp_default_rooms.any? + @user = user + ejabberd = EjabberdApiClient.new + ejabberd.private_set user, storage_content + end + + def storage_content + bookmarks = "" + Setting.xmpp_default_rooms.each do |r| + bookmarks << conference_element( + jid: r[/<(.+)>/, 1], name: r[/^(.+)\s/, 1], nick: @user.cn, + autojoin: Setting.xmpp_autojoin_default_rooms + ) + end + + "#{bookmarks}" + end + + def conference_element(jid:, name:, autojoin: false, nick:) + "#{nick}" + end +end diff --git a/app/models/setting.rb b/app/models/setting.rb index dff6425..4b02225 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -17,6 +17,13 @@ class Setting < RailsSettings::Base account accounts donations mail webmaster support ] + # + # XMPP + # + + field :xmpp_default_rooms, type: :array, default: [] + field :xmpp_autojoin_default_rooms, type: :boolean, default: false + # # Sentry # diff --git a/app/services/ejabberd_api_client.rb b/app/services/ejabberd_api_client.rb index 7930aa1..b90b499 100644 --- a/app/services/ejabberd_api_client.rb +++ b/app/services/ejabberd_api_client.rb @@ -10,7 +10,7 @@ class EjabberdApiClient if res.status != 200 Rails.logger.error "[ejabberd] API request failed:" Rails.logger.error res.body - #TODO add some kind of exception tracking/notifications + #TODO Send custom event to Sentry end end @@ -21,4 +21,9 @@ class EjabberdApiClient def send_message(payload) post "send_message", payload end + + def private_set(user, content) + payload = { user: user.cn, host: user.ou, element: content } + post "private_set", payload + end end diff --git a/app/views/admin/settings/services/_ejabberd.html.erb b/app/views/admin/settings/services/_ejabberd.html.erb index 46e3ca6..887c1c1 100644 --- a/app/views/admin/settings/services/_ejabberd.html.erb +++ b/app/views/admin/settings/services/_ejabberd.html.erb @@ -7,24 +7,43 @@ title: "Enable ejabberd integration", description: "ejabberd configuration present and features enabled" ) %> - <% if Setting.ejabberd_enabled? %> - <%= render FormElements::FieldsetComponent.new(title: "API URL") do %> - <%= f.text_field :ejabberd_api_url, - value: Setting.ejabberd_api_url, - class: "w-full", disabled: true %> - <% end %> - <%= render FormElements::FieldsetComponent.new(title: "Admin URL") do %> - <%= f.text_field :ejabberd_admin_url, - value: Setting.ejabberd_admin_url, - class: "w-full", disabled: true %> - <% end %> - <%= render FormElements::FieldsetComponent.new( - title: "Contact roster name", - description: "Used when exchanging contacts after signup from invitation" - ) do %> - <%= f.text_field :ejabberd_buddy_roster, - value: Setting.ejabberd_buddy_roster, - class: "w-full" %> - <% end %> +<% if Setting.ejabberd_enabled? %> + <%= render FormElements::FieldsetComponent.new(title: "API URL") do %> + <%= f.text_field :ejabberd_api_url, + value: Setting.ejabberd_api_url, + class: "w-full", disabled: true %> + <% end %> + <%= render FormElements::FieldsetComponent.new(title: "Admin URL") do %> + <%= f.text_field :ejabberd_admin_url, + value: Setting.ejabberd_admin_url, + class: "w-full", disabled: true %> <% end %> +

User default settings

+