puppet-forge-server 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a171b2b28c33323c957641164b1a785700ea6372
4
- data.tar.gz: 35cfa215febc8ccf95dbbfa0165ddfdc40a051cc
3
+ metadata.gz: 1f47167acd969b4e7d7725a351d02c9a4d6e5608
4
+ data.tar.gz: fe6cb62aec95aa35517235e90f965ac267b72790
5
5
  SHA512:
6
- metadata.gz: f94bc68aa70ab4cc0c294768bb8d94e4b1f7a9047b29499049b937f5c0d57e0be7b5972527a7afbb1edd69d81b59207640274a7264faab123dfc96dd270786e7
7
- data.tar.gz: 2e329e028ae4385997e450ef9349e18a8431c9d673c8ecf59564de45e56599fe056ad158c73a6573f897fbb1e57d1a229a28b902fb59cd9e270a343ab5826b2f
6
+ metadata.gz: bb7deb4e4e51e3a1c0942de9e5455740b70587bccee7720d011ad61a75f5d87072357434bcca429a747fbab6f4b243aa9abe74f33b394d3fd38198f3d20ed3e3
7
+ data.tar.gz: 2ca911fd043d05967a887815d8121b76c0d2960f82d7922ef562fa3b1c476a94d36bdb8a4cfe3c01946e8888dbefe036ceff2bfa49e3359f125c7128dbd00049
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Puppet Forge Server
2
2
 
