validates_hostname 1.0.4 → 1.0.5

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: f22a46962c7ec3fce9de05c3382e9ec5ad8f2a21
4
- data.tar.gz: 4e8e292b92f385c00148a1d742ccef1fb39b569c
3
+ metadata.gz: 95afd4c7854435996ba31b490d2fe4472460c6e0
4
+ data.tar.gz: a3ab78cc20012156408c984225c274556772f8c8
5
5
  SHA512:
6
- metadata.gz: 6935ccc2c596c927ec26d302635612830c5eef05d61a01dbe863561a9cb9b479118a71b6e1d64e4593066ac487a0efd95bae0024fffcad7e6421d245e8db4ab3
7
- data.tar.gz: 52a4ac6e1c8cdf17d04b08218642f31a6f3d8e411f38dd086dc28b17b69aa078a5b381f3af91b53fc22fb55b724d8e2f82066a5584b1bd16b31358282b2d99e5
6
+ metadata.gz: 01762b519ad24527b5a39f9a956693dd7b3f4e45ddec56323ec10349e2d34601d7c8031a612d9812b8ae22938d28cf37ea8cc3bec64f71bef178a70f449608e0
7
+ data.tar.gz: 94d45c227dede08a555069d661644252b2553c48559d52ff25331332b64537183348fe699ee9202522150e2be10fd38b66be96a4a79f9737c0b4ccec215f2f50
data/CHANGELOG.rdoc CHANGED
File without changes
data/MIT-LICENSE CHANGED
File without changes
data/Rakefile CHANGED
File without changes
@@ -1,4 +1,5 @@
1
1
  require 'active_support/concern'
2
+ require 'active_record'
2
3
  require 'active_model'
3
4
 
4
5
  module PAK
@@ -6,45 +7,86 @@ module PAK
6
7
  autoload :VERSION, 'validates_hostname/version'
7
8
 
8
9
  # List from IANA: http://www.iana.org/domains/root/db/
