diff options
| author | Masayuki Morita | 2017-01-08 18:00:31 +0900 |
|---|---|---|
| committer | Masayuki Morita | 2017-01-08 18:06:57 +0900 |
| commit | 560d5bdd7101d4e73f6501b5ac1601b0a434cece (patch) | |
| tree | 8d40e856d02d5528bfeb3a29f44d98ba342555c5 /Library/Homebrew | |
| parent | 335be35acf805a2853a6fe92b06d9a643616f463 (diff) | |
| download | brew-560d5bdd7101d4e73f6501b5ac1601b0a434cece.tar.bz2 | |
Validate a token when initializing GitHubPrivateRepositoryDownloadStrategy
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/download_strategy.rb | 24 | ||||
| -rw-r--r-- | Library/Homebrew/test/download_strategies_test.rb | 2 |
2 files changed, 22 insertions, 4 deletions
diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index 3e028949b..d22ab9550 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -541,10 +541,13 @@ end # it lets you use a private GttHub repository for internal distribution. It # works with public one, but in that case simply use CurlDownloadStrategy. class GitHubPrivateRepositoryDownloadStrategy < CurlDownloadStrategy + require "utils/formatter" + require 'utils/github' + def initialize(name, resource) super - set_github_token parse_url_pattern + set_github_token end def parse_url_pattern @@ -571,6 +574,22 @@ class GitHubPrivateRepositoryDownloadStrategy < CurlDownloadStrategy unless @github_token raise CurlDownloadStrategyError, "Environmental variable HOMEBREW_GITHUB_API_TOKEN is required." end + validate_github_repository_access! + end + + def validate_github_repository_access! + begin + # Test access to the repository + GitHub.repository(@owner, @repo) + rescue GitHub::HTTPNotFoundError + # We only handle HTTPNotFoundError here, + # becase AuthenticationFailedError is handled within util/github. + message = <<-EOS.undent + HOMEBREW_GITHUB_API_TOKEN can not access the repository: #{@owner}/#{@repo} + This token may not have permission to access the repository or the url of formula may be incorrect. + EOS + raise CurlDownloadStrategyError, message + end end end @@ -580,9 +599,6 @@ end # of your formula. This download strategy uses GitHub access tokens (in the # environment variables HOMEBREW_GITHUB_API_TOKEN) to sign the request. class GitHubPrivateRepositoryReleaseDownloadStrategy < GitHubPrivateRepositoryDownloadStrategy - require "utils/formatter" - require 'utils/github' - def parse_url_pattern url_pattern = %r|https://github.com/([^/]+)/([^/]+)/releases/download/([^/]+)/(\S+)| unless @url =~ url_pattern diff --git a/Library/Homebrew/test/download_strategies_test.rb b/Library/Homebrew/test/download_strategies_test.rb index 21f7e6906..ff4cbbf7a 100644 --- a/Library/Homebrew/test/download_strategies_test.rb +++ b/Library/Homebrew/test/download_strategies_test.rb @@ -65,6 +65,7 @@ class GitHubPrivateRepositoryDownloadStrategyTests < Homebrew::TestCase def setup resource = ResourceDouble.new("https://github.com/owner/repo/archive/1.1.5.tar.gz") ENV["HOMEBREW_GITHUB_API_TOKEN"] = "token" + GitHub.stubs(:repository).returns {} @strategy = GitHubPrivateRepositoryDownloadStrategy.new("foo", resource) end @@ -88,6 +89,7 @@ class GitHubPrivateRepositoryReleaseDownloadStrategyTests < Homebrew::TestCase def setup resource = ResourceDouble.new("https://github.com/owner/repo/releases/download/tag/foo_v0.1.0_darwin_amd64.tar.gz") ENV["HOMEBREW_GITHUB_API_TOKEN"] = "token" + GitHub.stubs(:repository).returns {} @strategy = GitHubPrivateRepositoryReleaseDownloadStrategy.new("foo", resource) end |
