From 958d18d61a868a69da0a20bed3b4f92a97e7e46b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Sat, 23 Dec 2023 12:26:34 +0100 Subject: [PATCH] Add email service and settings --- Gemfile | 2 +- Gemfile.lock | 7 + app/controllers/services/email_controller.rb | 34 +++++ .../services/remotestorage_controller.rb | 10 +- app/controllers/settings_controller.rb | 50 ++++++- .../settings/email/password_controller.js | 27 ++++ app/models/setting.rb | 26 ++++ app/models/user.rb | 8 +- .../ldap_manager/update_email_maildrop.rb | 12 ++ .../ldap_manager/update_email_password.rb | 12 ++ app/services/ldap_service.rb | 11 +- .../admin/settings/services/_email.html.erb | 16 +++ app/views/dashboard/index.html.erb | 35 +++-- app/views/icons/_mail.html.erb | 2 +- .../services/email/new_password.html.erb | 35 +++++ app/views/services/email/show.html.erb | 128 ++++++++++++++++++ app/views/settings/_email.html.erb | 34 +++++ .../_admin_sidenav_settings_services.html.erb | 7 + app/views/shared/_sidenav_settings.html.erb | 10 +- config/routes.rb | 7 + public/img/logos/icon_k9-mail.png | Bin 0 -> 49227 bytes public/img/logos/icon_thunderbird.png | Bin 0 -> 38720 bytes spec/features/settings/email_spec.rb | 62 +++++++++ spec/models/user_spec.rb | 6 +- 24 files changed, 506 insertions(+), 35 deletions(-) create mode 100644 app/controllers/services/email_controller.rb create mode 100644 app/javascript/controllers/settings/email/password_controller.js create mode 100644 app/services/ldap_manager/update_email_maildrop.rb create mode 100644 app/services/ldap_manager/update_email_password.rb create mode 100644 app/views/admin/settings/services/_email.html.erb create mode 100644 app/views/services/email/new_password.html.erb create mode 100644 app/views/services/email/show.html.erb create mode 100644 app/views/settings/_email.html.erb create mode 100644 public/img/logos/icon_k9-mail.png create mode 100644 public/img/logos/icon_thunderbird.png create mode 100644 spec/features/settings/email_spec.rb diff --git a/Gemfile b/Gemfile index df0e515..7c8e759 100644 --- a/Gemfile +++ b/Gemfile @@ -22,7 +22,7 @@ gem 'jbuilder', '~> 2.7' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use Active Model has_secure_password -# gem 'bcrypt', '~> 3.1.7' +gem 'bcrypt', '~> 3.1.7' # Configuration gem 'dotenv-rails' diff --git a/Gemfile.lock b/Gemfile.lock index 3e551f1..444b10e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -259,6 +259,7 @@ GEM method_source (1.0.0) mini_magick (4.12.0) mini_mime (1.1.5) + mini_portile2 (2.8.5) minitest (5.20.0) multipart-post (2.3.0) net-imap (0.3.7) @@ -272,6 +273,9 @@ GEM net-smtp (0.4.0) net-protocol nio4r (2.5.9) + nokogiri (1.15.4) + mini_portile2 (~> 2.8.2) + racc (~> 1.4) nokogiri (1.15.4-arm64-darwin) racc (~> 1.4) nokogiri (1.15.4-x86_64-linux) @@ -422,6 +426,8 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) + sqlite3 (1.6.7) + mini_portile2 (~> 2.8.0) sqlite3 (1.6.7-arm64-darwin) sqlite3 (1.6.7-x86_64-linux) stimulus-rails (1.3.0) @@ -466,6 +472,7 @@ PLATFORMS DEPENDENCIES aws-sdk-s3 + bcrypt (~> 3.1.7) byebug (~> 11.1) capybara cssbundling-rails diff --git a/app/controllers/services/email_controller.rb b/app/controllers/services/email_controller.rb new file mode 100644 index 0000000..516505b --- /dev/null +++ b/app/controllers/services/email_controller.rb @@ -0,0 +1,34 @@ +class Services::EmailController < Services::BaseController + before_action :authenticate_user! + before_action :require_service_available + before_action :require_feature_enabled + + def show + ldap_entry = current_user.ldap_entry + + @service_enabled = ldap_entry[:email_password].present? + @maildrop = ldap_entry[:email_maildrop] + @email_forwarding_active = @maildrop.present? && + @maildrop.split("@").first != current_user.cn + end + + def new_password + if session[:new_email_password].present? + @new_password = session.delete(:new_email_password) + else + redirect_to setting_path(:email) + end + end + + private + + def require_service_available + http_status :not_found unless Setting.email_enabled? + end + + def require_feature_enabled + unless Flipper.enabled?(:email, current_user) + http_status :forbidden + end + end +end diff --git a/app/controllers/services/remotestorage_controller.rb b/app/controllers/services/remotestorage_controller.rb index 67c7e76..632e5c7 100644 --- a/app/controllers/services/remotestorage_controller.rb +++ b/app/controllers/services/remotestorage_controller.rb @@ -1,7 +1,7 @@ class Services::RemotestorageController < Services::BaseController before_action :authenticate_user! - before_action :require_feature_enabled before_action :require_service_available + before_action :require_feature_enabled # Dashboard def show @@ -14,13 +14,13 @@ class Services::RemotestorageController < Services::BaseController private + def require_service_available + http_status :not_found unless Setting.remotestorage_enabled? + end + def require_feature_enabled unless Flipper.enabled?(:remotestorage, current_user) http_status :forbidden end end - - def require_service_available - http_status :not_found unless Setting.remotestorage_enabled? - end end diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index 8f30419..f1fa357 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -1,10 +1,11 @@ -require 'securerandom' +require "securerandom" +require "bcrypt" class SettingsController < ApplicationController before_action :authenticate_user! before_action :set_main_nav_section - before_action :set_settings_section, only: [:show, :update, :update_email] - before_action :set_user, only: [:show, :update, :update_email] + before_action :set_settings_section, only: [:show, :update, :update_email, :reset_email_password] + before_action :set_user, only: [:show, :update, :update_email, :reset_email_password] def index redirect_to setting_path(:profile) @@ -40,7 +41,7 @@ class SettingsController < ApplicationController end def update_email - if @user.valid_ldap_authentication?(email_params[:current_password]) + if @user.valid_ldap_authentication?(security_params[:current_password]) if @user.update email: email_params[:email] redirect_to setting_path(:account), flash: { notice: 'Please confirm your new address using the confirmation link we just sent you.' @@ -56,6 +57,28 @@ class SettingsController < ApplicationController end end + def reset_email_password + @user.current_password = security_params[:current_password] + + if @user.valid_ldap_authentication?(@user.current_password) + @user.current_password = nil + session[:new_email_password] = generate_email_password + hashed_password = hash_email_password(session[:new_email_password]) + LdapManager::UpdateEmailPassword.call(@user.dn, hashed_password) + + if @user.ldap_entry[:email_maildrop] != @user.address + LdapManager::UpdateEmailMaildrop.call(@user.dn, @user.address) + end + + redirect_to new_password_services_email_path + else + @validation_errors = { + current_password: [ "Wrong password. Try again!" ] + } + render :show, status: :forbidden + end + end + def reset_password current_user.send_reset_password_instructions sign_out current_user @@ -111,7 +134,8 @@ class SettingsController < ApplicationController def set_settings_section @settings_section = params[:section] allowed_sections = [ - :profile, :account, :lightning, :remotestorage, :xmpp, :experiments + :profile, :account, :xmpp, :email, :lightning, :remotestorage, + :experiments ] unless allowed_sections.include?(@settings_section.to_sym) @@ -132,7 +156,11 @@ class SettingsController < ApplicationController end def email_params - params.require(:user).permit(:email, :current_password) + params.require(:user).permit(:email) + end + + def security_params + params.require(:user).permit(:current_password) end def nostr_event_params @@ -140,4 +168,14 @@ class SettingsController < ApplicationController :id, :pubkey, :created_at, :kind, :tags, :content, :sig ]) end + + def generate_email_password + characters = [('a'..'z'), ('A'..'Z'), (0..9)].map(&:to_a).flatten + SecureRandom.random_bytes(16).each_byte.map { |b| characters[b % characters.length] }.join + end + + def hash_email_password(password) + salt = BCrypt::Engine.generate_salt + BCrypt::Engine.hash_secret(password, salt) + end end diff --git a/app/javascript/controllers/settings/email/password_controller.js b/app/javascript/controllers/settings/email/password_controller.js new file mode 100644 index 0000000..6c8784e --- /dev/null +++ b/app/javascript/controllers/settings/email/password_controller.js @@ -0,0 +1,27 @@ +import { Controller } from "@hotwired/stimulus" + +export default class extends Controller { + static targets = [ "resetPasswordButton", "currentPasswordField" ] + static values = { validationFailed: Boolean } + + connect () { + if (this.validationFailedValue) return; + + this.element.querySelectorAll(".initial-hidden").forEach(el => { + el.classList.add("hidden"); + }) + this.element.querySelectorAll(".initial-visible").forEach(el => { + el.classList.remove("hidden"); + }) + } + + showPasswordReset () { + this.element.querySelectorAll(".initial-visible").forEach(el => { + el.classList.add("hidden"); + }) + this.element.querySelectorAll(".initial-hidden").forEach(el => { + el.classList.remove("hidden"); + }) + this.currentPasswordFieldTarget.select(); + } +} diff --git a/app/models/setting.rb b/app/models/setting.rb index 9cafa2e..27acdcc 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -168,4 +168,30 @@ class Setting < RailsSettings::Base field :rs_redis_url, type: :string, default: ENV["RS_REDIS_URL"] || "redis://localhost:6379/1" + + + # + # E-Mail Service + # + + field :email_enabled, type: :boolean, + default: ENV["EMAIL_SMTP_HOST"].present? + + # field :email_smtp_host, type: :string, + # default: ENV["EMAIL_SMTP_HOST"].presence + # + # field :email_smtp_port, type: :string, + # default: ENV["EMAIL_SMTP_PORT"].presence || 587 + # + # field :email_smtp_enable_starttls, type: :string, + # default: ENV["EMAIL_SMTP_PORT"].presence || true + # + # field :email_auth_method, type: :string, + # default: ENV["EMAIL_AUTH_METHOD"].presence || "plain" + # + # field :email_imap_host, type: :string, + # default: ENV["EMAIL_IMAP_HOST"].presence + # + # field :email_imap_port, type: :string, + # default: ENV["EMAIL_IMAP_PORT"].presence || 993 end diff --git a/app/models/user.rb b/app/models/user.rb index acda860..b31016a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -3,6 +3,7 @@ class User < ApplicationRecord attr_accessor :display_name attr_accessor :avatar_new + attr_accessor :current_password serialize :preferences, UserPreferences @@ -90,11 +91,12 @@ class User < ApplicationRecord # E-Mail update confirmed LdapManager::UpdateEmail.call(self.dn, self.email) else - # TODO Make configurable # E-Mail from signup confirmed (i.e. account activation) - enable_service %w[ discourse gitea mediawiki xmpp ] - #TODO enable in development when we have easy setup of ejabberd etc. + # TODO Make configurable, only activate globally enabled services + enable_service %w[ discourse email gitea mediawiki xmpp ] + + # TODO enable in development when we have easy setup of ejabberd etc. return if Rails.env.development? || !Setting.ejabberd_enabled? XmppExchangeContactsJob.perform_later(inviter, self) if inviter.present? diff --git a/app/services/ldap_manager/update_email_maildrop.rb b/app/services/ldap_manager/update_email_maildrop.rb new file mode 100644 index 0000000..d26cf16 --- /dev/null +++ b/app/services/ldap_manager/update_email_maildrop.rb @@ -0,0 +1,12 @@ +module LdapManager + class UpdateEmailMaildrop < LdapManagerService + def initialize(dn, address) + @dn = dn + @address = address + end + + def call + replace_attribute @dn, :mailRoutingAddress, @address + end + end +end diff --git a/app/services/ldap_manager/update_email_password.rb b/app/services/ldap_manager/update_email_password.rb new file mode 100644 index 0000000..e9cde6a --- /dev/null +++ b/app/services/ldap_manager/update_email_password.rb @@ -0,0 +1,12 @@ +module LdapManager + class UpdateEmailPassword < LdapManagerService + def initialize(dn, password_hash) + @dn = dn + @password_hash = password_hash + end + + def call + replace_attribute @dn, :mailpassword, @password_hash + end + end +end diff --git a/app/services/ldap_service.rb b/app/services/ldap_service.rb index eac64c2..1c56df6 100644 --- a/app/services/ldap_service.rb +++ b/app/services/ldap_service.rb @@ -50,8 +50,11 @@ class LdapService < ApplicationService treebase = ldap_config["base"] end - attributes = %w{dn cn uid mail displayName admin service} - filter = Net::LDAP::Filter.eq("uid", args[:uid] || "*") + attributes = %w[ + dn cn uid mail displayName admin service + mailRoutingAddress mailpassword + ] + filter = Net::LDAP::Filter.eq("uid", args[:uid] || "*") entries = ldap_client.search(base: treebase, filter: filter, attributes: attributes) entries.sort_by! { |e| e.cn[0] } @@ -61,7 +64,9 @@ class LdapService < ApplicationService mail: e.try(:mail) ? e.mail.first : nil, display_name: e.try(:displayName) ? e.displayName.first : nil, admin: e.try(:admin) ? 'admin' : nil, - service: e.try(:service) + service: e.try(:service), + email_maildrop: e.try(:mailRoutingAddress), + email_password: e.try(:mailpassword) } end end diff --git a/app/views/admin/settings/services/_email.html.erb b/app/views/admin/settings/services/_email.html.erb new file mode 100644 index 0000000..4bf021a --- /dev/null +++ b/app/views/admin/settings/services/_email.html.erb @@ -0,0 +1,16 @@ +