10
+ # http://data.iana.org/TLD/tlds-alpha-by-domain.txt
9
11
  ALLOWED_TLDS = %w(
10
- ac ad ae aero af ag ai al am an ao aq ar arpa as asia at au aw ax az
11
- ba bb bd be bf bg bh bi biz bj bl bm bn bo br bs bt bv bw by bz
12
- ca cat cc cd cf cg ch ci ck cl cm cn co com coop cr cu cv cx cy cz
13
- de dj dk dm do dz
14
- ec edu ee eg eh er es et eu
15
- fi fj fk fm fo fr
16
- ga gb gd ge gf gg gh gi gl gm gn gov gp gq gr gs gt gu gw gy
17
- hk hm hn hr ht hu
18
- id ie il im in info int io iq ir is it
19
- je jm jo jobs jp
20
- ke kg kh ki km kn kp kr kw ky kz
21
- la lb lc li lk lr ls lt lu lv ly
22
- ma mc md me mf mg mh mil mk ml mm mn mo mobi mp mq mr ms mt mu museum
23
- mv mw mx my mz
24
- na name nc ne net nf ng ni nl no np nr nu nz
25
- om org
26
- pa pe pf pg ph pk pl pm pn pr pro ps pt pw py
27
- qa
28
- re ro rs ru rw
29
- sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sv sy sz
30
- tc td tel tf tg th tj tk tl tm tn to tp tr travel tt tv tw tz
31
- ua ug uk um us uy uz
32
- va vc ve vg vi vn vu
33
- wf ws
34
- ye yt yu
35
- za zm zw
12
+ . abogado ac academy accountants active actor ad adult ae aero af ag agency ai
13
+ airforce al allfinanz alsace am amsterdam an android ao aq aquarelle ar archi
14
+ army arpa as asia associates at attorney au auction audio autos aw ax axa az ba
15
+ band bank bar bargains bayern bb bd be beer berlin best bf bg bh bi bid bike
16
+ bio biz bj black blackfriday bloomberg blue bm bmw bn bnpparibas bo boo
17
+ boutique br brussels bs bt budapest build builders business buzz bv bw by bz
18
+ bzh ca cab cal camera camp cancerresearch capetown capital caravan cards care
19
+ career careers cartier casa cash cat catering cc cd center ceo cern cf cg ch
20
+ channel cheap christmas chrome church ci citic city ck cl claims cleaning click
21
+ clinic clothing club cm cn co coach codes coffee college cologne com community
22
+ company computer condos construction consulting contractors cooking cool coop
23
+ country cr credit creditcard cricket crs cruises cu cuisinella cv cw cx cy
24
+ cymru cz dad dance dating day de deals degree delivery democrat dental dentist
25
+ desi dev diamonds diet digital direct directory discount dj dk dm dnp do docs
26
+ domains doosan durban dvag dz eat ec edu education ee eg email emerck energy
27
+ engineer engineering enterprises equipment er es esq estate et eu eurovision
28
+ eus events everbank exchange expert exposed fail farm fashion feedback fi
29
+ finance financial firmdale fish fishing fit fitness fj fk flights florist
30
+ flowers flsmidth fly fm fo foo forsale foundation fr frl frogans fund furniture
31
+ futbol ga gal gallery garden gb gbiz gd ge gent gf gg ggee gh gi gift gifts
32
+ gives gl glass gle global globo gm gmail gmo gmx gn google gop gov gp gq gr
33
+ graphics gratis green gripe gs gt gu guide guitars guru gw gy hamburg haus
34
+ healthcare help here hiphop hiv hk hm hn holdings holiday homes horse host
35
+ hosting house how hr ht hu ibm id ie il im immo immobilien in industries info
36
+ ing ink institute insure int international investments io iq ir irish is it iwc
37
+ je jetzt jm jo jobs joburg jp juegos kaufen kddi ke kg kh ki kim kitchen kiwi
38
+ km kn koeln kp kr krd kred kw ky kz la lacaixa land lat latrobe lawyer lb lc
39
+ lds lease legal lgbt li lidl life lighting limited limo link lk loans london
40
+ lotto lr ls lt ltda lu luxe luxury lv ly ma madrid maison management mango
41
+ market marketing mc md me media meet melbourne meme memorial menu mg mh miami
42
+ mil mini mk ml mm mn mo mobi moda moe monash money mormon mortgage moscow
43
+ motorcycles mov mp mq mr ms mt mu museum mv mw mx my mz na nagoya name navy nc
44
+ ne net network neustar new nexus nf ng ngo nhk ni ninja nl no np nr nra nrw nu
45
+ nyc nz okinawa om ong onl ooo org organic osaka otsuka ovh pa paris partners
46
+ parts party pe pf pg ph pharmacy photo photography photos physio pics pictures
47
+ pink pizza pk pl place plumbing pm pn pohl poker porn post pr praxi press pro
48
+ prod productions prof properties property ps pt pub pw py qa qpon quebec re
49
+ realtor recipes red rehab reise reisen reit ren rentals repair report
50
+ republican rest restaurant reviews rich rio rip ro rocks rodeo rs rsvp ru ruhr
51
+ rw ryukyu sa saarland sale samsung sarl sb sc sca scb schmidt schule schwarz
52
+ science scot sd se services sew sexy sg sh shiksha shoes shriram si singles sj
53
+ sk sky sl sm sn so social software sohu solar solutions soy space spiegel sr st
54
+ su supplies supply support surf surgery suzuki sv sx sy sydney systems sz
55
+ taipei tatar tattoo tax tc td technology tel tf tg th tienda tips tires tirol
56
+ tj tk tl tm tn to today tokyo tools top town toys tp tr trade training travel
57
+ trust tt tui tv tw tz ua ug uk university uno uol us uy uz va vacations vc ve
58
+ vegas ventures versicherung vet vg vi viajes video villas vision vlaanderen vn
59
+ vodka vote voting voto voyage vu wales wang watch webcam website wed wedding wf
60
+ whoswho wien wiki williamhill wme work works world ws wtc wtf xn--1qqw23a
61
+ xn--3bst00m xn--3ds443g xn--3e0b707e xn--45brj9c xn--45q11c xn--4gbrim
62
+ xn--55qw42g xn--55qx5d xn--6frz82g xn--6qq986b3xl xn--80adxhks xn--80ao21a
63
+ xn--80asehdb xn--80aswg xn--90a3ac xn--c1avg xn--cg4bki xn--clchc0ea0b2g2a9gcd
64
+ xn--czr694b xn--czrs0t xn--czru2d xn--d1acj3b xn--d1alf xn--fiq228c5hs
65
+ xn--fiq64b xn--fiqs8s xn--fiqz9s xn--flw351e xn--fpcrj9c3d xn--fzc2c9e2c
66
+ xn--gecrj9c xn--h2brj9c xn--hxt814e xn--i1b6b1a6a2e xn--io0a7i xn--j1amh
67
+ xn--j6w193g xn--kprw13d xn--kpry57d xn--kput3i xn--l1acc xn--lgbbat1ad8j
68
+ xn--mgb9awbf xn--mgba3a4f16a xn--mgbaam7a8h xn--mgbab2bd xn--mgbayh7gpa
69
+ xn--mgbbh1a71e xn--mgbc0a9azcg xn--mgberp4a5d4ar xn--mgbx4cd0ab xn--ngbc5azd
70
+ xn--node xn--nqv7f xn--nqv7fs00ema xn--o3cw4h xn--ogbpf8fl xn--p1acf xn--p1ai
71
+ xn--pgbs0dh xn--q9jyb4c xn--qcka1pmc xn--rhqv96g xn--s9brj9c xn--ses554g
72
+ xn--unup4y xn--vermgensberater-ctb xn--vermgensberatung-pwb xn--vhquv
73
+ xn--wgbh1c xn--wgbl6a xn--xhq521b xn--xkc2al3hye2a xn--xkc2dl3a5ee0h
74
+ xn--yfro4i67o xn--ygbi2ammx xn--zfr164b xxx xyz yachts yandex ye yoga yokohama
75
+ youtube yt za zip zm zone zuerich zw
36
76
  )
