Skip to content

Commit

Permalink
make a Credential class (dependabot#8967)
Browse files Browse the repository at this point in the history
  • Loading branch information
jakecoffman authored Feb 5, 2024
1 parent 4ef8eef commit 89737ae
Show file tree
Hide file tree
Showing 62 changed files with 407 additions and 360 deletions.
2 changes: 1 addition & 1 deletion bundler/lib/dependabot/bundler/metadata_finder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ def base_url
return @base_url if defined?(@base_url)

credential = credentials.find do |cred|
cred["type"] == "rubygems_server" && cred["replaces-base"] == true
cred["type"] == "rubygems_server" && cred.replaces_base?
end
host = credential ? credential["host"] : "rubygems.org"
@base_url = "https://#{host}" + ("/" unless host.end_with?("/"))
Expand Down
5 changes: 3 additions & 2 deletions bundler/spec/dependabot/bundler/metadata_finder_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

require "octokit"
require "spec_helper"
require "dependabot/credential"
require "dependabot/dependency"
require "dependabot/bundler/metadata_finder"
require_common_spec "metadata_finders/shared_examples_for_metadata_finders"
Expand Down Expand Up @@ -139,11 +140,11 @@
end
let(:credentials) do
[
{
Dependabot::Credential.new({
"type" => "rubygems_server",
"host" => "gems.greysteil.com",
"replaces-base" => true
}
})
]
end

Expand Down
30 changes: 30 additions & 0 deletions common/lib/dependabot/credential.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# typed: strict
# frozen_string_literal: true

require "sorbet-runtime"

module Dependabot
class Credential
extend T::Sig
extend Forwardable

def_delegators :@credential, :fetch, :keys, :[]=, :delete

sig { params(credential: T::Hash[String, T.any(T::Boolean, String)]).void }
def initialize(credential)
@replaces_base = T.let(credential["replaces-base"] == true, T::Boolean)
credential.delete("replaces-base")
@credential = T.let(T.unsafe(credential), T::Hash[String, String])
end

sig { returns(T::Boolean) }
def replaces_base?
@replaces_base
end

sig { params(key: String).returns(T.nilable(String)) }
def [](key)
@credential[key]
end
end
end
5 changes: 3 additions & 2 deletions common/lib/dependabot/file_fetchers/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
require "dependabot/dependency_file"
require "dependabot/source"
require "dependabot/errors"
require "dependabot/credential"
require "dependabot/clients/azure"
require "dependabot/clients/codecommit"
require "dependabot/clients/github_with_retries"
Expand All @@ -26,7 +27,7 @@ class Base
sig { returns(Dependabot::Source) }
attr_reader :source

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { returns(T.nilable(String)) }
Expand Down Expand Up @@ -94,7 +95,7 @@ def self.required_files_message
sig do
params(
source: Dependabot::Source,
credentials: T::Array[T::Hash[String, String]],
credentials: T::Array[Dependabot::Credential],
repo_contents_path: T.nilable(String),
options: T::Hash[String, String]
)
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/file_parsers/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# frozen_string_literal: true

require "sorbet-runtime"
require "dependabot/credential"

module Dependabot
module FileParsers
Expand All @@ -17,7 +18,7 @@ class Base
sig { returns(T.nilable(String)) }
attr_reader :repo_contents_path

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { returns(T.nilable(Dependabot::Source)) }
Expand All @@ -31,7 +32,7 @@ class Base
dependency_files: T::Array[Dependabot::DependencyFile],
source: T.nilable(Dependabot::Source),
repo_contents_path: T.nilable(String),
credentials: T::Array[T::Hash[String, String]],
credentials: T::Array[Dependabot::Credential],
reject_external_code: T::Boolean,
options: T::Hash[Symbol, T.untyped]
)
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/file_updaters/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# frozen_string_literal: true

require "sorbet-runtime"
require "dependabot/credential"

