diff --git a/app/controllers/server/universities_controller.rb b/app/controllers/server/universities_controller.rb index 9c0d352207cbb272306c99d1ee17a97bcab72a4a..95f23cae6cd3a5a2bbe98595fb72a9785e7a5ac8 100644 --- a/app/controllers/server/universities_controller.rb +++ b/app/controllers/server/universities_controller.rb @@ -57,6 +57,6 @@ class Server::UniversitiesController < Server::ApplicationController end def university_params - params.require(:university).permit(:name, :address, :zipcode, :city, :country, :private, :identifier, :logo, :logo_delete) + params.require(:university).permit(:name, :address, :zipcode, :city, :country, :private, :identifier, :logo, :logo_delete, :sms_sender_name) end end diff --git a/app/models/university.rb b/app/models/university.rb index a067650891a686f0f014fb1dc06478938e2cb7df..343c0f97045a655bc2e23de783c5d135dbbc1b5c 100644 --- a/app/models/university.rb +++ b/app/models/university.rb @@ -11,14 +11,12 @@ # mail_from_name :string # name :string # private :boolean +# sms_sender_name :string # zipcode :string # created_at :datetime not null # updated_at :datetime not null # class University < ApplicationRecord - validates_presence_of :name - scope :ordered, -> { order(:name) } - include WithCommunication include WithEducation include WithIdentifier @@ -27,6 +25,11 @@ class University < ApplicationRecord has_one_attached_deletable :logo + validates_presence_of :name + validates :sms_sender_name, presence: true, length: { maximum: 11 } + + scope :ordered, -> { order(:name) } + def to_s "#{name}" end diff --git a/app/models/user/with_roles.rb b/app/models/user/with_roles.rb index 8adc16e8fbe02c410c168759eaf644803f751a3f..2853b84432441b8b2156e8447d0cf11dc03df2c6 100644 --- a/app/models/user/with_roles.rb +++ b/app/models/user/with_roles.rb @@ -25,6 +25,7 @@ module User::WithRoles end def set_default_role + return if server_admin? if User.all.empty? self.role = :server_admin elsif university.users.not_server_admin.empty? diff --git a/app/models/user/with_sync_between_universities.rb b/app/models/user/with_sync_between_universities.rb index 64cfa3e15404238e757dd4f783a5841cdff22434..341601120e9246a27c9833dfe88b040c73182c80 100644 --- a/app/models/user/with_sync_between_universities.rb +++ b/app/models/user/with_sync_between_universities.rb @@ -3,7 +3,6 @@ module User::WithSyncBetweenUniversities included do after_save :sync_from_current_university, if: Proc.new { |user| user.server_admin? } - after_destroy :remove_from_all_universities, if: Proc.new { |user| user.server_admin? } def self.synchronize_server_admin_users(university_id) university = University.where.not(id: university_id).first @@ -20,8 +19,8 @@ module User::WithSyncBetweenUniversities encrypted_password: self.encrypted_password, first_name: self.first_name, last_name: self.last_name, - mobile_phone: self.phone, - role: self.role + mobile_phone: self.mobile_phone, + role: :server_admin ) end end @@ -35,14 +34,11 @@ module User::WithSyncBetweenUniversities user.assign_attributes(university_id: university.id, picture_infos: nil, password: "MyNewPasswordIs2Strong!", password_confirmation: "MyNewPasswordIs2Strong!", reset_password_token: nil, unlock_token: nil, encrypted_otp_secret_key: nil, - confirmation_token: Devise.friendly_token, confirmed_at: Time.now) + confirmation_token: Devise.friendly_token, confirmed_at: Time.now, + role: :server_admin) # as a new user must have a password and we can't access previous user password user.save user.update_column(:encrypted_password, self.encrypted_password) if user.valid? end - def remove_from_all_universities - User.destroy_by(email: email) - end - end diff --git a/app/services/sendinblue/sms_service.rb b/app/services/sendinblue/sms_service.rb index f4a6f93bc9fa212591c042483b0a80e29144f94a..5c650ce63a9b7a318f07a941e5ee9728cc82be64 100644 --- a/app/services/sendinblue/sms_service.rb +++ b/app/services/sendinblue/sms_service.rb @@ -1,5 +1,7 @@ module Sendinblue class SmsService + DEFAULT_SENDER_NAME = 'Osuny'.freeze + def self.send_mfa_code(user, code) duration = ActiveSupport::Duration.build(Rails.application.config.devise.direct_otp_valid_for).inspect message = "#{code} est votre code d'authentification sur #{user.university} (valide #{duration})" @@ -9,9 +11,12 @@ module Sendinblue private def self.send_message(user, message) + sender_name = user.university.sms_sender_name + sender_name ||= DEFAULT_SENDER_NAME + api_instance = SibApiV3Sdk::TransactionalSMSApi.new send_transac_sms = SibApiV3Sdk::SendTransacSms.new( - sender: user.university.name, + sender: sender_name, recipient: user.mobile_phone, content: message ) diff --git a/app/views/server/universities/_form.html.erb b/app/views/server/universities/_form.html.erb index 40fe1882df8ba1b431adc1bba999715f863dcb8c..443cefdf3c807139cd657b41ff0734dbea5d4df9 100644 --- a/app/views/server/universities/_form.html.erb +++ b/app/views/server/universities/_form.html.erb @@ -4,6 +4,7 @@ <%= f.input :name %> <%= f.input :identifier %> <%= f.input :private %> + <%= f.input :sms_sender_name %> </div> <div class="col-md-4"> <%= f.input :address %> diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 7dc96a2190d568890f47dffd4fd9baa9eaa5f185..602f7cb050f24c5217f65a2806f6132851151d0d 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -14,6 +14,7 @@ fr: private: Etablissement privé public: Public public_or_private: Public/privé + sms_sender_name: Nom de l'expéditeur SMS url: 'URL' zipcode: Code postal user: @@ -97,6 +98,8 @@ fr: error_notification: default_message: "Les erreurs ci-dessous empêchent la validation :" hints: + university: + sms_sender_name: "11 caractères maximum." user: mobile_phone: "Format international (+XX). En renseignant ce champ, vous acceptez de recevoir vos codes de double authentification par SMS." simple_form_password_with_hints: diff --git a/db/migrate/20211019083328_add_sms_sender_name_to_universities.rb b/db/migrate/20211019083328_add_sms_sender_name_to_universities.rb new file mode 100644 index 0000000000000000000000000000000000000000..f472a720f1dffbf1308147245c90d79d813a2336 --- /dev/null +++ b/db/migrate/20211019083328_add_sms_sender_name_to_universities.rb @@ -0,0 +1,5 @@ +class AddSmsSenderNameToUniversities < ActiveRecord::Migration[6.1] + def change + add_column :universities, :sms_sender_name, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 727e7bf99053a2db0f6615790437b753875545fb..683a249f59f00cafadae14bb6a5d1fedb82aafaa 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -286,6 +286,7 @@ ActiveRecord::Schema.define(version: 2021_10_19_092503) do t.datetime "updated_at", precision: 6, null: false t.string "mail_from_name" t.string "mail_from_address" + t.string "sms_sender_name" end create_table "users", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| diff --git a/lib/tasks/app.rake b/lib/tasks/app.rake index a2c0aebc9801c2bd6552a2fafb3fe21e0b1d4ef9..c07398f9114127ca070a739c7968a96195758022 100644 --- a/lib/tasks/app.rake +++ b/lib/tasks/app.rake @@ -9,11 +9,15 @@ namespace :app do desc 'Fix things' task fix: :environment do language = Language.first - User.find_each { |u| - u.confirm - u.role ||= :visitor - u.language ||= language - u.save + User.find_each { |user| + user.confirm + user.role ||= :visitor + user.language ||= language + user.save + } + University.find_each { |university| + university.sms_sender_name ||= 'Osuny' + university.save } end