dyndnsd 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db179e252883aaa67b13141d717f4b05fbf94855cca48818e7c21fad127f660a
4
- data.tar.gz: 35c7ceb2ebfa157672e3c40c93309170effa583e46acd4ad94526a918235a7e7
3
+ metadata.gz: 38018d9a0981b3c2a641440f3848eebadac2ca688e22cd3d3f48dca362ecbb72
4
+ data.tar.gz: 98685b2439de5962c7e6ebb6aee708e361541f2cc9be83f4f21b28fe8f8af873
5
5
  SHA512:
6
- metadata.gz: e34cb6fa4efea78da85206ba61dacfc0420121aab94bce8eb63f0947b2c0fded6b2b8cd886bda5b2d29e88a96a93ad035ea0783fa8f83683073607d6a1ebd5df
7
- data.tar.gz: 2c50826bb39c0e043cdb6905fb2e9c5dea43bd2169045c7aba6cb095e02e84349005f2108fefb3b06d265ee5329759c31cf1475799d5c83616d93a4bbb6679e7
6
+ metadata.gz: 1057f502a1bbe3e99c6282747765bc25d7e9a2f37c7409e50969847fe353e877c6eefb698099bf148543a6412cd0c6e33df3039a0099551391c8dfb0cdb5e80f
7
+ data.tar.gz: dcce864fad0992c9868394000286cb6200512e1103017d373358aa3c71c89a94e27796c8bfd11a11ec96fe6d63fc3318938942621178cf111879863fad7347cf
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2.0 (March 6, 2020)
4
+
5
+ IMPROVEMENTS:
6
+
7
+ - Refactor gemspec based on [recommendations](https://piotrmurach.com/articles/writing-a-ruby-gem-specification/) so tests are now excluded from gem and binaries move to `./exe` directory
8
+ - Adopt Ruby 2.3 frozen string literals for source code potentially reducing memory consumption
9
+
3
10
  ## 2.1.1 (March 1, 2020)
4
11
 
5
12
  IMPROVEMENTS:
data/exe/dyndnsd ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'dyndnsd'
5
+
6
+ Dyndnsd::Daemon.run!
data/lib/dyndnsd.rb CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'etc'
4
4
  require 'logger'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'forwardable'
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Dyndnsd
3
4
  module Generator
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'ipaddr'
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Dyndnsd
3
4
  module Responder
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Dyndnsd
3
4
  module Responder
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  # Adapted from https://github.com/eric/metriks-graphite/blob/master/lib/metriks/reporter/graphite.rb
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Dyndnsd
3
4
  module Updater
@@ -1,4 +1,5 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Dyndnsd
3
- VERSION = '2.1.1'.freeze
4
+ VERSION = '2.2.0'
4
5
  end
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dyndnsd
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Nicolai
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-01 00:00:00.000000000 Z
11
+ date: 2020-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rack
14
+ name: jaeger-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: 0.10.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: '2.0'
27
- - !ruby/object:Gem::Dependency
28
- name: json
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: 0.10.0
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: metriks
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -67,33 +53,33 @@ dependencies:
67
53
  - !ruby/object:Gem::Version
68
54
  version: 0.5.0
69
55
  - !ruby/object:Gem::Dependency
70
- name: rack-tracer
56
+ name: rack
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: 0.9.0
61
+ version: '2.0'
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: 0.9.0
68
+ version: '2.0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: jaeger-client
70
+ name: rack-tracer
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: 0.10.0
75
+ version: 0.9.0
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: 0.10.0
82
+ version: 0.9.0
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: bundler
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -109,21 +95,21 @@ dependencies:
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
- name: rake
98
+ name: bundler-audit
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - ">="
101
+ - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: '0'
103
+ version: 0.6.0
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - ">="
108
+ - - "~>"
123
109
  - !ruby/object:Gem::Version
124
- version: '0'
110
+ version: 0.6.0
125
111
  - !ruby/object:Gem::Dependency
126
- name: rspec
112
+ name: rack-test
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - ">="
@@ -137,7 +123,7 @@ dependencies:
137
123
  - !ruby/object:Gem::Version
138
124
  version: '0'
139
125
  - !ruby/object:Gem::Dependency
140
- name: rack-test
126
+ name: rake
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - ">="
@@ -151,33 +137,33 @@ dependencies:
151
137
  - !ruby/object:Gem::Version
152
138
  version: '0'
153
139
  - !ruby/object:Gem::Dependency
154
- name: rubocop
140
+ name: rspec
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
- - - "~>"
143
+ - - ">="
158
144
  - !ruby/object:Gem::Version
159
- version: 0.80.0
145
+ version: '0'
160
146
  type: :development
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
- - - "~>"
150
+ - - ">="
165
151
  - !ruby/object:Gem::Version
166
- version: 0.80.0
152
+ version: '0'
167
153
  - !ruby/object:Gem::Dependency
168
- name: bundler-audit
154
+ name: rubocop
169
155
  requirement: !ruby/object:Gem::Requirement
170
156
  requirements:
171
157
  - - "~>"
172
158
  - !ruby/object:Gem::Version
173
- version: 0.6.0
159
+ version: 0.80.0
174
160
  type: :development
175
161
  prerelease: false
176
162
  version_requirements: !ruby/object:Gem::Requirement
177
163
  requirements:
178
164
  - - "~>"
179
165
  - !ruby/object:Gem::Version
180
- version: 0.6.0
166
+ version: 0.80.0
181
167
  - !ruby/object:Gem::Dependency
182
168
  name: solargraph
183
169
  requirement: !ruby/object:Gem::Requirement
@@ -194,23 +180,19 @@ dependencies:
194
180
  version: '0'
195
181
  description: A small, lightweight and extensible DynDNS server written with Ruby and
196
182
  Rack.
197
- email: chrnicolai@gmail.com
183
+ email:
198
184
  executables:
199
185
  - dyndnsd
200
186
  extensions: []
201
- extra_rdoc_files: []
187
+ extra_rdoc_files:
188
+ - README.md
189
+ - CHANGELOG.md
190
+ - LICENSE
202
191
  files:
203
- - ".gitignore"
204
- - ".rubocop.yml"
205
- - ".solargraph.yml"
206
- - ".travis.yml"
207
192
  - CHANGELOG.md
208
- - Gemfile
209
193
  - LICENSE
210
194
  - README.md
211
- - Rakefile
212
- - bin/dyndnsd
213
- - dyndnsd.gemspec
195
+ - exe/dyndnsd
214
196
  - init.d/debian-6-dyndnsd
215
197
  - lib/dyndnsd.rb
216
198
  - lib/dyndnsd/database.rb
@@ -221,14 +203,13 @@ files:
221
203
  - lib/dyndnsd/textfile_reporter.rb
222
204
  - lib/dyndnsd/updater/command_with_bind_zone.rb
223
205
  - lib/dyndnsd/version.rb
224
- - spec/daemon_spec.rb
225
- - spec/spec_helper.rb
226
- - spec/support/dummy_database.rb
227
- - spec/support/dummy_updater.rb
228
206
  homepage: https://github.com/cmur2/dyndnsd
229
207
  licenses:
230
208
  - Apache-2.0
231
- metadata: {}
209
+ metadata:
210
+ bug_tracker_uri: https://github.com/cmur2/dyndnsd/issues
211
+ changelog_uri: https://github.com/cmur2/dyndnsd/blob/master/CHANGELOG.md
212
+ source_code_uri: https://github.com/cmur2/dyndnsd
232
213
  post_install_message:
233
214
  rdoc_options: []
234
215
  require_paths:
@@ -248,8 +229,4 @@ rubygems_version: 3.0.6
248
229
  signing_key:
249
230
  specification_version: 4
250
231
  summary: dyndnsd.rb
251
- test_files:
252
- - spec/daemon_spec.rb
253
- - spec/spec_helper.rb
254
- - spec/support/dummy_database.rb
255
- - spec/support/dummy_updater.rb
232
+ test_files: []
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- .DS_Store
2
- *.lock
3
- pkg/*
4
- .yardoc
data/.rubocop.yml DELETED
@@ -1,87 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: '2.3'
3
-
4
- Gemspec/OrderedDependencies:
5
- Enabled: false
6
-
7
- Layout/EmptyLineAfterGuardClause:
8
- Enabled: false
9
-
10
- # allows nicer usage of private_class_method
11
- Layout/EmptyLinesAroundArguments:
12
- Enabled: false
13
-
14
- Layout/HashAlignment:
15
- Enabled: false
16
-
17
- Layout/LeadingEmptyLines:
18
- Enabled: false
19
-
20
- Layout/LineLength:
21
- Max: 200
22
-
23
- Layout/SpaceInsideHashLiteralBraces:
24
- Enabled: false
25
-
26
- Metrics/AbcSize:
27
- Enabled: false
28
-
29
- Metrics/BlockLength:
30
- Enabled: false
31
-
32
- Metrics/ClassLength:
33
- Enabled: false
34
-
35
- Metrics/CyclomaticComplexity:
36
- Enabled: false
37
-
38
- Metrics/MethodLength:
39
- Enabled: false
40
-
41
- Metrics/PerceivedComplexity:
42
- Enabled: false
43
-
44
- Naming/MethodParameterName:
45
- Enabled: false
46
-
47
- Naming/MemoizedInstanceVariableName:
48
- Enabled: false
49
-
50
- Style/ConditionalAssignment:
51
- Enabled: false
52
-
53
- Style/Documentation:
54
- Enabled: false
55
-
56
- Style/FormatStringToken:
57
- Enabled: false
58
-
59
- Style/FrozenStringLiteralComment:
60
- Enabled: false
61
-
62
- Style/GuardClause:
63
- Enabled: false
64
-
65
- Style/HashEachMethods:
66
- Enabled: true
67
-
68
- Style/HashTransformKeys:
69
- Enabled: true
70
-
71
- Style/HashTransformValues:
72
- Enabled: true
73
-
74
- Style/IdenticalConditionalBranches:
75
- Enabled: false
76
-
77
- Style/InverseMethods:
78
- Enabled: false
79
-
80
- Style/NegatedIf:
81
- Enabled: false
82
-
83
- Style/RescueModifier:
84
- Enabled: false
85
-
86
- Style/SymbolArray:
87
- Enabled: false
data/.solargraph.yml DELETED
@@ -1,16 +0,0 @@
1
- ---
2
- include:
3
- - "**/*.rb"
4
- - "bin/dyndnsd"
5
- exclude:
6
- - spec/**/*
7
- - test/**/*
8
- - vendor/**/*
9
- - ".bundle/**/*"
10
- require: []
11
- domains: []
12
- reporters:
13
- - rubocop
14
- - require_not_found
15
- require_paths: []
16
- max_files: 5000
data/.travis.yml DELETED
@@ -1,12 +0,0 @@
1
- ---
2
- os: linux
3
- language: ruby
4
- rvm:
5
- - 2.7
6
- - 2.6
7
- - 2.5
8
- - 2.4
9
- - 2.3
10
-
11
- script:
12
- - bundle exec rake travis
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
data/Rakefile DELETED
@@ -1,22 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
- require 'rubocop/rake_task'
4
- require 'bundler/audit/task'
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
- RuboCop::RakeTask.new
8
- Bundler::Audit::Task.new
9
-
10
- desc 'Should be run by developer once to prepare initial solargraph usage (fill caches etc.)'
11
- task :'solargraph:init' do
12
- sh 'solargraph download-core'
13
- end
14
-
15
- desc 'Run experimental solargraph type checker'
16
- task :'solargraph:tc' do
17
- sh 'solargraph typecheck'
18
- end
19
-
20
- task default: [:rubocop, :spec, 'bundle:audit']
21
-
22
- task travis: [:default, :'solargraph:tc']
data/bin/dyndnsd DELETED
@@ -1,4 +0,0 @@
1
-
2
- require 'dyndnsd'
3
-
4
- Dyndnsd::Daemon.run!
data/dyndnsd.gemspec DELETED
@@ -1,37 +0,0 @@
1
-
2
- $LOAD_PATH.push File.expand_path('lib', __dir__)
3
-
4
- require 'dyndnsd/version'
5
-
6
- Gem::Specification.new do |s|
7
- s.name = 'dyndnsd'
8
- s.version = Dyndnsd::VERSION
9
- s.summary = 'dyndnsd.rb'
10
- s.description = 'A small, lightweight and extensible DynDNS server written with Ruby and Rack.'
11
- s.author = 'Christian Nicolai'
12
- s.email = 'chrnicolai@gmail.com'
13
- s.homepage = 'https://github.com/cmur2/dyndnsd'
14
- s.license = 'Apache-2.0'
15
-
16
- s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
- s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
- s.require_paths = ['lib']
19
- s.executables = ['dyndnsd']
20
-
21
- s.required_ruby_version = '>= 2.3'
22
-
23
- s.add_runtime_dependency 'rack', '~> 2.0'
24
- s.add_runtime_dependency 'json'
25
- s.add_runtime_dependency 'metriks'
26
- s.add_runtime_dependency 'opentracing', '~> 0.5.0'
27
- s.add_runtime_dependency 'rack-tracer', '~> 0.9.0'
28
- s.add_runtime_dependency 'jaeger-client', '~> 0.10.0'
29
-
30
- s.add_development_dependency 'bundler'
31
- s.add_development_dependency 'rake'
32
- s.add_development_dependency 'rspec'
33
- s.add_development_dependency 'rack-test'
34
- s.add_development_dependency 'rubocop', '~> 0.80.0'
35
- s.add_development_dependency 'bundler-audit', '~> 0.6.0'
36
- s.add_development_dependency 'solargraph'
37
- end
data/spec/daemon_spec.rb DELETED
@@ -1,240 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dyndnsd::Daemon do
4
- include Rack::Test::Methods
5
-
6
- def app
7
- Dyndnsd.logger = Logger.new(STDOUT)
8
- Dyndnsd.logger.level = Logger::UNKNOWN
9
-
10
- config = {
11
- 'domain' => 'example.org',
12
- 'users' => {
13
- 'test' => {
14
- 'password' => 'secret',
15
- 'hosts' => ['foo.example.org', 'bar.example.org']
16
- }
17
- }
18
- }
19
- db = Dyndnsd::DummyDatabase.new({})
20
- updater = Dyndnsd::Updater::Dummy.new
21
- daemon = Dyndnsd::Daemon.new(config, db, updater)
22
-
23
- app = Rack::Auth::Basic.new(daemon, 'DynDNS', &daemon.method(:authorized?))
24
-
25
- app = Dyndnsd::Responder::DynDNSStyle.new(app)
26
-
27
- Rack::Tracer.new(app, trust_incoming_span: false)
28
- end
29
-
30
- it 'requires authentication' do
31
- get '/'
32
- expect(last_response.status).to eq(401)
33
- expect(last_response.body).to eq('badauth')
34
- end
35
-
36
- it 'requires configured correct credentials' do
37
- authorize 'test', 'wrongsecret'
38
- get '/'
39
- expect(last_response.status).to eq(401)
40
- expect(last_response.body).to eq('badauth')
41
- end
42
-
43
- it 'only supports GET requests' do
44
- authorize 'test', 'secret'
45
- post '/nic/update'
46
- expect(last_response.status).to eq(405)
47
- end
48
-
49
- it 'provides only the /nic/update URL' do
50
- authorize 'test', 'secret'
51
- get '/other/url'
52
- expect(last_response.status).to eq(404)
53
- end
54
-
55
- it 'requires the hostname query parameter' do
56
- authorize 'test', 'secret'
57
- get '/nic/update'
58
- expect(last_response).to be_ok
59
- expect(last_response.body).to eq('notfqdn')
60
- end
61
-
62
- it 'supports multiple hostnames in request' do
63
- authorize 'test', 'secret'
64
-
65
- get '/nic/update?hostname=foo.example.org,bar.example.org&myip=1.2.3.4'
66
- expect(last_response).to be_ok
67
- expect(last_response.body).to eq("good 1.2.3.4\ngood 1.2.3.4")
68
-
69
- get '/nic/update?hostname=foo.example.org,bar.example.org&myip=2001:db8::1'
70
- expect(last_response).to be_ok
71
- expect(last_response.body).to eq("good 2001:db8::1\ngood 2001:db8::1")
72
- end
73
-
74
- it 'rejects request if one hostname is invalid' do
75
- authorize 'test', 'secret'
76
-
77
- get '/nic/update?hostname=test'
78
- expect(last_response).to be_ok
79
- expect(last_response.body).to eq('notfqdn')
80
-
81
- get '/nic/update?hostname=test.example.com'
82
- expect(last_response).to be_ok
83
- expect(last_response.body).to eq('notfqdn')
84
-
85
- get '/nic/update?hostname=test.example.org.me'
86
- expect(last_response).to be_ok
87
- expect(last_response.body).to eq('notfqdn')
88
-
89
- get '/nic/update?hostname=foo.test.example.org'
90
- expect(last_response).to be_ok
91
- expect(last_response.body).to eq('notfqdn')
92
-
93
- get '/nic/update?hostname=in%20valid.example.org'
94
- expect(last_response).to be_ok
95
- expect(last_response.body).to eq('notfqdn')
96
-
97
- get '/nic/update?hostname=valid.example.org,in.valid.example.org'
98
- expect(last_response).to be_ok
99
- expect(last_response.body).to eq('notfqdn')
100
- end
101
-
102
- it 'rejects request if user does not own one hostname' do
103
- authorize 'test', 'secret'
104
-
105
- get '/nic/update?hostname=notmyhost.example.org'
106
- expect(last_response).to be_ok
107
- expect(last_response.body).to eq('nohost')
108
-
109
- get '/nic/update?hostname=foo.example.org,notmyhost.example.org'
110
- expect(last_response).to be_ok
111
- expect(last_response.body).to eq('nohost')
112
- end
113
-
114
- it 'updates a host on IP change' do
115
- authorize 'test', 'secret'
116
-
117
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4'
118
- expect(last_response).to be_ok
119
-
120
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.40'
121
- expect(last_response).to be_ok
122
- expect(last_response.body).to eq('good 1.2.3.40')
123
-
124
- get '/nic/update?hostname=foo.example.org&myip=2001:db8::1'
125
- expect(last_response).to be_ok
126
-
127
- get '/nic/update?hostname=foo.example.org&myip=2001:db8::10'
128
- expect(last_response).to be_ok
129
- expect(last_response.body).to eq('good 2001:db8::10')
130
- end
131
-
132
- it 'returns IP no change' do
133
- authorize 'test', 'secret'
134
-
135
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4'
136
- expect(last_response).to be_ok
137
-
138
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4'
139
- expect(last_response).to be_ok
140
- expect(last_response.body).to eq('nochg 1.2.3.4')
141
-
142
- get '/nic/update?hostname=foo.example.org&myip=2001:db8::1'
143
- expect(last_response).to be_ok
144
-
145
- get '/nic/update?hostname=foo.example.org&myip=2001:db8::1'
146
- expect(last_response).to be_ok
147
- expect(last_response.body).to eq('nochg 2001:db8::1')
148
- end
149
-
150
- it 'outputs IP status per hostname' do
151
- authorize 'test', 'secret'
152
-
153
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4'
154
- expect(last_response).to be_ok
155
- expect(last_response.body).to eq('good 1.2.3.4')
156
-
157
- get '/nic/update?hostname=foo.example.org,bar.example.org&myip=1.2.3.4'
158
- expect(last_response).to be_ok
159
- expect(last_response.body).to eq("nochg 1.2.3.4\ngood 1.2.3.4")
160
-
161
- get '/nic/update?hostname=foo.example.org&myip=2001:db8::1'
162
- expect(last_response).to be_ok
163
- expect(last_response.body).to eq('good 2001:db8::1')
164
-
165
- get '/nic/update?hostname=foo.example.org,bar.example.org&myip=2001:db8::1'
166
- expect(last_response).to be_ok
167
- expect(last_response.body).to eq("nochg 2001:db8::1\ngood 2001:db8::1")
168
- end
169
-
170
- it 'offlines a host' do
171
- authorize 'test', 'secret'
172
-
173
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4'
174
- expect(last_response).to be_ok
175
- expect(last_response.body).to eq('good 1.2.3.4')
176
-
177
- get '/nic/update?hostname=foo.example.org&offline=YES'
178
- expect(last_response).to be_ok
179
- expect(last_response.body).to eq('good ')
180
-
181
- get '/nic/update?hostname=foo.example.org&offline=YES'
182
- expect(last_response).to be_ok
183
- expect(last_response.body).to eq('nochg ')
184
-
185
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4'
186
- expect(last_response).to be_ok
187
- expect(last_response.body).to eq('good 1.2.3.4')
188
-
189
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4&offline=YES'
190
- expect(last_response).to be_ok
191
- expect(last_response.body).to eq('good ')
192
-
193
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4&offline=YES'
194
- expect(last_response).to be_ok
195
- expect(last_response.body).to eq('nochg ')
196
- end
197
-
198
- it 'uses clients remote IP address if myip not specified' do
199
- authorize 'test', 'secret'
200
- get '/nic/update?hostname=foo.example.org'
201
- expect(last_response).to be_ok
202
- expect(last_response.body).to eq('good 127.0.0.1')
203
- end
204
-
205
- it 'uses clients remote IP address from X-Real-IP header if behind proxy' do
206
- authorize 'test', 'secret'
207
-
208
- get '/nic/update?hostname=foo.example.org', '', 'HTTP_X_REAL_IP' => '10.0.0.1'
209
- expect(last_response).to be_ok
210
- expect(last_response.body).to eq('good 10.0.0.1')
211
-
212
- get '/nic/update?hostname=foo.example.org', '', 'HTTP_X_REAL_IP' => '2001:db8::1'
213
- expect(last_response).to be_ok
214
- expect(last_response.body).to eq('good 2001:db8::1')
215
- end
216
-
217
- it 'supports an IPv4 and an IPv6 address in one request' do
218
- authorize 'test', 'secret'
219
-
220
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4&myip6=2001:db8::1'
221
- expect(last_response).to be_ok
222
- expect(last_response.body).to eq('good 1.2.3.4 2001:db8::1')
223
-
224
- get '/nic/update?hostname=foo.example.org&myip=BROKENIP&myip6=2001:db8::1'
225
- expect(last_response).to be_ok
226
- expect(last_response.body).to eq('nohost')
227
-
228
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.4&myip6=BROKENIP'
229
- expect(last_response).to be_ok
230
- expect(last_response.body).to eq('nohost')
231
-
232
- get '/nic/update?hostname=foo.example.org&myip6=2001:db8::10'
233
- expect(last_response).to be_ok
234
- expect(last_response.body).to eq('nohost')
235
-
236
- get '/nic/update?hostname=foo.example.org&myip=1.2.3.40'
237
- expect(last_response).to be_ok
238
- expect(last_response.body).to eq('good 1.2.3.40')
239
- end
240
- end
data/spec/spec_helper.rb DELETED
@@ -1,8 +0,0 @@
1
-
2
- require 'rubygems'
3
- require 'bundler/setup'
4
- require 'rack/test'
5
-
6
- require 'dyndnsd'
7
- require 'support/dummy_database'
8
- require 'support/dummy_updater'
@@ -1,27 +0,0 @@
1
-
2
- require 'forwardable'
3
-
4
- module Dyndnsd
5
- class DummyDatabase
6
- extend Forwardable
7
-
8
- def_delegators :@db, :[], :[]=, :each, :has_key?
9
-
10
- def initialize(db_init)
11
- @db_init = db_init
12
- end
13
-
14
- def load
15
- @db = @db_init
16
- @db_hash = @db.hash
17
- end
18
-
19
- def save
20
- @db_hash = @db.hash
21
- end
22
-
23
- def changed?
24
- @db_hash != @db.hash
25
- end
26
- end
27
- end
@@ -1,10 +0,0 @@
1
-
2
- module Dyndnsd
3
- module Updater
4
- class Dummy
5
- def update(zone)
6
- # nothing
7
- end
8
- end
9
- end
10
- end