module Dependabot
module FileUpdaters
Expand All @@ -19,7 +20,7 @@ class Base
sig { returns(T.nilable(String)) }
attr_reader :repo_contents_path

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { returns(T::Hash[Symbol, T.untyped]) }
Expand All @@ -34,7 +35,7 @@ def self.updated_files_regex
params(
dependencies: T::Array[Dependabot::Dependency],
dependency_files: T::Array[Dependabot::DependencyFile],
credentials: T::Array[T::Hash[String, String]],
credentials: T::Array[Dependabot::Credential],
repo_contents_path: T.nilable(String),
options: T::Hash[Symbol, T.untyped]
).void
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/git_commit_checker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
require "dependabot/utils"
require "dependabot/source"
require "dependabot/dependency"
require "dependabot/credential"
require "dependabot/git_metadata_fetcher"
module Dependabot
# rubocop:disable Metrics/ClassLength
Expand All @@ -29,7 +30,7 @@ class GitCommitChecker
sig do
params(
dependency: Dependabot::Dependency,
credentials: T::Array[T::Hash[String, String]],
credentials: T::Array[Dependabot::Credential],
ignored_versions: T::Array[String],
raise_on_ignored: T::Boolean,
consider_version_branches_pinned: T::Boolean,
Expand Down Expand Up @@ -226,7 +227,7 @@ def most_specific_version_tag_for_sha(commit_sha)
sig { returns(Dependabot::Dependency) }
attr_reader :dependency

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { returns(T::Array[String]) }
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/git_metadata_fetcher.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

require "dependabot/errors"
require "dependabot/git_ref"
require "dependabot/credential"

module Dependabot
class GitMetadataFetcher
Expand All @@ -17,7 +18,7 @@ class GitMetadataFetcher
sig do
params(
url: String,
credentials: T::Array[T::Hash[String, String]]
credentials: T::Array[Dependabot::Credential]
)
.void
end
Expand Down Expand Up @@ -97,7 +98,7 @@ def head_commit_for_ref_sha(ref)
sig { returns(String) }
attr_reader :url

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { params(uri: String).returns(String) }
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/metadata_finders/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

require "sorbet-runtime"
require "dependabot/source"
require "dependabot/credential"

module Dependabot
module MetadataFinders
Expand All @@ -19,13 +20,13 @@ class Base
sig { returns(Dependabot::Dependency) }
attr_reader :dependency

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig do
params(
dependency: Dependabot::Dependency,
credentials: T::Array[T::Hash[String, String]]
credentials: T::Array[Dependabot::Credential]
)
.void
end
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/metadata_finders/base/commits_finder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
require "dependabot/git_metadata_fetcher"
require "dependabot/git_commit_checker"
require "dependabot/metadata_finders/base"
require "dependabot/credential"

module Dependabot
module MetadataFinders
Expand All @@ -22,14 +23,14 @@ class CommitsFinder
sig { returns(Dependabot::Dependency) }
attr_reader :dependency

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig do
params(
source: T.nilable(Dependabot::Source),
dependency: Dependabot::Dependency,
credentials: T::Array[T::Hash[String, String]]
credentials: T::Array[Dependabot::Credential]
)
.void
end
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/metadata_finders/base/release_finder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

require "sorbet-runtime"

require "dependabot/credential"
require "dependabot/clients/github_with_retries"
require "dependabot/clients/gitlab_with_retries"
require "dependabot/metadata_finders/base"
Expand All @@ -17,7 +18,7 @@ class ReleaseFinder
sig { returns(Dependabot::Dependency) }
attr_reader :dependency

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { returns(T.nilable(Dependabot::Source)) }
Expand All @@ -27,7 +28,7 @@ class ReleaseFinder
params(
source: T.nilable(Dependabot::Source),
dependency: Dependabot::Dependency,
credentials: T::Array[T::Hash[String, String]]
credentials: T::Array[Dependabot::Credential]
)
.void
end
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/pull_request_creator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

require "sorbet-runtime"
require "dependabot/metadata_finders"
require "dependabot/credential"

module Dependabot
class PullRequestCreator
Expand Down Expand Up @@ -76,7 +77,7 @@ def initialize(cause, pull_request)
sig { returns(String) }
attr_reader :base_commit

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { returns(T.nilable(String)) }
Expand Down Expand Up @@ -142,7 +143,7 @@ def initialize(cause, pull_request)
base_commit: String,
dependencies: T::Array[Dependabot::Dependency],
files: T::Array[Dependabot::DependencyFile],
credentials: T::Array[T::Hash[String, String]],
credentials: T::Array[Dependabot::Credential],
pr_message_header: T.nilable(String),
pr_message_footer: T.nilable(String),
custom_labels: T.nilable(T::Array[String]),
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/pull_request_creator/labeler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
require "octokit"
require "sorbet-runtime"
require "dependabot/pull_request_creator"
require "dependabot/credential"

module Dependabot
class PullRequestCreator
Expand Down Expand Up @@ -41,7 +42,7 @@ def register_label_details(package_manager, label_details)
params(
source: Dependabot::Source,
custom_labels: T.nilable(T::Array[String]),
credentials: T::Array[T::Hash[String, String]],
credentials: T::Array[Dependabot::Credential],
dependencies: T::Array[Dependency],
includes_security_fixes: T::Boolean,
label_language: T::Boolean,
Expand Down Expand Up @@ -107,7 +108,7 @@ def label_pull_request(pull_request_number)
sig { returns(T.nilable(T::Array[String])) }
attr_reader :custom_labels

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { returns(T::Array[Dependency]) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# frozen_string_literal: true

require "sorbet-runtime"
require "dependabot/credential"
require "dependabot/clients/azure"
require "dependabot/clients/bitbucket"
require "dependabot/clients/codecommit"
Expand Down Expand Up @@ -36,7 +37,7 @@ class PrNamePrefixer # rubocop:disable Metrics/ClassLength
params(
source: Dependabot::Source,
dependencies: T::Array[Dependency],
credentials: T::Array[T::Hash[String, String]],
credentials: T::Array[Dependabot::Credential],
security_fix: T::Boolean,
commit_message_options: T::Hash[Symbol, T.untyped]
)
Expand Down Expand Up @@ -76,7 +77,7 @@ def capitalize_first_word?
sig { returns(T::Array[Dependency]) }
attr_reader :dependencies

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { returns(T::Hash[Symbol, T.untyped]) }
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/pull_request_updater.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
require "dependabot/pull_request_updater/github"
require "dependabot/pull_request_updater/gitlab"
require "dependabot/pull_request_updater/azure"
require "dependabot/credential"

module Dependabot
class PullRequestUpdater
Expand All @@ -24,7 +25,7 @@ class BranchProtected < StandardError; end
sig { returns(String) }
attr_reader :old_commit

sig { returns(T::Array[T::Hash[String, String]]) }
sig { returns(T::Array[Dependabot::Credential]) }
attr_reader :credentials

sig { returns(Integer) }
Expand All @@ -45,7 +46,7 @@ class BranchProtected < StandardError; end
base_commit: String,
old_commit: String,
files: T::Array[Dependabot::DependencyFile],
credentials: T::Array[T::Hash[String, String]],
credentials: T::Array[Dependabot::Credential],
pull_request_number: Integer,
author_details: T.nilable(T::Hash[Symbol, String]),
signature_key: T.nilable(String),
Expand Down
5 changes: 3 additions & 2 deletions common/lib/dependabot/shared_helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
require "sorbet-runtime"
require "tmpdir"

require "dependabot/credential"
require "dependabot/simple_instrumentor"
require "dependabot/utils"
require "dependabot/errors"
Expand Down Expand Up @@ -246,7 +247,7 @@ def self.excon_defaults(options = nil)
sig do
type_parameters(:T)
.params(
credentials: T::Array[T::Hash[String, String]],
credentials: T::Array[Dependabot::Credential],
_block: T.proc.returns(T.type_parameter(:T))
)
.returns(T.type_parameter(:T))
Expand Down Expand Up @@ -285,7 +286,7 @@ def self.credential_helper_path
end

# rubocop:disable Metrics/PerceivedComplexity
sig { params(credentials: T::Array[T::Hash[String, String]], safe_directories: T::Array[String]).void }
sig { params(credentials: T::Array[Dependabot::Credential], safe_directories: T::Array[String]).void }
def self.configure_git_to_use_https_with_credentials(credentials, safe_directories)
File.open(GIT_CONFIG_GLOBAL_PATH, "w") do |file|
file << "# Generated by dependabot/dependabot-core"
Expand Down
Loading

0 comments on commit 89737ae

Please sign in to comment.