37
-
77
+
38
78
  DEFAULT_ERROR_MSG = {
39
- :invalid_hostname_length => 'hostname must be between 1 and 255 characters long',
40
- :invalid_label_length => 'label must be between 1 and 63 characters long',
41
- :label_begins_or_ends_with_hyphen => 'label begins or ends with hyphen',
42
- :label_contains_invalid_characters => "label contains invalid characters (valid characters: [%{valid_chars}])",
79
+ :invalid_hostname_length => 'must be between 1 and 255 characters long',
80
+ :invalid_label_length => 'must be between 1 and 63 characters long',
81
+ :label_begins_or_ends_with_hyphen => 'begins or ends with hyphen',
82
+ :label_contains_invalid_characters => "contains invalid characters (valid characters: [%{valid_chars}])",
43
83
  :hostname_label_is_numeric => 'unqualified hostname part cannot consist of numeric values only',
44
- :hostname_is_not_fqdn => 'hostname is not a fully qualified domain name',
45
- :single_numeric_hostname_label => 'hostnames cannot consist of a single numeric label'
84
+ :hostname_is_not_fqdn => 'is not a fully qualified domain name',
85
+ :single_numeric_hostname_label => 'cannot consist of a single numeric label',
86
+ :hostname_contains_consecutive_dots => 'must not contain consecutive dots',
87
+ :hostname_ends_with_dot => 'must not end with a dot'
46
88
  }.freeze
47
-
89
+
48
90
  class HostnameValidator < ActiveModel::EachValidator
49
91
  def initialize(options)
50
92
  opts = {
@@ -52,16 +94,18 @@ module PAK
52
94
  :require_valid_tld => false,
53
95
  :valid_tlds => ALLOWED_TLDS,
54
96
  :allow_numeric_hostname => false,
55
- :allow_wildcard_hostname => false
97
+ :allow_wildcard_hostname => false,
98
+ :allow_root_label => false
56
99
  }.merge(options)
57
100
  super(opts)
58
101
  end
59
-
102
+
60
103
  def validate_each(record, attribute, value)
61
104
  value ||= ''
105
+
62
106
  # maximum hostname length: 255 characters
63
107
  add_error(record, attribute, :invalid_hostname_length) unless value.length.between?(1, 255)
64
-
108
+
65
109
  # split each hostname into labels and do various checks
66
110
  if value.is_a?(String)
67
111
  labels = value.split '.'
@@ -84,7 +128,7 @@ module PAK
84
128
 
85
129
  # CHECK 4: the unqualified hostname portion cannot consist of
86
130
  # numeric values only
