From f090fde8a8bbe5437796c4cfa8b3aca0c51ebae4 Mon Sep 17 00:00:00 2001 From: Marcel Hellkamp Date: Mon, 12 May 2025 17:51:53 +0200 Subject: [PATCH] fix: OIDC account creation fails for long display names (#34639) --- app/models/account.rb | 3 ++- app/models/concerns/omniauthable.rb | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index d0ddca994..dac44d3ec 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -69,6 +69,7 @@ class Account < ApplicationRecord MENTION_RE = %r{(? { local? && will_save_change_to_username? && actor_type != 'Application' } validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' } - validates :display_name, length: { maximum: 30 }, if: -> { local? && will_save_change_to_display_name? } + validates :display_name, length: { maximum: DISPLAY_NAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_display_name? } validates :note, note_length: { maximum: 500 }, if: -> { local? && will_save_change_to_note? } validates :fields, length: { maximum: 4 }, if: -> { local? && will_save_change_to_fields? } validates :uri, absence: true, if: :local?, on: :create diff --git a/app/models/concerns/omniauthable.rb b/app/models/concerns/omniauthable.rb index 9c004a308..0b9693acc 100644 --- a/app/models/concerns/omniauthable.rb +++ b/app/models/concerns/omniauthable.rb @@ -99,7 +99,7 @@ module Omniauthable external: true, account_attributes: { username: ensure_unique_username(ensure_valid_username(auth.uid)), - display_name: auth.info.full_name || auth.info.name || [auth.info.first_name, auth.info.last_name].join(' '), + display_name: display_name_from_auth(auth), }, } end @@ -121,5 +121,10 @@ module Omniauthable temp_username = starting_username.gsub(/[^a-z0-9_]+/i, '') temp_username.truncate(30, omission: '') end + + def display_name_from_auth(auth) + display_name = auth.info.full_name || auth.info.name || [auth.info.first_name, auth.info.last_name].join(' ') + display_name.truncate(Account::DISPLAY_NAME_LENGTH_LIMIT, omission: '') + end end end