3
- Private Puppet Forge Server supporting local files and both v1 and v3 API proxies. Heavily inspired by the [Puppet Library](https://github.com/drrb/puppet-library).
3
+ Private Puppet Forge Server supporting local files and both v1 and v3 API proxies.
4
4
 
5
5
  [![Build Status](https://api.travis-ci.org/unibet/puppet-forge-server.svg)](https://travis-ci.org/unibet/puppet-forge-server)
6
6
  [![Gem Version](https://badge.fury.io/rb/puppet-forge-server.svg)](http://badge.fury.io/rb/puppet-forge-server)
@@ -216,5 +216,4 @@ Puppet module *metadata* json representation is used as a main business *model*.
216
216
 
217
217
  ## Reference
218
218
 
219
- * [Puppet Library](https://github.com/drrb/puppet-library)
220
219
  * [Puppet Anvil](https://github.com/jhaals/puppet-anvil)
@@ -14,8 +14,8 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
- require 'puppet_forge_server/patches'
18
17
  require 'puppet_forge_server/version'
18
+ require 'puppet_forge_server/patches/gem.rb'
19
19
 
20
20
  module PuppetForgeServer
21
21
  autoload :Server, 'puppet_forge_server/server'
@@ -57,7 +57,6 @@ module PuppetForgeServer
57
57
  module Utils
58
58
  autoload :Archiver, 'puppet_forge_server/utils/archiver'
59
59
  autoload :OptionParser, 'puppet_forge_server/utils/option_parser'
60
- autoload :Url, 'puppet_forge_server/utils/url'
61
60
  autoload :Buffer, 'puppet_forge_server/utils/buffer'
62
61
  autoload :Http, 'puppet_forge_server/utils/http'
63
62
  end
@@ -65,4 +64,4 @@ module PuppetForgeServer
65
64
  module Http
66
65
  autoload :HttpClient, 'puppet_forge_server/http/http_client'
67
66
  end
68
- end
67
+ end
@@ -1,7 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  #
3
- # Copyright 2014 drrb
4
- # Copyright 2014 North Development AB
3
+ # Copyright 2015 North Development AB
5
4
  #
6
5
  # Licensed under the Apache License, Version 2.0 (the "License");
7
6
  # you may not use this file except in compliance with the License.
@@ -19,49 +18,37 @@ module PuppetForgeServer::Api::V1
19
18
  module Modules
20
19
 
21
20
  def get_modules(metadata)
22
- modules = metadata.map do |element|
23
- name = element[:metadata].name.sub(/^[^-]+-/, '')
24
- full_name = element[:metadata].name.sub('-', '/')
25
- {
21
+ modules = {}
22
+ metadata.each do |element|
23
+ if modules[element[:metadata].name]
24
+ if max_version(modules[element[:metadata].name][:version], element[:metadata].version) == element[:metadata].version
25
+ modules[element[:metadata].name][:desc] = element[:metadata].description
26
+ modules[element[:metadata].name][:version] = element[:metadata].version
27
+ modules[element[:metadata].name][:project_url] = element[:metadata].project_page
28
+ end
29
+ modules[element[:metadata].name][:releases] = (modules[element[:metadata].name][:releases] + releases_version(element[:metadata])).uniq.sort_by { |r| Gem::Version.new(r[:version]) }.reverse
30
+ modules[element[:metadata].name][:tag_list] = (modules[element[:metadata].name][:tag_list] + element[:tags]).uniq.compact
31
+ else
32
+ name = element[:metadata].name.sub(/^[^-]+-/, '')
33
+ modules[element[:metadata].name] = {
26
34
  :author => element[:metadata].author,
27
- :full_name => full_name,
35
+ :full_name => element[:metadata].name.sub('-', '/'),
28
36
  :name => name,
29
37
  :desc => element[:metadata].description,
30
38
  :version => element[:metadata].version,
31
39
  :project_url => element[:metadata].project_page,
32
- :releases => [{:version => element[:metadata].version}],
33
- :tag_list => [element[:metadata].author, name]
34
- }
40
+ :releases => releases_version(element[:metadata]),
41
+ :tag_list => element[:tags] ? element[:tags] : [element[:metadata].author, name],
42
+ }
43
+ end
35
44
  end
36
45
 
37
- merge_modules(modules)
46
+ modules.values
38
47
  end
39
48
 
40
49
  private
41
- def merge_modules(modules)
42
- grouped_modules = modules.group_by do |result|
43
- result[:full_name]
44
- end
45
-
46
- grouped_modules.values.map do |value|
47
- merge_values(value)
48
- end.flatten.uniq
49
- end
50
-
51
- def merge_values(value)
52
- highest_version, tags, releases = value.inject([nil, [], []]) do |(highest_version, tags, releases), result|
53
- [
54
- max_version(highest_version, result[:version]),
55
- tags + (result[:tag_list] || []),
56
- releases + (result[:releases] || [])
57
- ]
58
- end
59
-
60
- value.first.tap do |result|
61
- result[:version] = highest_version
62
- result[:tag_list] = tags.uniq
63
- result[:releases] = releases.uniq.version_sort_by { |r| r[:version] }.reverse
64
- end
50
+ def releases_version(metadata)
51
+ [{:version => metadata.version}]
65
52
  end
66
53
 
67
54
  def max_version(left, right)
@@ -21,9 +21,9 @@ module PuppetForgeServer::Api::V1
21
21
  {
22
22
  :file => "/api/v1/files#{element[:path]}",
23
23
  :version => element[:metadata].version,
24
- :dependencies => element[:metadata].dependencies.map {|dep| [dep.name, dep.version_requirement]}
24
+ :dependencies => element[:metadata].dependencies.map {|dep| [dep.name, dep.version_requirement]}.compact
25
25
  }
26
- end.version_sort_by { |r| r[:version] }
26
+ end.uniq{|r| r[:version]}.sort_by {|r| Gem::Version.new(r[:version])}
27
27
  end
28
28
  end
29
29
  end
@@ -23,22 +23,21 @@ module PuppetForgeServer::Api::V3
23
23
  metadata.each do |element|
24
24
  if modules[element[:metadata].name]
25
25
  if max_version(modules[element[:metadata].name][:current_release][:version], element[:metadata].version) == element[:metadata].version
26
+ # Saving curret release tags for merging with new max version current release
26
27
  tags = modules[element[:metadata].name][:current_release][:tags]
27
28
  modules[element[:metadata].name][:current_release] = get_releases([element]).first
28
- modules[element[:metadata].name][:current_release][:tags] = (modules[element[:metadata].name][:current_release][:tags] + tags).uniq
29
+ modules[element[:metadata].name][:current_release][:tags] = (modules[element[:metadata].name][:current_release][:tags] + tags).uniq.compact
29
30
  end
30
- modules[element[:metadata].name][:releases] = (modules[element[:metadata].name][:releases] + releases_version(element[:metadata])).version_sort_by { |r| r[:version] }.reverse
31
+ modules[element[:metadata].name][:releases] = (modules[element[:metadata].name][:releases] + releases_version(element[:metadata])).uniq.sort_by { |r| Gem::Version.new(r[:version]) }.reverse
31
32
  else
32
- name = element[:metadata].name.sub(/^[^-]+-/, '')
33
- author = element[:metadata].name.split('-')[0]
34
33
  modules[element[:metadata].name] = {
35
34
  :uri => "/v3/modules/#{element[:metadata].name}",
36
- :name => name,
35
+ :name => element[:metadata].name.sub(/^[^-]+-/, ''),
37
36
  :homepage_url => element[:metadata].project_page,
38
37
  :issues_url => element[:metadata].issues_url,
39
38
  :releases => releases_version(element[:metadata]),
40
39
  :current_release => get_releases([element]).first,
41
- :owner => {:username => author, :uri => "/v3/users/#{author}"}
40
+ :owner => {:username => element[:metadata].author, :uri => "/v3/users/#{element[:metadata].author}"}
42
41
  }
43
42
  end
44
43
  end
@@ -33,7 +33,7 @@ module PuppetForgeServer::Api::V3
33
33
  :file_uri => "/v3/files#{element[:path]}",
34
34
  :file_md5 => element[:checksum]
35
35
  }
36
- end.version_sort_by { |r| r[:version] }
36
+ end.uniq{|r| r[:version]}.sort_by { |r| Gem::Version.new(r[:version]) }
37
37
  end
38
38
  end
39
39
  end
@@ -54,7 +54,7 @@ module PuppetForgeServer::Backends
54
54
 
55
55
  private
56
56
  def read_metadata(archive_path)
57
- metadata_file = read_entry(archive_path, %r[[^/]+/metadata\.json$])
57
+ metadata_file = read_from_archive(archive_path, %r[[^/]+/metadata\.json$])
58
58
  JSON.parse(metadata_file)
59
59
  rescue => error
60
60
  warn "Error reading from module archive #{archive_path}: #{error}"
@@ -16,6 +16,7 @@
16
16
 
17
17
  require 'open-uri'
18
18
  require 'open_uri_redirections'
19
+ require 'timeout'
19
20
 
20
21
  module PuppetForgeServer::Http
21
22
  class HttpClient
@@ -29,7 +30,9 @@ module PuppetForgeServer::Http
29
30
 
30
31
  private
31
32
  def open_uri(url)
32
- open(url, 'User-Agent' => "Puppet-Forge-Server/#{PuppetForgeServer::VERSION}", :allow_redirections => :safe)
33
+ ::Timeout.timeout(10) do
34
+ open(url, 'User-Agent' => "Puppet-Forge-Server/#{PuppetForgeServer::VERSION}", :allow_redirections => :safe)
35
+ end
33
36
  end
34
37
  end
35
38
  end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2015 North Development AB
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ class Gem::Version
18
+ def initialize version
19
+ @version = self.class.correct?(version) ? version.to_s.strip.gsub('-', '.pre.') : '0'
20
+ end
21
+ end
@@ -92,21 +92,20 @@ module PuppetForgeServer
92
92
 
93
93
  private
94
94
  def backends(options)
95
- options[:backend].map do |type, typed_backends|
95
+ # Add directory backend for serving cached modules in case proxy flips over
96
+ backends = options[:backend]['Proxy'] && ! options[:backend]['Proxy'].empty? ? [PuppetForgeServer::Backends.const_get('Directory').new(options[:cache_basedir])] : []
97
+ backends << options[:backend].map do |type, typed_backends|
96
98
  typed_backends.map do |url|
97
99
  case type
98
100
  when 'Proxy'
99
101
  @log.info "Detecting API version for #{url}..."
100
- [
101
- PuppetForgeServer::Backends.const_get("#{type}V#{get_api_version(url)}").new(url.chomp('/'), options[:cache_basedir]),
102
- # Add directory backend for serving cached modules in case proxy flips over
103
- PuppetForgeServer::Backends.const_get('Directory').new(options[:cache_basedir])
104
- ]
102
+ PuppetForgeServer::Backends.const_get("#{type}V#{get_api_version(url)}").new(url.chomp('/'), options[:cache_basedir])
105
103
  else
106
104
  PuppetForgeServer::Backends.const_get(type).new(url)
107
105
  end
108
106
  end
109
- end.flatten.sort_by { |backend| backend.PRIORITY }
107
+ end
108
+ backends.flatten.sort_by { |backend| backend.PRIORITY }
110
109
  end
111
110
  end
112
111
  end
@@ -19,11 +19,13 @@ require 'zlib'
19
19
 
20
20
  module PuppetForgeServer::Utils
21
21
  module Archiver
22
- def read_entry(path, entry_name_regex)
23
- tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(path))
22
+ def read_from_archive(archive, name_regex)
23
+ tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(archive))
24
24
  tar.rewind
25
- entry = tar.find { |e| e.full_name =~ entry_name_regex } or raise "Couldn't find entry in archive matching #{entry_name_regex.inspect}"
26
- entry.read
25
+ tar.each do |obj|
26
+ return obj.read if obj.full_name =~ name_regex
27
+ end
28
+ raise "Given name #{name_regex} not found in #{archive}"
27
29
  end
28
30
  end
29
31
  end
@@ -1,7 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  #
3
- # Copyright 2014 drrb
4
- # Copyright 2014 North Development AB
3
+ # Copyright 2015 North Development AB
5
4
  #
6
5
  # Licensed under the Apache License, Version 2.0 (the "License");
7
6
  # you may not use this file except in compliance with the License.
@@ -17,10 +16,10 @@
17
16
 
18
17
  require 'optparse'
19
18
  require 'tmpdir'
19
+ require 'uri'
20
20
 
21
21
  module PuppetForgeServer::Utils
22
22
  module OptionParser
23
- include PuppetForgeServer::Utils::Url
24
23
 
25
24
  @@DEFAULT_DAEMONIZE = false
26
25
  @@DEFAULT_PORT = 8080
@@ -28,42 +27,43 @@ module PuppetForgeServer::Utils
28
27
  @@DEFAULT_CACHE_DIR = File.join(Dir.tmpdir.to_s, 'puppet-forge-server', 'cache')
29
28
  @@DEFAULT_LOG_DIR = File.join(Dir.tmpdir.to_s, 'puppet-forge-server', 'log')
30
29
  @@DEFAULT_WEBUI_ROOT = File.expand_path('../app', File.dirname(__FILE__))
30
+ @@DEFAULT_HOST = '0.0.0.0'
31
31
 
32
32
  def parse_options(args)
33
- options = {:daemonize => @@DEFAULT_DAEMONIZE, :cache_basedir => @@DEFAULT_CACHE_DIR, :port => @@DEFAULT_PORT, :webui_root => @@DEFAULT_WEBUI_ROOT}
33
+ options = {:daemonize => @@DEFAULT_DAEMONIZE, :cache_basedir => @@DEFAULT_CACHE_DIR, :port => @@DEFAULT_PORT, :webui_root => @@DEFAULT_WEBUI_ROOT, :host => @@DEFAULT_HOST}
34
34
  option_parser = ::OptionParser.new do |opts|
35
35
  opts.banner = "Usage: #{File.basename $0} [options]"
36
36
  opts.version = PuppetForgeServer::VERSION
37
37
 
38
- opts.on('-p', "--port PORT', 'Port to listen on (default: #{@@DEFAULT_PORT})") do |port|
38
+ opts.on('-p', '--port PORT', "Port number to bind to (default: #{@@DEFAULT_PORT})") do |port|
39
39
  options[:port] = port
40
40
  end
41
41
 
42
- opts.on('-b', '--bind-host HOSTNAME', 'Host name to bind to (default: whatever Rack wants to use)') do |hostname|
43
- options[:hostname] = hostname
42
+ opts.on('-b', '--bind HOST', "Host name or IP address to bind to (default: #{@@DEFAULT_HOST})") do |host|
43
+ options[:host] = host
44
44
  end
45
45
 
46
- opts.on('-D', '--daemonize', "Run the server in the background (default: #{@@DEFAULT_DAEMONIZE})") do
46
+ opts.on('-D', '--daemonize', "Run server in the background (default: #{@@DEFAULT_DAEMONIZE})") do
47
47
  options[:daemonize] = true
48
48
  end
49
49
 
50
- opts.on('--pidfile FILE', 'Write a pidfile to this location after starting') do |pidfile|
50
+ opts.on('--pidfile FILE', "Pid file location (default: #{@@DEFAULT_PID_FILE})") do |pidfile|
51
51
  options[:pidfile] = pidfile
52
52
  end
53
53
 
54
54
  options[:backend] = {'Directory' => [], 'Proxy' => [], 'Source' => []}
55
- opts.on('-m', '--module-dir DIR', 'Directory containing packaged modules (can be specified multiple times)') do |module_dir|
55
+ opts.on('-m', '--module-dir DIR', 'Directory containing packaged modules (recursively searched)') do |module_dir|
56
56
  options[:backend]['Directory'] << module_dir
57
57
  end
58
- opts.on('-x', '--proxy URL', 'Remote forge to proxy (can be specified multiple times)') do |url|
59
- options[:backend]['Proxy'] << normalize_url(url)
58
+ opts.on('-x', '--proxy URL', 'Remote forge URL') do |url|
59
+ options[:backend]['Proxy'] << url
60
60
  end
61
61
 
62
- opts.on('--cache-basedir DIR', "Cache all proxies' downloaded modules under this directory (default: #{@@DEFAULT_CACHE_DIR})") do |cache_basedir|
62
+ opts.on('--cache-basedir DIR', "Proxy module cache base directory (default: #{@@DEFAULT_CACHE_DIR})") do |cache_basedir|
63
63
  options[:cache_basedir] = cache_basedir
64
64
  end
65
65
 
66
- opts.on('--log-dir DIR', "Directory containing all server logs (if daemonized default: #{@@DEFAULT_LOG_DIR})") do |log_dir|
66
+ opts.on('--log-dir DIR', "Log directory (default: #{@@DEFAULT_LOG_DIR})") do |log_dir|
67
67
  options[:log_dir] = log_dir
68
68
  end
69
69
 
@@ -96,4 +96,4 @@ module PuppetForgeServer::Utils
96
96
  return options
97
97
  end
98
98
  end
99
- end
99
+ end
@@ -15,5 +15,5 @@
15
15
  # limitations under the License.
16
16
 
17
17
  module PuppetForgeServer
18
- VERSION = '1.6.0'
18
+ VERSION = '1.7.0'
19
19
  end
@@ -42,6 +42,7 @@ Gem::Specification.new do |spec|
42
42
  spec.add_dependency 'open4', '~> 1.3'
43
43
  spec.add_dependency 'open_uri_redirections', '~> 0.1'
44
44
  spec.add_dependency 'haml', '~> 4.0'
45
+ spec.add_dependency 'deep_merge', '~> 1.0'
45
46
 
46
47
  spec.add_development_dependency 'rake', '~> 10.3'
47
48
  spec.add_development_dependency 'rspec', '~> 3.1'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-forge-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilja Bobkevic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-20 00:00:00.000000000 Z
11
+ date: 2015-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '4.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: deep_merge
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rake
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -204,13 +218,12 @@ files:
204
218
  - lib/puppet_forge_server/models/builder.rb
205
219
  - lib/puppet_forge_server/models/dependency.rb
206
220
  - lib/puppet_forge_server/models/metadata.rb
207
- - lib/puppet_forge_server/patches.rb
221
+ - lib/puppet_forge_server/patches/gem.rb
208
222
  - lib/puppet_forge_server/server.rb
209
223
  - lib/puppet_forge_server/utils/archiver.rb
210
224
  - lib/puppet_forge_server/utils/buffer.rb
211
225
  - lib/puppet_forge_server/utils/http.rb
212
226
  - lib/puppet_forge_server/utils/option_parser.rb
213
- - lib/puppet_forge_server/utils/url.rb
214
227
  - lib/puppet_forge_server/version.rb
215
228
  - puppet-forge-server.gemspec
216
229
  - spec/spec_helper.rb
@@ -1,72 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Copyright 2014 drrb
4
- # Copyright 2014 North Development AB
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
-
18
- require 'rubygems/package'
19
-
20
- module Gem
21
- def Version.new(version)
22
- super(version.to_s.gsub('-', '.pre.'))
23
- rescue ArgumentError
24
- if version =~ /^\d+(\.\d+)*/
25
- super(version[/^\d+(\.\d+)*/])
26
- else
27
- super('0')
28
- end
29
- end
30
- end
31
-
32
- class Hash
33
- def deep_merge(other)
34
- merge(other) do |key, old_val, new_val|
35
- if old_val.instance_of? Array
36
- old_val + new_val
37
- else
38
- new_val
39
- end
40
- end
41
- end
42
-
43
- def deep_merge!(other)
44
- replace(deep_merge(other))
45
- end
46
- end
47
-
48
- class Array
49
- def deep_merge
50
- inject({}) do |merged, map|
51
- merged.deep_merge(map)
52
- end
53
- end
54
-
55
- def version_sort_by
56
- sort_by do |element|
57
- Gem::Version.new(yield(element))
58
- end
59
- end
60
- end
61
-
62
- # Used by PuppetForgeServer::Utils::Archiver
63
- class Gem::Package::TarReader
64
- # Old versions of RubyGems don't include Enumerable in here
65
- def find
66
- each do |entry|
67
- if yield(entry)
68
- return entry
69
- end
70
- end
71
- end
72
- end
@@ -1,36 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Copyright 2014 drrb
4
- # Copyright 2014 North Development AB
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
-
18
- require 'uri'
19
-
20
- module PuppetForgeServer::Utils
21
- module Url
22
- def normalize_url(uri_string)
23
- begin
24
- url = URI.parse(uri_string)
25
- rescue URI::InvalidURIError => e
26
- raise PuppetForgeServer::Errors::Expected, "Invalid URL '#{uri_string}': #{e.message}"
27
- end
28
- if url.scheme
29
- raise PuppetForgeServer::Errors::Expected, "Invalid URL '#{uri_string}': unsupported protocol '#{url.scheme}'" unless url.scheme =~ /^https?$/
30
- else
31
- uri_string = "http://#{uri_string}"
32
- end
33
- uri_string.sub /\/$/, ''
34
- end
35
- end
36
- end