87
- if options[:allow_numeric_hostname] == false
131
+ if options[:allow_numeric_hostname] == false and labels.length > 0
88
132
  is_numeric_only = (
89
133
  (
90
134
  Integer(labels[0]) rescue false
@@ -96,14 +140,28 @@ module PAK
96
140
  # CHECK 5: in order to be fully qualified, the full hostname's
97
141
  # TLD must be valid
98
142
  if options[:require_valid_tld] == true
143
+ my_tld = value == '.' ? value : labels.last
144
+ my_tld ||= ''
99
145
  has_tld = options[:valid_tlds].select {
100
- |tld| tld =~ /^#{Regexp.escape(labels.last || '')}$/i
146
+ |tld| tld =~ /^#{Regexp.escape(my_tld)}$/i
101
147
  }.empty? ? false : true
102
148
  add_error(record, attribute, :hostname_is_not_fqdn) unless has_tld
103
149
  end
150
+
151
+ # CHECK 6: hostname may not contain consecutive dots
152
+ if value =~ /\.\./
153
+ add_error(record, attribute, :hostname_contains_consecutive_dots)
154
+ end
155
+
156
+ # CHECK 7: do not allow trailing dot unless option is set
157
+ if options[:allow_root_label] == false
158
+ if value =~ /\.$/
159
+ add_error(record, attribute, :hostname_ends_with_dot)
160
+ end
161
+ end
104
162
  end
105
163
  end
106
-
164
+
107
165
  def add_error(record, attr_name, message, *interpolators)
108
166
  args = {
109
167
  :default => [DEFAULT_ERROR_MSG[message], options[:message]],
@@ -121,10 +179,10 @@ module PAK
121
179
  }.merge(options)
122
180
  super(opts)
123
181
  end
124
-
182
+
125
183
  def validate_each(record, attribute, value)
126
184
  super
127
-
185
+
128
186
  if value.is_a?(String)
129
187
  labels = value.split '.'
130
188
  labels.each do |label|
@@ -143,7 +201,7 @@ module PAK
143
201
  end
144
202
  end
145
203
  end
146
-
204
+
147
205
  def add_error(record, attr_name, message, *interpolators)
148
206
  args = {
149
207
  :default => [DEFAULT_ERROR_MSG[message], options[:message]],
@@ -173,4 +231,4 @@ module PAK
173
231
  end
174
232
  end
175
233
 
176
- ActiveRecord::Base.send(:include, PAK::ValidatesHostname)
234
+ ActiveRecord::Base.send(:include, PAK::ValidatesHostname)
@@ -1,5 +1,5 @@
1
1
  module PAK
2
2
  module ValidatesHostname
3
- VERSION = '1.0.4'
3
+ VERSION = '1.0.5'
4
4
  end
5
5
  end
@@ -16,9 +16,12 @@ Gem::Specification.new do |s|
16
16
  s.licenses = 'MIT'
17
17
  s.require_paths = ["lib"]
18
18
 
19
- s.add_runtime_dependency 'rails'
20
- s.add_runtime_dependency 'rspec'
21
- s.add_runtime_dependency 'rspec-rails'
22
- s.add_runtime_dependency 'activerecord'
23
- s.add_runtime_dependency 'sqlite3-ruby'
19
+ s.add_runtime_dependency 'activerecord', '>= 3.0'
20
+ s.add_runtime_dependency 'activesupport', '>= 3.0'
21
+
22
+ s.add_development_dependency 'rspec', '~> 2.14'
23
+ s.add_development_dependency 'rspec-rails'
24
+ s.add_development_dependency 'rails-all'
25
+ s.add_development_dependency 'sqlite3'
26
+ s.add_development_dependency 'pry-debugger'
24
27
  end
metadata CHANGED
@@ -1,37 +1,65 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_hostname
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kim Nørgaard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-16 00:00:00.000000000 Z
11
+ date: 2015-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.14'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.14'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-rails
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - '>='
32
60
  - !ruby/object:Gem::Version
33
61
  version: '0'
34
- type: :runtime
62
+ type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
@@ -39,13 +67,13 @@ dependencies:
39
67
  - !ruby/object:Gem::Version
40
68
  version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
- name: rspec-rails
70
+ name: rails-all
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - '>='
46
74
  - !ruby/object:Gem::Version
47
75
  version: '0'
48
- type: :runtime
76
+ type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
@@ -53,13 +81,13 @@ dependencies:
53
81
  - !ruby/object:Gem::Version
54
82
  version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
- name: activerecord
84
+ name: sqlite3
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - '>='
60
88
  - !ruby/object:Gem::Version
61
89
  version: '0'
62
- type: :runtime
90
+ type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
@@ -67,13 +95,13 @@ dependencies:
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
- name: sqlite3-ruby
98
+ name: pry-debugger
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - '>='
74
102
  - !ruby/object:Gem::Version
75
103
  version: '0'
76
- type: :runtime
104
+ type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
@@ -89,13 +117,13 @@ extra_rdoc_files:
89
117
  - CHANGELOG.rdoc
90
118
  - MIT-LICENSE
91
119
  files:
92
- - validates_hostname.gemspec
93
- - MIT-LICENSE
94
120
  - CHANGELOG.rdoc
121
+ - MIT-LICENSE
95
122
  - README.rdoc
96
123
  - Rakefile
97
- - lib/validates_hostname/version.rb
98
124
  - lib/validates_hostname.rb
125
+ - lib/validates_hostname/version.rb
126
+ - validates_hostname.gemspec
99
127
  homepage: https://github.com/KimNorgaard/validates_hostname
100
128
  licenses:
101
129
  - MIT
@@ -116,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
144
  version: '0'
117
145
  requirements: []
118
146
  rubyforge_project:
119
- rubygems_version: 2.0.3
147
+ rubygems_version: 2.2.2
120
148
  signing_key:
121
149
  specification_version: 4
122
150
  summary: Checks for valid hostnames