class RuboCop::Cop::Bundler::InsecureProtocolSource
source ‘rubygems.org’
# bad
@example AllowHttpProtocol: false
source ‘rubygems.org’ # use only if HTTPS is unavailable
# good
@example AllowHttpProtocol: true (default)
source ‘rubygems.org’ # strongly recommended
# good
source :rubyforge
source :rubygems
source :gemcutter
# bad
@example
This option is ‘true` by default for safe autocorrection.
If you don’t allow ‘http://`, please set `false` to `AllowHttpProtocol`.
more secure.
However, you should strongly prefer `https://` where possible, as it is
internal gem server via an intranet, or where HTTPS is prohibited.
be necessary where HTTPS is not available. For example, where using an
This cop will not replace existing sources that use `http://`. This may
`’rubygems.org’‘.
When autocorrecting, this cop will replace symbol arguments with
`’rubygems.org’‘ if possible, or `’rubygems.org’‘ if not.
deprecated because they default to using HTTP requests. Instead, specify
Passing symbol arguments to `source` (e.g. `source :rubygems`) is
def allow_http_protocol?
def allow_http_protocol? cop_config.fetch('AllowHttpProtocol', true) end
def on_send(node)
def on_send(node) insecure_protocol_source?(node) do |source_node| source = source_node.value use_http_protocol = source == 'http://rubygems.org' return if allow_http_protocol? && use_http_protocol message = if use_http_protocol MSG_HTTP_PROTOCOL else format(MSG, source: source) end add_offense(source_node, message: message) do |corrector| corrector.replace(source_node, "'https://rubygems.org'") end end end