48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
class SignedTag
|
||
|
include Gitlab::Utils::StrongMemoize
|
||
|
|
||
|
def initialize(repository, tag)
|
||
|
@repository = repository
|
||
|
@tag = tag
|
||
|
|
||
|
if Feature.enabled?(:get_tag_signatures)
|
||
|
@signature_data = Gitlab::Git::Tag.extract_signature_lazily(repository, tag.id) if repository
|
||
|
else
|
||
|
@signature_data = [signature_text_of_message.b, signed_text_of_message.b]
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def signature
|
||
|
return unless @tag.has_signature?
|
||
|
end
|
||
|
|
||
|
def signature_text
|
||
|
@signature_data&.fetch(0)
|
||
|
end
|
||
|
|
||
|
def signed_text
|
||
|
@signature_data&.fetch(1)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def signature_text_of_message
|
||
|
@tag.message.slice(@tag.message.index("-----BEGIN SIGNED MESSAGE-----")..-1)
|
||
|
rescue StandardError
|
||
|
nil
|
||
|
end
|
||
|
|
||
|
def signed_text_of_message
|
||
|
%{object #{@tag.target_commit.id}
|
||
|
type commit
|
||
|
tag #{@tag.name}
|
||
|
tagger #{@tag.tagger.name} <#{@tag.tagger.email}> #{@tag.tagger.date.seconds} #{@tag.tagger.timezone}
|
||
|
|
||
|
#{@tag.message.gsub(/-----BEGIN SIGNED MESSAGE-----(.*)-----END SIGNED MESSAGE-----/m, "")}}
|
||
|
end
|
||
|
end
|
||
|
end
|