letscert 0.4.4 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/Gemfile +1 -1
- data/letscert.gemspec +1 -1
- data/lib/letscert/certificate.rb +8 -3
- data/lib/letscert/io_plugins/account_key.rb +1 -1
- data/lib/letscert/io_plugins/cert_file.rb +2 -2
- data/lib/letscert/io_plugins/chain_file.rb +1 -1
- data/lib/letscert/io_plugins/full_chain_file.rb +1 -1
- data/lib/letscert/io_plugins/key_file.rb +2 -2
- data/lib/letscert/io_plugins/openssl_io_plugin.rb +1 -4
- data/lib/letscert/runner.rb +2 -1
- data/lib/letscert/valid_time.rb +88 -0
- data/lib/letscert/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +5 -5
- metadata.gz.sig +0 -0
- data/lib/letscert/runner/valid_time.rb +0 -69
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9713b8f8c57715a49c9a47ee496be861b140605e
|
4
|
+
data.tar.gz: b066af17d583c2a87e246729fe4ec52478b529b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf1ee72bfb5f7e348ab4dbe35a674e2c723e8004f241a28a705787d9947ab1d1abe1fd0b8788d84f3b7c8734ccd34f6cc6b44b1513f1f5c239b788506a757410
|
7
|
+
data.tar.gz: b2bf80554770b4545bf343b12676412b6074979dc92d6e9966ac7bdc9922bef503afa201dd538d20f187f7146f4388ff9ecadab073aec0019dcd824e4f6963bd
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/Gemfile
CHANGED
data/letscert.gemspec
CHANGED
data/lib/letscert/certificate.rb
CHANGED
@@ -201,6 +201,7 @@ module LetsCert
|
|
201
201
|
def check_roots(roots)
|
202
202
|
no_roots = roots.select { |_k, v| v.nil? }
|
203
203
|
|
204
|
+
# rubocop:disable Style/GuardClause
|
204
205
|
unless no_roots.empty?
|
205
206
|
raise Error, 'root for the following domain(s) are not specified: ' \
|
206
207
|
"#{no_roots.keys.join(', ')}.\nTry --default_root or " \
|
@@ -288,10 +289,14 @@ module LetsCert
|
|
288
289
|
def renewal_necessary?(valid_min)
|
289
290
|
now = Time.now.utc
|
290
291
|
diff = (@cert.not_after - now).to_i
|
291
|
-
logger.debug { "Certificate expires in #{diff}s on #{@cert.not_after}" \
|
292
|
-
" (relative to #{now})" }
|
293
292
|
|
294
|
-
diff < valid_min
|
293
|
+
if diff < valid_min
|
294
|
+
true
|
295
|
+
else
|
296
|
+
logger.info { "Certificate expires in #{ValidTime.time_in_words diff}" \
|
297
|
+
" on #{@cert.not_after} (relative to #{now})" }
|
298
|
+
false
|
299
|
+
end
|
295
300
|
end
|
296
301
|
|
297
302
|
# Generate new certificate for given domains with existing private key
|
@@ -32,10 +32,7 @@ module LetsCert
|
|
32
32
|
# @param [:pem,:der] type
|
33
33
|
# @raise [ArgumentError] unsupported type
|
34
34
|
def initialize(name, type)
|
35
|
-
|
36
|
-
when :pem
|
37
|
-
when :der
|
38
|
-
else
|
35
|
+
unless [:pem, :der].include? type
|
39
36
|
raise ArgumentError, 'type should be :pem or :der'
|
40
37
|
end
|
41
38
|
|
data/lib/letscert/runner.rb
CHANGED
@@ -25,8 +25,8 @@ require 'fileutils'
|
|
25
25
|
|
26
26
|
require_relative 'io_plugin'
|
27
27
|
require_relative 'certificate'
|
28
|
+
require_relative 'valid_time'
|
28
29
|
require_relative 'runner/logger_formatter'
|
29
|
-
require_relative 'runner/valid_time'
|
30
30
|
|
31
31
|
module LetsCert
|
32
32
|
|
@@ -105,6 +105,7 @@ module LetsCert
|
|
105
105
|
# @raise [OptionParser::InvalidOption] on unrecognized or malformed option
|
106
106
|
# @return [void]
|
107
107
|
# rubocop:disable Metrics/MethodLength
|
108
|
+
# rubocop:disable Metrics/BlockLength
|
108
109
|
def parse_options
|
109
110
|
@opt_parser = OptionParser.new do |opts|
|
110
111
|
opts.banner = 'Usage: lestcert [options]'
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
#
|
3
|
+
# Copyright (c) 2016 Sylvain Daubert
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
# SOFTWARE.
|
22
|
+
module LetsCert
|
23
|
+
|
24
|
+
# Class used to process validation time from String.
|
25
|
+
# @author Sylvain Daubert
|
26
|
+
class ValidTime
|
27
|
+
|
28
|
+
# Number of seconds in one minute
|
29
|
+
SECONDS_IN_ONE_MINUTE = 60
|
30
|
+
# Number of seconds in one hour
|
31
|
+
SECONDS_IN_ONE_HOUR = 60 * 60
|
32
|
+
# Number of seconds in one day
|
33
|
+
SECONDS_IN_ONE_DAY = 24 * 60 * 60
|
34
|
+
|
35
|
+
# Get time in words (e.g. xx days or xx hours)
|
36
|
+
# @param [Integer] seconds
|
37
|
+
# @return [String]
|
38
|
+
def self.time_in_words(seconds)
|
39
|
+
if seconds < SECONDS_IN_ONE_MINUTE
|
40
|
+
'%u seconds' % seconds
|
41
|
+
elsif seconds < SECONDS_IN_ONE_HOUR
|
42
|
+
'about %u minutes' % (seconds / SECONDS_IN_ONE_MINUTE)
|
43
|
+
elsif seconds < SECONDS_IN_ONE_DAY
|
44
|
+
'about %u hours' % (seconds / SECONDS_IN_ONE_HOUR)
|
45
|
+
else
|
46
|
+
'about %u days' % (seconds / SECONDS_IN_ONE_DAY)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# @param [String] str time string. May be:
|
51
|
+
# * an integer -> time in seconds
|
52
|
+
# * an integer plus a letter:
|
53
|
+
# * 30m: 30 minutes,
|
54
|
+
# * 30h: 30 hours,
|
55
|
+
# * 30d: 30 days.
|
56
|
+
def initialize(str)
|
57
|
+
m = str.match(/^(\d+)([mhd])?$/)
|
58
|
+
if m
|
59
|
+
@seconds = case m[2]
|
60
|
+
when nil
|
61
|
+
m[1].to_i
|
62
|
+
when 'm'
|
63
|
+
m[1].to_i * SECONDS_IN_ONE_MINUTE
|
64
|
+
when 'h'
|
65
|
+
m[1].to_i * SECONDS_IN_ONE_HOUR
|
66
|
+
when 'd'
|
67
|
+
m[1].to_i * SECONDS_IN_ONE_DAY
|
68
|
+
end
|
69
|
+
else
|
70
|
+
raise OptionParser::InvalidArgument,
|
71
|
+
"invalid argument: valid-min #{str}"
|
72
|
+
end
|
73
|
+
@string = str
|
74
|
+
end
|
75
|
+
|
76
|
+
# Get time in seconds
|
77
|
+
# @return [Integer]
|
78
|
+
def to_seconds
|
79
|
+
@seconds
|
80
|
+
end
|
81
|
+
|
82
|
+
# Get time as string
|
83
|
+
# @return [String]
|
84
|
+
def to_s
|
85
|
+
@string
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/lib/letscert/version.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: letscert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Daubert
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
dMi8WSKt03lfzyxIqZseBwVYYn+XMlzCcJLXCUgZXHcBRRRDH5wGDqOqXjL25b2O
|
32
32
|
6m3JJngqkCFrOw==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2016-11-
|
34
|
+
date: 2016-11-21 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: acme-client
|
@@ -39,14 +39,14 @@ dependencies:
|
|
39
39
|
requirements:
|
40
40
|
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.
|
42
|
+
version: 0.5.0
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.
|
49
|
+
version: 0.5.0
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
name: bundler
|
52
52
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,7 +164,7 @@ files:
|
|
164
164
|
- lib/letscert/loggable.rb
|
165
165
|
- lib/letscert/runner.rb
|
166
166
|
- lib/letscert/runner/logger_formatter.rb
|
167
|
-
- lib/letscert/
|
167
|
+
- lib/letscert/valid_time.rb
|
168
168
|
- lib/letscert/version.rb
|
169
169
|
homepage: https://github.com/sdaubert/letscert
|
170
170
|
licenses:
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# The MIT License (MIT)
|
2
|
-
#
|
3
|
-
# Copyright (c) 2016 Sylvain Daubert
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in all
|
13
|
-
# copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
-
# SOFTWARE.
|
22
|
-
module LetsCert
|
23
|
-
class Runner
|
24
|
-
|
25
|
-
# Class used to process validation time from String.
|
26
|
-
# @author Sylvain Daubert
|
27
|
-
class ValidTime
|
28
|
-
|
29
|
-
# @param [String] str time string. May be:
|
30
|
-
# * an integer -> time in seconds
|
31
|
-
# * an integer plus a letter:
|
32
|
-
# * 30m: 30 minutes,
|
33
|
-
# * 30h: 30 hours,
|
34
|
-
# * 30d: 30 days.
|
35
|
-
def initialize(str)
|
36
|
-
m = str.match(/^(\d+)([mhd])?$/)
|
37
|
-
if m
|
38
|
-
@seconds = case m[2]
|
39
|
-
when nil
|
40
|
-
m[1].to_i
|
41
|
-
when 'm'
|
42
|
-
m[1].to_i * 60
|
43
|
-
when 'h'
|
44
|
-
m[1].to_i * 60 * 60
|
45
|
-
when 'd'
|
46
|
-
m[1].to_i * 24 * 60 * 60
|
47
|
-
end
|
48
|
-
else
|
49
|
-
raise OptionParser::InvalidArgument,
|
50
|
-
"invalid argument: --valid-min #{str}"
|
51
|
-
end
|
52
|
-
@string = str
|
53
|
-
end
|
54
|
-
|
55
|
-
# Get time in seconds
|
56
|
-
# @return [Integer]
|
57
|
-
def to_seconds
|
58
|
-
@seconds
|
59
|
-
end
|
60
|
-
|
61
|
-
# Get time as string
|
62
|
-
# @return [String]
|
63
|
-
def to_s
|
64
|
-
@string
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
end
|