From 249a6d586279ab96ffa8f645dcdd0e44210fd4e6 Mon Sep 17 00:00:00 2001 From: Simon Effenberg Date: Tue, 13 Sep 2016 15:21:15 +0200 Subject: [PATCH] apt_key now really works with userinfo for http(s) now http and https sources for apt_key can take a userinfo as it should be already since #384 ``` apt_key { '...': source => 'https://username:password@myhost.com/mypath/key.gpg' .. } ``` --- lib/puppet/provider/apt_key/apt_key.rb | 4 +++- spec/acceptance/apt_key_provider_spec.rb | 28 ++++++++++++++++++++++++ spec/unit/puppet/type/apt_key_spec.rb | 7 ++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/lib/puppet/provider/apt_key/apt_key.rb b/lib/puppet/provider/apt_key/apt_key.rb index a6d68b1..d7e85da 100644 --- a/lib/puppet/provider/apt_key/apt_key.rb +++ b/lib/puppet/provider/apt_key/apt_key.rb @@ -127,7 +127,9 @@ Puppet::Type.type(:apt_key).provide(:apt_key) do f else begin - key = parsedValue.read + user_pass = parsedValue.userinfo.nil? ? nil : parsedValue.userinfo.split(':') + parsedValue.userinfo = '' + key = open(parsedValue, :http_basic_authentication => user_pass).read rescue OpenURI::HTTPError, Net::FTPPermError => e fail("#{e.message} for #{resource[:source]}") rescue SocketError diff --git a/spec/acceptance/apt_key_provider_spec.rb b/spec/acceptance/apt_key_provider_spec.rb index 1661a2b..7fab2a5 100644 --- a/spec/acceptance/apt_key_provider_spec.rb +++ b/spec/acceptance/apt_key_provider_spec.rb @@ -482,6 +482,20 @@ ZTQcCD53HcBLvKX6RJ4ByYawKaQqMa27WK/YWVmFXqVDVk12iKrQW6zktDdGInnD shell(PUPPETLABS_KEY_CHECK_COMMAND) end + it 'works with userinfo' do + pp = <<-EOS + apt_key { 'puppetlabs': + id => '#{PUPPETLABS_GPG_KEY_LONG_ID}', + ensure => 'present', + source => 'http://dummyuser:dummypassword@#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}', + } + EOS + + apply_manifest(pp, :catch_failures => true) + apply_manifest(pp, :catch_failures => true) + shell(PUPPETLABS_KEY_CHECK_COMMAND) + end + it 'fails with a 404' do pp = <<-EOS apt_key { 'puppetlabs': @@ -575,6 +589,20 @@ ZTQcCD53HcBLvKX6RJ4ByYawKaQqMa27WK/YWVmFXqVDVk12iKrQW6zktDdGInnD shell(PUPPETLABS_KEY_CHECK_COMMAND) end + it 'works with userinfo' do + pp = <<-EOS + apt_key { 'puppetlabs': + id => '#{PUPPETLABS_GPG_KEY_LONG_ID}', + ensure => 'present', + source => 'https://dummyuser:dummypassword@#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}', + } + EOS + + apply_manifest(pp, :catch_failures => true) + apply_manifest(pp, :catch_failures => true) + shell(PUPPETLABS_KEY_CHECK_COMMAND) + end + it 'fails with a 404' do pp = <<-EOS apt_key { 'puppetlabs': diff --git a/spec/unit/puppet/type/apt_key_spec.rb b/spec/unit/puppet/type/apt_key_spec.rb index e412b50..b17c8ae 100644 --- a/spec/unit/puppet/type/apt_key_spec.rb +++ b/spec/unit/puppet/type/apt_key_spec.rb @@ -136,6 +136,13 @@ describe Puppet::Type::type(:apt_key) do )}.to_not raise_error end + it 'allows the http URI with username and password' do + expect { Puppet::Type.type(:apt_key).new( + :id => '4BD6EC30', + :source => 'http://testme:Password2@pgp.mit.edu' + )}.to_not raise_error + end + it 'allows the https URI scheme in source' do expect { Puppet::Type.type(:apt_key).new( :id => '4BD6EC30', -- 2.32.3