summaryrefslogtreecommitdiff
path: root/lib/gitlab/ci/external_files/external_file.rb
blob: f481e9b0a393a044c2818a180f762711860f741b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
require 'open-uri'

module Gitlab
  module Ci
    module ExternalFiles
      class ExternalFile
        attr_reader :value, :project

        def initialize(value, project)
          @value = value
          @project = project
        end

        def content
          if remote_url?
            HTTParty.get(value)
          else
            local_file_content
          end
        rescue HTTParty::Error, Timeout::Error
          nil
        end

        def valid?
          remote_url? || local_file_content
        end

        private

        def remote_url?
          ::Gitlab::UrlSanitizer.valid?(value)
        end

        def local_file_content
          project.repository.fetch_file_for(sha, value)
        end

        def sha
          @sha ||= project.repository.commit.sha
        end
      end
    end
  end
end