potluck-nginx 0.0.5 → 0.0.7
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 +4 -4
- data/LICENSE +1 -1
- data/VERSION +1 -0
- data/lib/potluck/nginx/ssl.rb +9 -10
- data/lib/potluck/nginx/version.rb +7 -0
- data/lib/potluck/nginx.rb +96 -97
- metadata +7 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4fc8a1ec53a80c8a2914316ea35e955a79851fde0c32b59c2d26b22c573e4d3f
|
|
4
|
+
data.tar.gz: 1f5beb340d4e719f11f98806a7d96844e9c71b11aef0de8441de516d170c0a24
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2852025b7fa30b945c8450b23d9efbd725b5abf3dcc41875dff7a860e85a182074c7e47ea3bf8cf7442e7ebab0a715d56296cea541b5a1c9ad9906369aeaa3fc
|
|
7
|
+
data.tar.gz: 99cef178c6195136c566f55948b5b64068a56ffaa918f4bdea05c7f193d9161ad05796a7a33a3c4dfc0637d1ecb491a818dac35c36516c6a241b581a119f999e
|
data/LICENSE
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright 2021 Nate Pickens
|
|
1
|
+
Copyright 2021-2022 Nate Pickens
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
4
4
|
documentation files (the "Software"), to deal in the Software without restriction, including without
|
data/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0.7
|
data/lib/potluck/nginx/ssl.rb
CHANGED
|
@@ -49,8 +49,7 @@ module Potluck
|
|
|
49
49
|
@auto_generated = !crt_file && !key_file && !dhparam_file
|
|
50
50
|
|
|
51
51
|
if !@auto_generated && (!crt_file || !key_file || !dhparam_file)
|
|
52
|
-
raise(ArgumentError
|
|
53
|
-
'dhparam_file'))
|
|
52
|
+
raise(ArgumentError, 'Must supply values for all three or none: crt_file, key_file, dhparam_file')
|
|
54
53
|
end
|
|
55
54
|
|
|
56
55
|
@csr_file = File.join(@dir, "#{@host}.csr").freeze
|
|
@@ -74,10 +73,10 @@ module Potluck
|
|
|
74
73
|
#
|
|
75
74
|
def ensure_files
|
|
76
75
|
return if !@auto_generated || (
|
|
77
|
-
File.
|
|
78
|
-
File.
|
|
79
|
-
File.
|
|
80
|
-
File.
|
|
76
|
+
File.exist?(@csr_file) &&
|
|
77
|
+
File.exist?(@key_file) &&
|
|
78
|
+
File.exist?(@crt_file) &&
|
|
79
|
+
File.exist?(@dhparam_file) &&
|
|
81
80
|
(Time.parse(
|
|
82
81
|
@nginx.run("openssl x509 -enddate -noout -in #{@crt_file}").sub('notAfter=', '')
|
|
83
82
|
) - Time.now) >= CERT_RENEW_DAYS * 24 * 60 * 60
|
|
@@ -85,13 +84,13 @@ module Potluck
|
|
|
85
84
|
|
|
86
85
|
@nginx.log('Generating SSL files...')
|
|
87
86
|
|
|
88
|
-
@nginx.run("openssl genrsa -out #{@key_file} 4096",
|
|
87
|
+
@nginx.run("openssl genrsa -out #{@key_file} 4096", capture_stderr: false)
|
|
89
88
|
@nginx.run("openssl req -out #{@csr_file} -key #{@key_file} -new -sha256 -config /dev/stdin <<< "\
|
|
90
|
-
"'#{openssl_config}'",
|
|
89
|
+
"'#{openssl_config}'", capture_stderr: false)
|
|
91
90
|
@nginx.run("openssl x509 -in #{@csr_file} -out #{@crt_file} -signkey #{@key_file} -days "\
|
|
92
91
|
"#{CERT_DAYS} -req -sha256 -extensions req_ext -extfile /dev/stdin <<< '#{openssl_config}'",
|
|
93
|
-
|
|
94
|
-
@nginx.run("openssl dhparam -out #{@dhparam_file} 2048",
|
|
92
|
+
capture_stderr: false)
|
|
93
|
+
@nginx.run("openssl dhparam -out #{@dhparam_file} 2048", capture_stderr: false)
|
|
95
94
|
|
|
96
95
|
if IS_MACOS
|
|
97
96
|
@nginx.log('Adding cert to keychain...')
|
data/lib/potluck/nginx.rb
CHANGED
|
@@ -4,6 +4,7 @@ require('fileutils')
|
|
|
4
4
|
require('potluck')
|
|
5
5
|
require_relative('nginx/ssl')
|
|
6
6
|
require_relative('nginx/util')
|
|
7
|
+
require_relative('nginx/version')
|
|
7
8
|
|
|
8
9
|
module Potluck
|
|
9
10
|
##
|
|
@@ -56,7 +57,7 @@ module Potluck
|
|
|
56
57
|
def initialize(hosts, port, subdomains: nil, ssl: nil, one_host: false, www: nil, multiple_slashes: nil,
|
|
57
58
|
multiple_question_marks: nil, trailing_slash: nil, trailing_question_mark: nil, config: {},
|
|
58
59
|
ensure_host_entries: false, **args)
|
|
59
|
-
if args[:manage] && !args[:manage].kind_of?(Hash) && !launchctl?
|
|
60
|
+
if args[:manage] && !args[:manage].kind_of?(Hash) && !self.class.launchctl?
|
|
60
61
|
args[:manage] = NON_LAUNCHCTL_COMMANDS
|
|
61
62
|
end
|
|
62
63
|
|
|
@@ -138,6 +139,98 @@ module Potluck
|
|
|
138
139
|
self.class.to_nginx_config(config)
|
|
139
140
|
end
|
|
140
141
|
|
|
142
|
+
##
|
|
143
|
+
# Content of the launchctl plist file.
|
|
144
|
+
#
|
|
145
|
+
def self.plist
|
|
146
|
+
super(
|
|
147
|
+
<<~EOS
|
|
148
|
+
<key>ProgramArguments</key>
|
|
149
|
+
<array>
|
|
150
|
+
<string>#{HOMEBREW_PREFIX}/opt/nginx/bin/nginx</string>
|
|
151
|
+
<string>-g</string>
|
|
152
|
+
<string>daemon off;</string>
|
|
153
|
+
</array>
|
|
154
|
+
<key>StandardOutPath</key>
|
|
155
|
+
<string>#{HOMEBREW_PREFIX}/var/log/nginx/access.log</string>
|
|
156
|
+
<key>StandardErrorPath</key>
|
|
157
|
+
<string>#{HOMEBREW_PREFIX}/var/log/nginx/error.log</string>
|
|
158
|
+
EOS
|
|
159
|
+
)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
##
|
|
163
|
+
# Converts a hash to an Nginx configuration file content string. Keys should be strings and values
|
|
164
|
+
# either strings or hashes. A +nil+ value in a hash will result in that key-value pair being omitted.
|
|
165
|
+
#
|
|
166
|
+
# * +hash+ - Hash to convert to the string content of an Nginx configuration file.
|
|
167
|
+
# * +indent+ - Number of spaces to indent; used when the method is called recursively and should not be
|
|
168
|
+
# set explicitly (optional, default: 0).
|
|
169
|
+
# * +repeat+ - Value to prepend to each entry of the hash; used when the method is called recursively
|
|
170
|
+
# and should not be set explicitly (optional).
|
|
171
|
+
#
|
|
172
|
+
# Symbol keys in hashes are used as special directives. Including <tt>repeat: true</tt> will cause the
|
|
173
|
+
# parent hash's key for the child hash to be prefixed to each line of the output. Example:
|
|
174
|
+
#
|
|
175
|
+
# {
|
|
176
|
+
# # ...
|
|
177
|
+
#
|
|
178
|
+
# 'add_header' => {
|
|
179
|
+
# repeat: true,
|
|
180
|
+
# 'X-Frame-Options' => 'DENY',
|
|
181
|
+
# 'X-Content-Type-Options' => 'nosniff',
|
|
182
|
+
# }
|
|
183
|
+
# }
|
|
184
|
+
#
|
|
185
|
+
# Result:
|
|
186
|
+
#
|
|
187
|
+
# # ...
|
|
188
|
+
#
|
|
189
|
+
# add_header X-Frame-Options DENY;
|
|
190
|
+
# add_header X-Content-Type-Options nosniff;
|
|
191
|
+
#
|
|
192
|
+
# A hash containing <tt>raw: '...'</tt> can be used to include a raw chunk of text rather than key-value
|
|
193
|
+
# pairs. Example:
|
|
194
|
+
#
|
|
195
|
+
# {
|
|
196
|
+
# # ...
|
|
197
|
+
#
|
|
198
|
+
# 'location /' => {
|
|
199
|
+
# raw: """
|
|
200
|
+
# if ($scheme = https) { ... }
|
|
201
|
+
# if ($host ~ ^www.) { ... }
|
|
202
|
+
# """,
|
|
203
|
+
# }
|
|
204
|
+
# }
|
|
205
|
+
#
|
|
206
|
+
# Result:
|
|
207
|
+
#
|
|
208
|
+
# location / {
|
|
209
|
+
# if ($scheme = https) { ... }
|
|
210
|
+
# if ($host ~ ^www.) { ... }
|
|
211
|
+
# }
|
|
212
|
+
#
|
|
213
|
+
def self.to_nginx_config(hash, indent: 0, repeat: nil)
|
|
214
|
+
hash.each_with_object(+'') do |(k, v), config|
|
|
215
|
+
next if v.nil?
|
|
216
|
+
next if k == :repeat
|
|
217
|
+
|
|
218
|
+
config << (
|
|
219
|
+
if v.kind_of?(Hash)
|
|
220
|
+
if v[:repeat]
|
|
221
|
+
to_nginx_config(v, indent: indent, repeat: k)
|
|
222
|
+
else
|
|
223
|
+
"#{' ' * indent}#{k} {\n#{to_nginx_config(v, indent: indent + 2)}#{' ' * indent}}\n"
|
|
224
|
+
end
|
|
225
|
+
elsif k == :raw
|
|
226
|
+
"#{v.gsub(/^(?=.)/, ' ' * indent)}\n\n"
|
|
227
|
+
else
|
|
228
|
+
"#{' ' * indent}#{"#{repeat} " if repeat}#{k}#{" #{v}" unless v == true};\n"
|
|
229
|
+
end
|
|
230
|
+
)
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
141
234
|
private
|
|
142
235
|
|
|
143
236
|
##
|
|
@@ -259,9 +352,7 @@ module Potluck
|
|
|
259
352
|
# Writes the Nginx configuration to the (inactive) configuration file.
|
|
260
353
|
#
|
|
261
354
|
def write_config
|
|
262
|
-
File.
|
|
263
|
-
file.write(config_file_content)
|
|
264
|
-
end
|
|
355
|
+
File.write(@config_file_inactive, config_file_content)
|
|
265
356
|
end
|
|
266
357
|
|
|
267
358
|
##
|
|
@@ -275,7 +366,7 @@ module Potluck
|
|
|
275
366
|
# Renames the active Nginx configuration file to its inactive name.
|
|
276
367
|
#
|
|
277
368
|
def deactivate_config
|
|
278
|
-
FileUtils.mv(@config_file_active, @config_file_inactive) if File.
|
|
369
|
+
FileUtils.mv(@config_file_active, @config_file_inactive) if File.exist?(@config_file_active)
|
|
279
370
|
end
|
|
280
371
|
|
|
281
372
|
##
|
|
@@ -315,97 +406,5 @@ module Potluck
|
|
|
315
406
|
"\\1\\2\\3include #{ACTIVE_CONFIG_PATTERN};\n\n\\3"))
|
|
316
407
|
end
|
|
317
408
|
end
|
|
318
|
-
|
|
319
|
-
##
|
|
320
|
-
# Converts a hash to an Nginx configuration file content string. Keys should be strings and values
|
|
321
|
-
# either strings or hashes. A +nil+ value in a hash will result in that key-value pair being omitted.
|
|
322
|
-
#
|
|
323
|
-
# * +hash+ - Hash to convert to the string content of an Nginx configuration file.
|
|
324
|
-
# * +indent+ - Number of spaces to indent; used when the method is called recursively and should not be
|
|
325
|
-
# set explicitly (optional, default: 0).
|
|
326
|
-
# * +repeat+ - Value to prepend to each entry of the hash; used when the method is called recursively
|
|
327
|
-
# and should not be set explicitly (optional).
|
|
328
|
-
#
|
|
329
|
-
# Symbol keys in hashes are used as special directives. Including <tt>repeat: true</tt> will cause the
|
|
330
|
-
# parent hash's key for the child hash to be prefixed to each line of the output. Example:
|
|
331
|
-
#
|
|
332
|
-
# {
|
|
333
|
-
# # ...
|
|
334
|
-
#
|
|
335
|
-
# 'add_header' => {
|
|
336
|
-
# repeat: true,
|
|
337
|
-
# 'X-Frame-Options' => 'DENY',
|
|
338
|
-
# 'X-Content-Type-Options' => 'nosniff',
|
|
339
|
-
# }
|
|
340
|
-
# }
|
|
341
|
-
#
|
|
342
|
-
# Result:
|
|
343
|
-
#
|
|
344
|
-
# # ...
|
|
345
|
-
#
|
|
346
|
-
# add_header X-Frame-Options DENY;
|
|
347
|
-
# add_header X-Content-Type-Options nosniff;
|
|
348
|
-
#
|
|
349
|
-
# A hash containing <tt>raw: '...'</tt> can be used to include a raw chunk of text rather than key-value
|
|
350
|
-
# pairs. Example:
|
|
351
|
-
#
|
|
352
|
-
# {
|
|
353
|
-
# # ...
|
|
354
|
-
#
|
|
355
|
-
# 'location /' => {
|
|
356
|
-
# raw: """
|
|
357
|
-
# if ($scheme = https) { ... }
|
|
358
|
-
# if ($host ~ ^www.) { ... }
|
|
359
|
-
# """,
|
|
360
|
-
# }
|
|
361
|
-
# }
|
|
362
|
-
#
|
|
363
|
-
# Result:
|
|
364
|
-
#
|
|
365
|
-
# location / {
|
|
366
|
-
# if ($scheme = https) { ... }
|
|
367
|
-
# if ($host ~ ^www.) { ... }
|
|
368
|
-
# }
|
|
369
|
-
#
|
|
370
|
-
def self.to_nginx_config(hash, indent: 0, repeat: nil)
|
|
371
|
-
hash.each_with_object(+'') do |(k, v), config|
|
|
372
|
-
next if v.nil?
|
|
373
|
-
next if k == :repeat
|
|
374
|
-
|
|
375
|
-
config << (
|
|
376
|
-
if v.kind_of?(Hash)
|
|
377
|
-
if v[:repeat]
|
|
378
|
-
to_nginx_config(v, indent: indent, repeat: k)
|
|
379
|
-
else
|
|
380
|
-
"#{' ' * indent}#{k} {\n#{to_nginx_config(v, indent: indent + 2)}#{' ' * indent}}\n"
|
|
381
|
-
end
|
|
382
|
-
elsif k == :raw
|
|
383
|
-
"#{v.gsub(/^(?=.)/, ' ' * indent)}\n\n"
|
|
384
|
-
else
|
|
385
|
-
"#{' ' * indent}#{"#{repeat} " if repeat}#{k}#{" #{v}" unless v == true};\n"
|
|
386
|
-
end
|
|
387
|
-
)
|
|
388
|
-
end
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
##
|
|
392
|
-
# Content of the launchctl plist file.
|
|
393
|
-
#
|
|
394
|
-
def self.plist
|
|
395
|
-
super(
|
|
396
|
-
<<~EOS
|
|
397
|
-
<key>ProgramArguments</key>
|
|
398
|
-
<array>
|
|
399
|
-
<string>/usr/local/opt/nginx/bin/nginx</string>
|
|
400
|
-
<string>-g</string>
|
|
401
|
-
<string>daemon off;</string>
|
|
402
|
-
</array>
|
|
403
|
-
<key>StandardOutPath</key>
|
|
404
|
-
<string>/usr/local/var/log/nginx/access.log</string>
|
|
405
|
-
<key>StandardErrorPath</key>
|
|
406
|
-
<string>/usr/local/var/log/nginx/error.log</string>
|
|
407
|
-
EOS
|
|
408
|
-
)
|
|
409
|
-
end
|
|
410
409
|
end
|
|
411
410
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: potluck-nginx
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nate Pickens
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-03-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: potluck
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - '='
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.0.
|
|
19
|
+
version: 0.0.7
|
|
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.0.
|
|
26
|
+
version: 0.0.7
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -67,9 +67,11 @@ extra_rdoc_files: []
|
|
|
67
67
|
files:
|
|
68
68
|
- LICENSE
|
|
69
69
|
- README.md
|
|
70
|
+
- VERSION
|
|
70
71
|
- lib/potluck/nginx.rb
|
|
71
72
|
- lib/potluck/nginx/ssl.rb
|
|
72
73
|
- lib/potluck/nginx/util.rb
|
|
74
|
+
- lib/potluck/nginx/version.rb
|
|
73
75
|
homepage: https://github.com/npickens/potluck/tree/master/potluck-nginx
|
|
74
76
|
licenses:
|
|
75
77
|
- MIT
|
|
@@ -92,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
92
94
|
- !ruby/object:Gem::Version
|
|
93
95
|
version: '0'
|
|
94
96
|
requirements: []
|
|
95
|
-
rubygems_version: 3.
|
|
97
|
+
rubygems_version: 3.3.7
|
|
96
98
|
signing_key:
|
|
97
99
|
specification_version: 4
|
|
98
100
|
summary: A Ruby manager for Nginx.
|