letsencrypt_webfaction 0.0.2 → 1.0.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 +4 -4
- data/.codeclimate.yml +24 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +6 -0
- data/CHANGELOG.md +11 -0
- data/LICENSE.md +21 -0
- data/README.md +42 -7
- data/config.defaults.yml +4 -1
- data/config.example.yml +3 -1
- data/exe/letsencrypt_webfaction +1 -1
- data/letsencrypt_webfaction.gemspec +2 -0
- data/lib/letsencrypt_webfaction.rb +1 -1
- data/lib/letsencrypt_webfaction/application.rb +11 -7
- data/lib/letsencrypt_webfaction/args_parser.rb +14 -2
- data/lib/letsencrypt_webfaction/emailer.rb +34 -0
- data/lib/letsencrypt_webfaction/instructions.rb +20 -7
- metadata +35 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ce33f9963c0f2f176f271677a4940058999553f
|
4
|
+
data.tar.gz: 0d3e010e9f36feeb6ad4b683614fd8bcfee88988
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97a8d46981d1a5d2252be5a832e6f9ec68be1d61864a3166a9f7272d7c246098176a64f9177e5529710b5ac7dd7a29bf381a62f994b2e8740c225f49945602a2
|
7
|
+
data.tar.gz: 675c9b21c9f794794f316a9194ea0edca89d7810b9ad02dc1e40e9f53a2c7c342f361b822dcafbde3e1530d3fc4a162d752a379e2aff1b72264717ac115e80e2
|
data/.codeclimate.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
---
|
2
|
+
engines:
|
3
|
+
duplication:
|
4
|
+
enabled: true
|
5
|
+
config:
|
6
|
+
languages:
|
7
|
+
- ruby
|
8
|
+
fixme:
|
9
|
+
enabled: true
|
10
|
+
rubocop:
|
11
|
+
enabled: true
|
12
|
+
checks:
|
13
|
+
Rubocop/Rails: false
|
14
|
+
ratings:
|
15
|
+
paths:
|
16
|
+
- "**.inc"
|
17
|
+
- "**.js"
|
18
|
+
- "**.jsx"
|
19
|
+
- "**.module"
|
20
|
+
- "**.php"
|
21
|
+
- "**.py"
|
22
|
+
- "**.rb"
|
23
|
+
exclude_paths:
|
24
|
+
- spec/
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -35,3 +35,9 @@ Style/Send:
|
|
35
35
|
# If you interpolate a literal, just include it in the string itself.
|
36
36
|
Lint/LiteralInInterpolation:
|
37
37
|
Enabled: true
|
38
|
+
|
39
|
+
# Personal preference. Makes the diffs smaller.
|
40
|
+
Style/TrailingCommaInLiteral:
|
41
|
+
EnforcedStyleForMultiline: consistent_comma
|
42
|
+
Style/TrailingCommaInArguments:
|
43
|
+
EnforcedStyleForMultiline: consistent_comma
|
data/CHANGELOG.md
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 William Johnston
|
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.
|
data/README.md
CHANGED
@@ -2,13 +2,45 @@
|
|
2
2
|
|
3
3
|
LetsEncrypt utility client for WebFaction hosts.
|
4
4
|
|
5
|
-
This tool simplifies the manual process of using LetsEncrypt on Webfaction hosts. It can be added to cron where it will validate your domains automatically, place the generated certificates in a common folder, and then email
|
5
|
+
This tool simplifies the manual process of using LetsEncrypt on Webfaction hosts. It can be added to cron where it will validate your domains automatically, place the generated certificates in a common folder, and then email the Webfaction support team to request installation, also notifying you.
|
6
6
|
|
7
7
|
[](https://travis-ci.org/will-in-wi/letsencrypt-webfaction)
|
8
8
|
|
9
|
+
[](https://badge.fury.io/rb/letsencrypt_webfaction)
|
10
|
+
|
11
|
+
[](https://codeclimate.com/github/will-in-wi/letsencrypt-webfaction)
|
12
|
+
|
9
13
|
## Installation
|
10
14
|
|
11
|
-
|
15
|
+
This utility works on [CentOS 6 and 7 boxes](https://docs.webfaction.com/user-guide/server.html#finding-your-server-s-operating-system). The CentOS 5 systems do not have a new enough OpenSSL to include the algorithms required. You may be able to make this work using rbenv and compiling openssl yourself.
|
16
|
+
|
17
|
+
You can install LetsEncrypt Webfaction using the system Ruby or using RBEnv.
|
18
|
+
|
19
|
+
### System Ruby
|
20
|
+
|
21
|
+
This is the simpler method and is preferred.
|
22
|
+
|
23
|
+
Run the following command to install:
|
24
|
+
|
25
|
+
```sh
|
26
|
+
GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib gem2.2 install letsencrypt_webfaction
|
27
|
+
```
|
28
|
+
|
29
|
+
Add the following to `~/.bash_profile`:
|
30
|
+
|
31
|
+
```sh
|
32
|
+
function letsencrypt_webfaction {
|
33
|
+
PATH=$PATH:$GEM_HOME/bin GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib ruby2.2 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction $*
|
34
|
+
}
|
35
|
+
```
|
36
|
+
|
37
|
+
Now, you can run `letsencrypt_webfaction` from the shell.
|
38
|
+
|
39
|
+
### RBEnv
|
40
|
+
|
41
|
+
This method is useful if you are already using RBEnv to manage Ruby.
|
42
|
+
|
43
|
+
Follow the instructions to [set up RBEnv](https://github.com/rbenv/rbenv) and [Ruby Build](https://github.com/rbenv/ruby-build#readme) on your WebFaction server.
|
12
44
|
|
13
45
|
Once you have done so, install Ruby 2.1+ (probably 2.3.0 at time of writing). Then set the local Ruby and install the Gem. Finally unset the local Ruby so that you don't run into problems.
|
14
46
|
|
@@ -22,7 +54,7 @@ Once you have done so, install Ruby 2.1+ (probably 2.3.0 at time of writing). Th
|
|
22
54
|
|
23
55
|
Basic example:
|
24
56
|
|
25
|
-
$ letsencrypt_webfaction --
|
57
|
+
$ letsencrypt_webfaction --account_email me@example.com --domains example.com,www.example.com --public ~/webapps/myapp/public_html/
|
26
58
|
|
27
59
|
To quickly get a list of parameters, you can call:
|
28
60
|
|
@@ -34,7 +66,10 @@ Normally, you will run the script manually once to get the certificate, and then
|
|
34
66
|
|
35
67
|
Your cron task could look something like:
|
36
68
|
|
37
|
-
|
69
|
+
# System Ruby Installation
|
70
|
+
0 4 1 */2 * PATH=$PATH:$GEM_HOME/bin GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib ruby2.2 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction --account_email you@example.com --domains example.com,www.example.com --public ~/webapps/myapp/
|
71
|
+
# RBEnv Installation
|
72
|
+
0 4 1 */2 * RBENV_ROOT=~/.rbenv RBENV_VERSION=2.3.0 ~/.rbenv/bin/rbenv exec letsencrypt_webfaction --account_email you@example.com --domains example.com,www.example.com --public ~/webapps/myapp/
|
38
73
|
|
39
74
|
This [would run](http://crontab.guru/#0_4_*_*/2_*) at 4 a.m. in Jan, Mar, May, Jul, Sep, and Nov. Certificates expire three months after issuance, so modify as desired.
|
40
75
|
|
@@ -56,9 +91,7 @@ This could be run automatically every two months.
|
|
56
91
|
|
57
92
|
When the code runs, it places verification files into a public directory, validates the domains with LetsEncrypt (or your ACME provider), and then dumps the signed certificate and private key into an output folder. By default, the output folder is `~/le_certs/`, inside which it will create `[domain_name]/[timestamp]/`.
|
58
93
|
|
59
|
-
After this is done, the utility will
|
60
|
-
|
61
|
-
If you use Cron, you should set `MAILTO=youremail@example.com` and `MAILFROM=username@servername.webfaction.com` at the top in order to receive the instructions. The [WebFaction docs](https://docs.webfaction.com/software/general.html#scheduling-tasks-cron) have more details about how to do this.
|
94
|
+
After this is done, the utility will email the cert installation request to Webfaction support and also copy you.
|
62
95
|
|
63
96
|
If you see messages containing SyntaxErrors, you are most likely using an old version of Ruby. This utility requires Ruby 2.1+.
|
64
97
|
|
@@ -78,6 +111,8 @@ To run the script directly from the repository, use:
|
|
78
111
|
|
79
112
|
To test certificate issuance, consider using the [LetsEncrypt staging server](https://community.letsencrypt.org/t/testing-against-the-lets-encrypt-staging-environment/6763). This doesn't have the 5 certs per domain every 7 days rate limit. You can add the `--endpoint https://acme-staging.api.letsencrypt.org/` parameter to do so.
|
80
113
|
|
114
|
+
You will probably also want to use the argument `--support_email ""` which will keep support from actually being contacted. Alternately, set the `support_email` address to be yourself.
|
115
|
+
|
81
116
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
82
117
|
|
83
118
|
To install this gem onto your local machine, run `bin/rake install`. To release a new version, update the version number in `lib/letsencrypt_webfaction.rb`, and then run `bin/rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). This project uses [Semantic Versioning](http://semver.org/).
|
data/config.defaults.yml
CHANGED
@@ -3,5 +3,8 @@ key_size: 4096
|
|
3
3
|
endpoint: 'https://acme-v01.api.letsencrypt.org/'
|
4
4
|
domains: []
|
5
5
|
public: ''
|
6
|
-
contact: ''
|
7
6
|
output_dir: '~/le_certs/'
|
7
|
+
support_email: 'support@webfaction.com'
|
8
|
+
account_email: ''
|
9
|
+
admin_notification_email: '' # Defaults to the value given in account_email.
|
10
|
+
letsencrypt_account_email: '' # Defaults to the value given in account_email.
|
data/config.example.yml
CHANGED
data/exe/letsencrypt_webfaction
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.required_ruby_version = '>= 2.1.0'
|
28
28
|
|
29
29
|
spec.add_runtime_dependency 'acme-client', '~> 0.3.0'
|
30
|
+
spec.add_runtime_dependency 'pony', '~> 1.11'
|
30
31
|
|
31
32
|
spec.add_development_dependency 'bundler', '~> 1.11'
|
32
33
|
spec.add_development_dependency 'rake', '~> 10.0'
|
@@ -34,4 +35,5 @@ Gem::Specification.new do |spec|
|
|
34
35
|
spec.add_development_dependency 'rubocop', '~> 0.37'
|
35
36
|
spec.add_development_dependency 'simplecov', '~> 0.11'
|
36
37
|
spec.add_development_dependency 'pry', '~> 0.10'
|
38
|
+
spec.add_development_dependency 'pry-byebug', '~> 3.3'
|
37
39
|
end
|
@@ -5,11 +5,12 @@ require 'letsencrypt_webfaction/args_parser'
|
|
5
5
|
require 'letsencrypt_webfaction/domain_validator'
|
6
6
|
require 'letsencrypt_webfaction/certificate_writer'
|
7
7
|
require 'letsencrypt_webfaction/instructions'
|
8
|
+
require 'letsencrypt_webfaction/emailer'
|
8
9
|
|
9
10
|
module LetsencryptWebfaction
|
10
11
|
class Application
|
11
|
-
def initialize
|
12
|
-
@options = LetsencryptWebfaction::ArgsParser.new(
|
12
|
+
def initialize(args)
|
13
|
+
@options = LetsencryptWebfaction::ArgsParser.new(args)
|
13
14
|
end
|
14
15
|
|
15
16
|
def run!
|
@@ -25,12 +26,16 @@ module LetsencryptWebfaction
|
|
25
26
|
# Write the obtained certificates.
|
26
27
|
certificate_writer.write!
|
27
28
|
|
28
|
-
#
|
29
|
-
|
29
|
+
# Send emails.
|
30
|
+
emailer.send!
|
30
31
|
end
|
31
32
|
|
32
33
|
private
|
33
34
|
|
35
|
+
def emailer
|
36
|
+
@emails ||= LetsencryptWebfaction::Emailer.new instructions, support_email: @options.support_email, account_email: @options.account_email, notification_email: @options.admin_notification_email
|
37
|
+
end
|
38
|
+
|
34
39
|
def instructions
|
35
40
|
@instructions ||= LetsencryptWebfaction::Instructions.new certificate_writer.output_dir, @options.domains
|
36
41
|
end
|
@@ -62,7 +67,7 @@ module LetsencryptWebfaction
|
|
62
67
|
|
63
68
|
def register_key!
|
64
69
|
# If the private key is not known to the server, we need to register it for the first time.
|
65
|
-
registration = client.register(contact: "mailto:#{@options.
|
70
|
+
registration = client.register(contact: "mailto:#{@options.letsencrypt_account_email}")
|
66
71
|
|
67
72
|
# You'll may need to agree to the term (that's up the to the server to require it or not but boulder does by default)
|
68
73
|
registration.agree_terms
|
@@ -70,8 +75,7 @@ module LetsencryptWebfaction
|
|
70
75
|
|
71
76
|
def validate_options!
|
72
77
|
return if @options.valid?
|
73
|
-
|
74
|
-
exit
|
78
|
+
raise ArgumentError, @options.errors.values.join("\n")
|
75
79
|
end
|
76
80
|
|
77
81
|
def private_key
|
@@ -15,10 +15,13 @@ module LetsencryptWebfaction
|
|
15
15
|
FIELDS = [
|
16
16
|
Field::IntegerField.new(:key_size, 'Size of private key (e.g. 4096)', [DefinedValuesValidator.new(VALID_KEY_SIZES)]),
|
17
17
|
Field.new(:endpoint, 'ACME endpoint (e.g. https://acme-v01.api.letsencrypt.org/)', [StringValidator.new]),
|
18
|
-
Field.new(:contact, 'Email address to notify on renewal', [StringValidator.new]),
|
19
18
|
Field::ListField.new(:domains, 'Comma separated list of domains. The first one will be the common name.', [ArrayValidator.new]),
|
20
19
|
Field.new(:public, 'Location on the filesystem served by the desired site (e.g. ~/webapps/myapp/public_html)', [StringValidator.new]),
|
21
|
-
Field.new(:output_dir, 'Location on the filesystem to which the certs will be saved.', [StringValidator.new])
|
20
|
+
Field.new(:output_dir, 'Location on the filesystem to which the certs will be saved.', [StringValidator.new]),
|
21
|
+
Field.new(:support_email, 'The email address of the ISP support.', []),
|
22
|
+
Field.new(:account_email, 'The email address associated with your account.', [StringValidator.new]),
|
23
|
+
Field.new(:admin_notification_email, 'The email address associated with your account. Defaults to the value of account_email.', []),
|
24
|
+
Field.new(:letsencrypt_account_email, 'The email address associated with your account. Defaults to the value of account_email.', []),
|
22
25
|
].freeze
|
23
26
|
|
24
27
|
# Set up getters.
|
@@ -97,6 +100,15 @@ module LetsencryptWebfaction
|
|
97
100
|
|
98
101
|
def parse!
|
99
102
|
opt_parser.parse!(@options)
|
103
|
+
|
104
|
+
# Set defaults from other fields.
|
105
|
+
if @admin_notification_email.nil? || @admin_notification_email == ''
|
106
|
+
@admin_notification_email = @account_email
|
107
|
+
end
|
108
|
+
|
109
|
+
if @letsencrypt_account_email.nil? || @letsencrypt_account_email == ''
|
110
|
+
@letsencrypt_account_email = @account_email
|
111
|
+
end
|
100
112
|
end
|
101
113
|
end
|
102
114
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'pony'
|
2
|
+
|
3
|
+
module LetsencryptWebfaction
|
4
|
+
class Emailer
|
5
|
+
SUBJECT_MESSAGE = 'New certificate installation'.freeze
|
6
|
+
|
7
|
+
def initialize(instructions, support_email: '', account_email: '', notification_email: '')
|
8
|
+
@instructions = instructions
|
9
|
+
|
10
|
+
raise Error, 'Missing account_email' if account_email == '' || account_email.nil?
|
11
|
+
raise Error, 'Missing notification_email' if notification_email == '' || notification_email.nil?
|
12
|
+
|
13
|
+
@support_email = support_email
|
14
|
+
@account_email = account_email
|
15
|
+
@notification_email = notification_email
|
16
|
+
end
|
17
|
+
|
18
|
+
def send!
|
19
|
+
send_to_support!
|
20
|
+
send_to_account!
|
21
|
+
end
|
22
|
+
|
23
|
+
def send_to_support!
|
24
|
+
return if @support_email.nil? || @support_email == ''
|
25
|
+
Pony.mail(to: @support_email, from: @account_email, subject: SUBJECT_MESSAGE, body: @instructions.instructions)
|
26
|
+
end
|
27
|
+
|
28
|
+
def send_to_account!
|
29
|
+
Pony.mail(to: @notification_email, from: @notification_email, subject: SUBJECT_MESSAGE, body: @instructions.full_message(support_email: @support_email != ''))
|
30
|
+
end
|
31
|
+
|
32
|
+
class Error < StandardError; end
|
33
|
+
end
|
34
|
+
end
|
@@ -5,17 +5,30 @@ module LetsencryptWebfaction
|
|
5
5
|
@domains = domains
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
9
|
-
'LetsEncrypt Webfaction has generated a new certificate for ' \
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
def context(support_email: true)
|
9
|
+
out = 'LetsEncrypt Webfaction has generated a new certificate for ' \
|
10
|
+
"#{to_sentence @domains}. The certificates have been placed in " \
|
11
|
+
"#{@output_dir}. "
|
12
|
+
|
13
|
+
out << if support_email
|
14
|
+
'WebFaction support has been contacted with the following message:'
|
15
|
+
else
|
16
|
+
'Go to https://help.webfaction.com, log in, and paste the ' \
|
17
|
+
'following text into a new ticket:'
|
18
|
+
end
|
19
|
+
|
20
|
+
out
|
21
|
+
end
|
22
|
+
|
23
|
+
def instructions
|
15
24
|
"Please apply the new certificate in #{@output_dir} to " \
|
16
25
|
"#{to_sentence @domains}. Thanks!"
|
17
26
|
end
|
18
27
|
|
28
|
+
def full_message(support_email: true)
|
29
|
+
context(support_email: support_email) + "\n\n" + instructions
|
30
|
+
end
|
31
|
+
|
19
32
|
private
|
20
33
|
|
21
34
|
# Borrowed (with simplifications) from ActiveSupport.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: letsencrypt_webfaction
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Johnston
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: acme-client
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.3.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pony
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.11'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.11'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +122,20 @@ dependencies:
|
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0.10'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry-byebug
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.3'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '3.3'
|
111
139
|
description: A tool to simplify the manual process of using LetsEncrypt on Webfaction
|
112
140
|
hosts. It can be added to cron where it will validate your domains automatically,
|
113
141
|
place the generated certs in a common folder, and then email you directions and
|
@@ -119,11 +147,14 @@ executables:
|
|
119
147
|
extensions: []
|
120
148
|
extra_rdoc_files: []
|
121
149
|
files:
|
150
|
+
- ".codeclimate.yml"
|
122
151
|
- ".gitignore"
|
123
152
|
- ".rspec"
|
124
153
|
- ".rubocop.yml"
|
125
154
|
- ".travis.yml"
|
155
|
+
- CHANGELOG.md
|
126
156
|
- Gemfile
|
157
|
+
- LICENSE.md
|
127
158
|
- README.md
|
128
159
|
- Rakefile
|
129
160
|
- bin/console
|
@@ -144,6 +175,7 @@ files:
|
|
144
175
|
- lib/letsencrypt_webfaction/args_parser/string_validator.rb
|
145
176
|
- lib/letsencrypt_webfaction/certificate_writer.rb
|
146
177
|
- lib/letsencrypt_webfaction/domain_validator.rb
|
178
|
+
- lib/letsencrypt_webfaction/emailer.rb
|
147
179
|
- lib/letsencrypt_webfaction/instructions.rb
|
148
180
|
homepage: https://github.com/will-in-wi/letsencrypt-webfaction
|
149
181
|
licenses:
|
@@ -165,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
197
|
version: '0'
|
166
198
|
requirements: []
|
167
199
|
rubyforge_project:
|
168
|
-
rubygems_version: 2.5.
|
200
|
+
rubygems_version: 2.5.2
|
169
201
|
signing_key:
|
170
202
|
specification_version: 4
|
171
203
|
summary: LetsEncrypt utility client for WebFaction hosts.
|