mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-08-10 03:00:46 +00:00
67 lines
2.0 KiB
Ruby
67 lines
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Import
|
|
module UserFromMention
|
|
SOURCE_USER_CACHE_KEY = '%s/project/%s/source/%s'
|
|
SOURCE_USERNAME_CACHE_KEY = '%s/project/%s/source/username/%s'
|
|
|
|
USER_MAPPABLE_TYPES = [
|
|
:email
|
|
].freeze
|
|
|
|
def user_from_cache(mention)
|
|
cached_user_value_hash = read(mention)
|
|
cached_user_value_hash ||= read_cached_email(mention)
|
|
|
|
return unless cached_user_value_hash
|
|
|
|
mapping_type = cached_user_value_hash['type']
|
|
user_value = cached_user_value_hash['value']
|
|
return user_value if USER_MAPPABLE_TYPES.exclude?(mapping_type.to_sym)
|
|
|
|
find_user(user_value)
|
|
end
|
|
|
|
def cache_multiple(hash)
|
|
::Gitlab::Cache::Import::Caching.write_multiple(hash, timeout: timeout)
|
|
end
|
|
|
|
def source_user_cache_key(importer, project_id, source_key)
|
|
format(SOURCE_USER_CACHE_KEY, importer, project_id, source_key)
|
|
end
|
|
|
|
def source_user_cache_value(source_value, type:)
|
|
{ value: source_value, type: type }.to_json
|
|
end
|
|
|
|
private
|
|
|
|
def read(mention)
|
|
Gitlab::Json.parse(
|
|
::Gitlab::Cache::Import::Caching.read(source_user_cache_key(importer, project_id, mention))
|
|
)
|
|
end
|
|
|
|
def find_user(email)
|
|
User.find_by_any_email(email, confirmed: true)
|
|
end
|
|
|
|
def timeout
|
|
::Gitlab::Cache::Import::Caching::LONGER_TIMEOUT
|
|
end
|
|
|
|
def read_cached_email(mention)
|
|
# Attempt to find a cached email in case a user email was cached before changes to the cache structure were
|
|
# merged but before the cached email could be read and mapped in the import
|
|
source_username_cache_key = format(SOURCE_USERNAME_CACHE_KEY, importer, project_id, mention)
|
|
cached_email = ::Gitlab::Cache::Import::Caching.read(source_username_cache_key)
|
|
|
|
return unless cached_email
|
|
|
|
{ value: cached_email, type: :email }.with_indifferent_access
|
|
end
|
|
end
|
|
end
|
|
end
|