Add puppet/archive module, required for newer puppet/rabbitmq
[mirror/dsa-puppet.git] / 3rdparty / modules / archive / lib / puppet / parser / functions / artifactory_sha1.rb
diff --git a/3rdparty/modules/archive/lib/puppet/parser/functions/artifactory_sha1.rb b/3rdparty/modules/archive/lib/puppet/parser/functions/artifactory_sha1.rb
new file mode 100644 (file)
index 0000000..e97e25a
--- /dev/null
@@ -0,0 +1,22 @@
+require 'json'
+require 'puppet_x/bodeco/util'
+
+module Puppet::Parser::Functions
+  # Public: artifactory file sha1 checksum
+  #
+  # args[0] - artifactory file info url
+  #
+  # http://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API#ArtifactoryRESTAPI-FileInfo
+  # Returns sha1 from artifactory file info
+  newfunction(:artifactory_sha1, type: :rvalue) do |args|
+    raise(ArgumentError, "Invalid artifactory file info url #{args}") unless args.size == 1
+
+    uri = URI(args[0])
+    response = PuppetX::Bodeco::Util.content(uri)
+    content = JSON.parse(response)
+
+    sha1 = content['checksums'] && content['checksums']['sha1']
+    raise("Could not parse sha1 from url: #{args[0]}\nresponse: #{response.body}") unless sha1 =~ %r{\b[0-9a-f]{5,40}\b}
+    sha1
+  end
+end