Update user avatar in LDAP

This commit is contained in:
Râu Cao 2023-09-06 19:02:07 +02:00
parent 64d09cfb7f
commit 50c63d5c38
Signed by: raucao
GPG Key ID: 15E65F399D084BA9
3 changed files with 27 additions and 4 deletions

View File

@ -19,11 +19,17 @@ class SettingsController < ApplicationController
def update def update
@user.preferences.merge!(user_params[:preferences] || {}) @user.preferences.merge!(user_params[:preferences] || {})
@user.display_name = user_params[:display_name] @user.display_name = user_params[:display_name]
current_avatar_checksum = @user.avatar.attached? ? @user.avatar.blob.checksum : nil
@user.avatar = user_params[:avatar] if user_params[:avatar].present? @user.avatar = user_params[:avatar] if user_params[:avatar].present?
if @user.save if @user.save
if @user.display_name && (@user.display_name != @user.ldap_entry[:display_name]) if @user.display_name && (@user.display_name != @user.ldap_entry[:display_name])
LdapManager::UpdateDisplayName.call(@user.dn, user_params[:display_name]) LdapManager::UpdateDisplayName.call(@user.dn, @user.display_name)
end
if @user.avatar.attached? &&
(@user.avatar.blob.checksum != current_avatar_checksum)
LdapManager::UpdateAvatar.call(@user.dn, @user.avatar_base64)
end end
redirect_to setting_path(@settings_section), flash: { redirect_to setting_path(@settings_section), flash: {

View File

@ -10,9 +10,9 @@ class User < ApplicationRecord
# #
has_one_attached :avatar do |attachable| has_one_attached :avatar do |attachable|
attachable.variant :small, resize_to_fill: [64, 64] attachable.variant :small, resize_to_fill: [64, 64], convert: :jpeg
attachable.variant :medium, resize_to_fill: [256, 256] attachable.variant :medium, resize_to_fill: [256, 256], convert: :jpeg
attachable.variant :large, resize_to_fill: [512, 512] attachable.variant :large, resize_to_fill: [512, 512], convert: :jpeg
end end
# #
@ -167,6 +167,11 @@ class User < ApplicationRecord
@display_name ||= ldap_entry[:display_name] @display_name ||= ldap_entry[:display_name]
end end
def avatar_base64(variant: :large)
Base64.strict_encode64 avatar.variant(variant).processed.download
end
def services_enabled def services_enabled
ldap_entry[:service] || [] ldap_entry[:service] || []
end end

View File

@ -0,0 +1,12 @@
module LdapManager
class UpdateAvatar < LdapManagerService
def initialize(dn, img_data)
@dn = dn
@img_data = img_data
end
def call
replace_attribute @dn, :jpegPhoto, @img_data
end
end
end