E-Mail

+ diff --git a/app/views/dashboard/index.html.erb b/app/views/dashboard/index.html.erb index 5d22d42..4d0f9ac 100644 --- a/app/views/dashboard/index.html.erb +++ b/app/views/dashboard/index.html.erb @@ -32,6 +32,17 @@ <% end %> <% end %> + <% if Setting.email_enabled? && + Flipper.enabled?(:email, current_user) %> +
+ <%= link_to services_email_path, class: "block h-full px-6 py-6 rounded-md" do %> +

E-Mail

+

+ A no-bullshit email account +

+ <% end %> +
+ <% end %> <% if Setting.discourse_enabled? %>
+ <%= link_to services_storage_path, + class: "block h-full px-6 py-6 rounded-md" do %> +

Storage

+

+ Sync your data between apps and devices +

+ <% end %> +
+ <% end %> <% if Setting.gitea_enabled? %>
- <%= link_to services_storage_path, - class: "block h-full px-6 py-6 rounded-md" do %> -

Storage

-

- Sync your data between apps and devices -

- <% end %> -
- <% end %> <% if Setting.mediawiki_enabled? %>
\ No newline at end of file + diff --git a/app/views/services/email/new_password.html.erb b/app/views/services/email/new_password.html.erb new file mode 100644 index 0000000..a9df60a --- /dev/null +++ b/app/views/services/email/new_password.html.erb @@ -0,0 +1,35 @@ +<%= render HeaderCompactComponent.new(title: "New E-Mail Password") %> + +<%= render MainCompactComponent.new do %> +
+

