Module: Avatarable
- Extended by:
- ActiveSupport::Concern
- Included in:
- Achievements::Achievement, Group, Organizations::OrganizationDetail, Project, Projects::Topic, User
- Defined in:
- app/models/concerns/avatarable.rb
Defined Under Namespace
Modules: ShadowMethods
Constant Summary collapse
- USER_AVATAR_SIZES =
[16, 20, 23, 24, 26, 32, 36, 38, 40, 48, 60, 64, 90, 96, 120, 160].freeze
- PROJECT_AVATAR_SIZES =
[15, 40, 48, 64, 88].freeze
- GROUP_AVATAR_SIZES =
[15, 37, 38, 39, 40, 64, 96].freeze
- COMBINED_AVATAR_SIZES =
(USER_AVATAR_SIZES | PROJECT_AVATAR_SIZES | GROUP_AVATAR_SIZES).freeze
- COMBINED_AVATAR_SIZES_RETINA =
COMBINED_AVATAR_SIZES.map { |size| size * 2 }
- ALLOWED_IMAGE_SCALER_WIDTHS =
(COMBINED_AVATAR_SIZES | COMBINED_AVATAR_SIZES_RETINA).uniq.freeze
- MAXIMUM_FILE_SIZE =
This value must not be bigger than then: gitlab.com/gitlab-org/gitlab/-/blob/master/workhorse/config.toml.example#L20
200.kilobytes.to_i
Instance Method Summary collapse
- #avatar_path(only_path: true, size: nil) ⇒ Object
- #avatar_type ⇒ Object
- #uncached_avatar_path(only_path: true, size: nil) ⇒ Object
-
#upload_paths(identifier) ⇒ Object
Path that is persisted in the tracking Upload model.
Instance Method Details
#avatar_path(only_path: true, size: nil) ⇒ Object
61 62 63 64 65 66 67 68 69 70 |
# File 'app/models/concerns/avatarable.rb', line 61 def avatar_path(only_path: true, size: nil) return uncached_avatar_path(only_path: only_path, size: size) unless self.try(:id) return self.security_policy_bot_static_avatar_path(size) if self.try(:should_use_security_policy_bot_avatar?) # Cache this avatar path only within the request because avatars in # object storage may be generated with time-limited, signed URLs. key = "#{self.class.name}:#{self.id}:#{only_path}:#{size}" Gitlab::SafeRequestStore[key] ||= uncached_avatar_path(only_path: only_path, size: size) end |
#avatar_type ⇒ Object
53 54 55 56 57 58 59 |
# File 'app/models/concerns/avatarable.rb', line 53 def avatar_type unless self.avatar.image? errors.add :avatar, "file format is not supported. " \ "Please try one of the following supported formats: #{AvatarUploader::SAFE_IMAGE_EXT.join(', ')}" end end |
#uncached_avatar_path(only_path: true, size: nil) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'app/models/concerns/avatarable.rb', line 72 def uncached_avatar_path(only_path: true, size: nil) return unless self.try(:avatar).present? asset_host = ActionController::Base.asset_host use_asset_host = asset_host.present? use_authentication = respond_to?(:public?) && !public? query_params = size&.nonzero? ? "?width=#{size}" : "" # Avatars for private and internal groups and projects require authentication to be viewed, # which means they can only be served by Rails, on the regular GitLab host. # If an asset host is configured, we need to return the fully qualified URL # instead of only the avatar path, so that Rails doesn't prefix it with the asset host. if use_asset_host && use_authentication use_asset_host = false only_path = false end url_base = [] if use_asset_host url_base << asset_host unless only_path else url_base << gitlab_config.base_url unless only_path url_base << gitlab_config.relative_url_root end url_base.join + avatar.local_url + query_params end |
#upload_paths(identifier) ⇒ Object
Path that is persisted in the tracking Upload model. Used to fetch the upload from the model.
103 104 105 |
# File 'app/models/concerns/avatarable.rb', line 103 def upload_paths(identifier) avatar_mounter.blank_uploader.store_dirs.map { |store, path| File.join(path, identifier) } end |