+ Your email password has been updated. +

+

+ Please store the new one in a password manager or write it down somewhere: +

+

+ <%= label_tag :new_password, 'New password', class: 'hidden' %> + <%= text_field_tag :new_password, @new_password, disabled: true, class: 'text-xl grow', + data: { "clipboard-target": "source"} %> + + +

+

+ <%= link_to "Done", services_email_path, class: "btn-md btn-blue w-full" %> +

+ <%= render QrCodeModalComponent.new(qr_content: @new_password) %> +
+<% end %> diff --git a/app/views/services/email/show.html.erb b/app/views/services/email/show.html.erb new file mode 100644 index 0000000..2ad55f7 --- /dev/null +++ b/app/views/services/email/show.html.erb @@ -0,0 +1,128 @@ +<%= render HeaderComponent.new(title: "E-Mail") %> + +<%= render MainSimpleComponent.new do %> +
+

+ Send and receive electronic mail. +

+
+
+

Your E-Mail Address

+

+ disabled="disabled" + data-clipboard-target="source" /> + + +

+ <%= render QrCodeModalComponent.new(qr_content: "xmpp:"+current_user.address) %> +
+
+

E-Mail Password

+

+ Your email password is different from your main account password. You can + reset your email password in the + <%= link_to "email settings", setting_path(:email), class: "ks-text-link" %>. +

+
+
+

Recommended Apps

+
+ + + + + + + +
+
+<% end %> diff --git a/app/views/settings/_email.html.erb b/app/views/settings/_email.html.erb new file mode 100644 index 0000000..8d48661 --- /dev/null +++ b/app/views/settings/_email.html.erb @@ -0,0 +1,34 @@ +<%= tag.section data: { + controller: "settings--email--password", + "settings--email--password-validation-failed-value": @validation_errors.present? + } do %> +

E-Mail Password

+ <%= form_for(@user, url: reset_email_password_settings_path, method: "post") do |f| %> + <%= hidden_field_tag :section, "email" %> +

+ Use the following button to generate a new email password: +

+ +
+

+ <%= f.label :current_password, 'Current account password', class: 'font-bold' %> +

+

+ <%= f.password_field :current_password, class: "w-full", required: true, + data: { 'settings--email--password-target': "currentPasswordField" } %> +

+ <% if @validation_errors.present? && @validation_errors[:current_password].present? %> +

<%= @validation_errors[:current_password].first %>

+ <% end %> +

+ <%= f.submit "Create new email password", class: "btn-md btn-blue w-full md:w-auto" %> +

+
+ <% end %> +<% end %> diff --git a/app/views/shared/_admin_sidenav_settings_services.html.erb b/app/views/shared/_admin_sidenav_settings_services.html.erb index 8650277..a69f3cc 100644 --- a/app/views/shared/_admin_sidenav_settings_services.html.erb +++ b/app/views/shared/_admin_sidenav_settings_services.html.erb @@ -19,6 +19,13 @@ text_icon: Setting.droneci_enabled? ? "◉" : "○", active: current_page?(admin_settings_services_path(params: { s: "droneci" })), ) %> +<%= render SidenavLinkComponent.new( + level: 2, + name: "E-Mail", + path: admin_settings_services_path(params: { s: "email" }), + text_icon: Setting.email_enabled? ? "◉" : "○", + active: current_page?(admin_settings_services_path(params: { s: "email" })), +) %> <%= render SidenavLinkComponent.new( level: 2, name: "ejabberd", diff --git a/app/views/shared/_sidenav_settings.html.erb b/app/views/shared/_sidenav_settings.html.erb index 359f3e1..86947b1 100644 --- a/app/views/shared/_sidenav_settings.html.erb +++ b/app/views/shared/_sidenav_settings.html.erb @@ -12,13 +12,21 @@ active: @settings_section.to_s == "xmpp" ) %> <% end %> +<% if Setting.email_enabled? && + Flipper.enabled?(:email, current_user) %> +<%= render SidenavLinkComponent.new( + name: "E-Mail", path: setting_path(:email), icon: "mail", + active: @settings_section.to_s == "email" +) %> +<% end %> <% if Setting.lndhub_enabled %> <%= render SidenavLinkComponent.new( name: "Lightning", path: setting_path(:lightning), icon: "zap", active: @settings_section.to_s == "lightning" ) %> <% end %> -<% if Setting.remotestorage_enabled %> +<% if Setting.remotestorage_enabled? && + Flipper.enabled?(:remotestorage, current_user) %> <%= render SidenavLinkComponent.new( name: "Storage", path: setting_path(:remotestorage), icon: "remotestorage", active: @settings_section.to_s == "remotestorage" diff --git a/config/routes.rb b/config/routes.rb index c9f4281..eaa40c8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -23,6 +23,12 @@ Rails.application.routes.draw do resource :mastodon, only: [:show], controller: 'mastodon' + resource :email, only: [:show], controller: 'email' do + member do + get 'new_password' + end + end + resources :lightning, only: [:index] do collection do get 'transactions' @@ -44,6 +50,7 @@ Rails.application.routes.draw do collection do post 'update_email' post 'reset_password' + post 'reset_email_password' post 'set_nostr_pubkey' delete 'nostr_pubkey', to: 'settings#remove_nostr_pubkey' end diff --git a/public/img/logos/icon_k9-mail.png b/public/img/logos/icon_k9-mail.png new file mode 100644 index 0000000000000000000000000000000000000000..0c64d4b574234372a9292de783cf7e8c27f8d887 GIT binary patch literal 49227 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

16eofcfX`ybCABq6D9l6o4Z0%e9xp% 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 P2KuKYr!HG7Z5H}Jf6I9U literal 0 HcmV?d00001 diff --git a/public/img/logos/icon_thunderbird.png b/public/img/logos/icon_thunderbird.png new file mode 100644 index 0000000000000000000000000000000000000000..101f2c4397caa6eaa8de1239da6be0b0777cfce1 GIT binary patch literal 38720 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 XG4_QQQay@F00000NkvXXu0mjfIfV*Y literal 0 HcmV?d00001 diff --git a/spec/features/settings/email_spec.rb b/spec/features/settings/email_spec.rb new file mode 100644 index 0000000..348d0be --- /dev/null +++ b/spec/features/settings/email_spec.rb @@ -0,0 +1,62 @@ +require 'rails_helper' + +RSpec.describe 'E-Mail settings', type: :feature do + let(:user) { create :user } + + feature "Reset email password" do + before do + login_as user, :scope => :user + + allow_any_instance_of(User).to receive(:valid_ldap_authentication?) + .with("invalid password").and_return(false) + allow_any_instance_of(User).to receive(:valid_ldap_authentication?) + .with("valid password").and_return(true) + end + + scenario 'fails with invalid password' do + expect(LdapManager::UpdateEmailPassword).not_to receive(:call) + expect(LdapManager::UpdateEmailMaildrop).not_to receive(:call) + + visit setting_path(:email) + fill_in 'Current account password', with: "invalid password" + click_button "Create new email password" + + within ".error-msg" do + expect(page).to have_content("Wrong password") + end + end + + scenario 'works with valid password' do + allow_any_instance_of(User).to receive(:dn) + .and_return("cn=#{user.cn},ou=kosmos.org,cn=users,dc=kosmos,dc=org") + allow_any_instance_of(User).to receive(:ldap_entry) + .and_return({ uid: user.cn, ou: user.ou, email_maildrop: user.address }) + + expect(LdapManager::UpdateEmailPassword).to receive(:call).and_return(true) + expect(LdapManager::UpdateEmailMaildrop).not_to receive(:call) + + visit setting_path(:email) + fill_in 'Current account password', with: "valid password" + click_button "Create new email password" + + expect(current_url).to eq(new_password_services_email_url) + end + + scenario 'updates the maildrop attribute if necessary' do + allow_any_instance_of(User).to receive(:dn) + .and_return("cn=#{user.cn},ou=kosmos.org,cn=users,dc=kosmos,dc=org") + allow_any_instance_of(User).to receive(:ldap_entry) + .and_return({ uid: user.cn, ou: user.ou, email_maildrop: "mahafaly@example.com" }) + + expect(LdapManager::UpdateEmailPassword).to receive(:call).and_return(true) + expect(LdapManager::UpdateEmailMaildrop).to receive(:call) + .with(user.dn, user.address).and_return(true) + + visit setting_path(:email) + fill_in 'Current account password', with: "valid password" + click_button "Create new email password" + + expect(current_url).to eq(new_password_services_email_url) + end + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index a3e8051..bdf8563 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -66,9 +66,9 @@ RSpec.describe User, type: :model do it "returns the entries from the LDAP service attribute" do expect(user).to receive(:ldap_entry).and_return({ uid: user.cn, ou: user.ou, mail: user.email, admin: nil, - service: ["discourse", "gitea", "wiki", "xmpp"] + service: ["discourse", "email", "gitea", "wiki", "xmpp"] }) - expect(user.services_enabled).to eq(["discourse", "gitea", "wiki", "xmpp"]) + expect(user.services_enabled).to eq(["discourse", "email", "gitea", "wiki", "xmpp"]) end end @@ -147,7 +147,7 @@ RSpec.describe User, type: :model do after { clear_enqueued_jobs } it "enables default services" do - expect(user).to receive(:enable_service).with(%w[ discourse gitea mediawiki xmpp ]) + expect(user).to receive(:enable_service).with(%w[ discourse email gitea mediawiki xmpp ]) user.send :devise_after_confirmation end