letsencrypt_webfaction 3.1.1 → 4.0.2

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
  SHA256:
3
- metadata.gz: 460dcdc6c596f6caf4586a07bd6a26c9a1a2711efeecfb6f71a90df8b425331a
4
- data.tar.gz: e9e95a4a9d6d91a0f84dbe9f13334e9534a10ce338f6ddd5dca3b2bb8f9966f8
3
+ metadata.gz: ef1b9fb8a70fb210d300ae1d935498127533ada35554769a9def621471f1796e
4
+ data.tar.gz: 5a43d8bd43ea051733aaadc427406cf73d38c5658ad2cbbaf40bf016cc57d55d
5
5
  SHA512:
6
- metadata.gz: e3318423279477c29334d843018500245931f57defb23ec066a87105658475f59af3997040cc79986509506801b12ac715483dcdfe82ec5421a846486b997f5f
7
- data.tar.gz: 0c51bbae7d41b697fbde485f825eb31709b381fd1314fef2fbbfddbd4c573886f6d5b4d2c2d64baee3b25deca1b6988b9d843740c8ee40c48b14f80525b8c9d9
6
+ metadata.gz: 7137d662565e1500b2fc184ffba6e1ba4eff4de8537bd06bb221d9a84f4f3f0ec9a84626b044c50a9037cc7ac413c58544c96aa546cf0b9ebf732d31cb563565
7
+ data.tar.gz: b2f5ad87fccd62fbf07db029918f8d8d49435b3984eec8a27791ff0369740f710d86561240cbfb4f5664024ac81ec081e77ec3ac9f2454a6ba8c6c5b04c941a5
@@ -1,2 +1 @@
1
- ҝ1���U�ѝ����f��I�!��wyQ��*%�}��eUo�ś �-Ͳ���8k����Şƫ����)�����IxR0D��`��Ԭ� �Ɵ{1��擠����X{�d�:k>�T69������Q(] 1�`
2
- �7
3
- �;¶�kg�xk1W��Z�5}�&��Fƚ�Vd�Z=e{��=�3� ��J���J�0�/��2�f�kw�KM��[�^�
1
+ ~T�� ��jʙ���ɴ�6LS��y��ٞ�ܱd��?���`oBv�FC|�-8ZR�s3,En�:m�?��?��Zt�[j,yEk��;�����[,��i/��IO��� ��3[YiA�&Tn�f8���@��zX��%8ܗ��|�%m(8�Q�6w��f���~4����~T#�8�A�;�.E����]�th�[���-����'ֆ��%:��_�:�[ϝ�>�+Nio�;�C%1W�Ӯ��4;<
data.tar.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -16,3 +16,7 @@
16
16
 
17
17
  # Ignore spec next-failure file.
18
18
  /spec/.examples.txt
19
+
20
+ /.ruby-version
21
+
22
+ /spec/tmp
@@ -1,12 +1,14 @@
1
+ require: rubocop-performance
2
+
1
3
  AllCops:
2
4
  Exclude:
3
5
  # These are autogenerated binstubs.
4
6
  - 'bin/*'
5
7
  # Keep rubocop from scanning installed gems.
6
8
  - 'vendor/**/*'
7
- TargetRubyVersion: 2.2
9
+ TargetRubyVersion: 2.4
8
10
  # Line length is something that isn't dogmatic. 80 chars is a good recommendation.
9
- Metrics/LineLength:
11
+ Layout/LineLength:
10
12
  Enabled: false
11
13
  # This requires leading comments which can tend to be redundant.
12
14
  Style/Documentation:
@@ -24,10 +26,6 @@ Metrics/ModuleLength:
24
26
  # Tests involve piles of code.
25
27
  - 'spec/**/*'
26
28
 
27
- # I'm not pulling in a library, or forcing Ruby 2.3+
28
- Layout/IndentHeredoc:
29
- Enabled: false
30
-
31
29
  # When we use $stderr.puts, we don't see that as verbose.
32
30
  Style/StderrPuts:
33
31
  Enabled: false
@@ -68,3 +66,19 @@ Style/TrailingCommaInArguments:
68
66
  # Seems buggy for now.
69
67
  Layout/ClosingHeredocIndentation:
70
68
  Enabled: false
69
+
70
+ # Enable new cops
71
+ Layout/SpaceAroundMethodCallOperator:
72
+ Enabled: true
73
+ Lint/RaiseException:
74
+ Enabled: true
75
+ Lint/StructNewOverride:
76
+ Enabled: true
77
+ Style/ExponentialNotation:
78
+ Enabled: true
79
+ Style/HashEachMethods:
80
+ Enabled: true
81
+ Style/HashTransformKeys:
82
+ Enabled: true
83
+ Style/HashTransformValues:
84
+ Enabled: true
@@ -1,7 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.1
4
- - 2.2
5
- before_install:
6
- - gem install bundler
3
+ - 2.4
4
+ - 2.5
5
+ - 2.6
6
+ - 2.7
7
7
  cache: bundler
@@ -2,6 +2,27 @@ Unreleased
2
2
 
3
3
  * Your change here!
4
4
 
5
+ v4.0.2
6
+
7
+ * Fix issues with the key not being registered correctly. #168
8
+
9
+ v4.0.1
10
+
11
+ * Require Ruby >=2.4 (mostly because Faraday, which this depends on, doesn't support 2.2 anymore. Also not support 2.3 because of the xmlrpc library extraction. This just makes things easier, and it seems like WebFaction supports this new version of Ruby everywhere now.)
12
+
13
+ v4.0.0
14
+
15
+ * Support ACMEv2
16
+ * No longer adds intermediate certs to bundle, as these don't appear to be provided.
17
+
18
+ v3.2.0
19
+
20
+ * New `--force` argument for easier handling of `endpoint` switching. Fixes [#132](https://github.com/will-in-wi/letsencrypt-webfaction/issues/132)
21
+
22
+ v3.1.2
23
+
24
+ * [#147](https://github.com/will-in-wi/letsencrypt-webfaction/pull/147) - Changed `RENEWAL_DELTA` to 30 days per LetsEncrypt's recommendation. (@shannonturner)
25
+
5
26
  v3.1.1
6
27
 
7
28
  * Fixed a missing require when fetching version. Fixes [#146](https://github.com/will-in-wi/letsencrypt-webfaction/issues/146)
data/Gemfile CHANGED
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in test_gem.gemspec
4
6
  gemspec
5
7
 
6
8
  group :development, :test do
7
- gem 'bundler', '~> 1.11'
8
9
  gem 'pry', '~> 0.10'
9
10
  gem 'pry-byebug', '~> 3.3'
10
11
  gem 'pry-doc'
11
12
  gem 'rake', '~> 12.0'
12
13
  gem 'rspec', '~> 3.4'
13
- gem 'rubocop', '~> 0.51'
14
+ gem 'rubocop', '~> 0.82.0'
15
+ gem 'rubocop-performance'
14
16
  gem 'simplecov', '~> 0.11'
15
17
  gem 'timecop', '~> 0.9.1'
16
18
  gem 'webmock', '~> 3.4'
data/README.md CHANGED
@@ -2,7 +2,17 @@
2
2
 
3
3
  LetsEncrypt utility client for WebFaction hosts.
4
4
 
5
- *NOTE: Version 3 is out and requires some manual changes. See [the upgrade guide for details](docs/upgrading.md).*
5
+ ## *WebFaction has released first-party support for Let's Encrypt Certs!*
6
+
7
+ The long-awaited support by [webfaction is here!](https://blog.webfaction.com/2018/09/issue-lets-encrypt-ssl-certificates-with-the-control-panel/) See [the blog post for details about how to use it](https://blog.webfaction.com/2018/09/issue-lets-encrypt-ssl-certificates-with-the-control-panel/), it's really easy! I've switched all of my personal certificates over to their implementation. If you are looking to start adding certificates to your site, start there, not with this tool.
8
+
9
+ I am not going to abandon this application outright. Too many people have worked too hard on this to suddenly drop it. But I am not planning any further work on it, unless people find actual bugs. If you can't use the WebFaction control panel to issue your Let's Encrypt certs for some reason and so are using this tool, please file a support ticket with WebFaction and also [comment on this ticket](https://github.com/will-in-wi/letsencrypt-webfaction/issues/160).
10
+
11
+ And finally, THANK YOU to all of you who have filed issues, contributed code and documentation, and helped others solve tickets. You have made this a tremendously fun and rewarding project to work on, and helped out so many fellow WebFaction customers.
12
+
13
+ ## Previous Readme
14
+
15
+ *NOTE: Version 4 is out and requires some manual changes. See [the upgrade guide for details](docs/upgrading.md).*
6
16
 
7
17
  This tool automates the process of using LetsEncrypt on WebFaction hosts. It can be added to the Cron scheduled task runner where it will validate your domains automatically, obtain the certificates, and then install them using the Webfaction API.
8
18
 
@@ -51,14 +61,14 @@ All places where you need to substitute a value specific to your setup will be d
51
61
  Run the following command in an SSH session to install the letsencrypt_webfaction package via the [RubyGems package management site](https://rubygems.org/gems/letsencrypt_webfaction):
52
62
 
53
63
  ```sh
54
- GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib gem2.2 install letsencrypt_webfaction
64
+ GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib gem2.4 install letsencrypt_webfaction
55
65
  ```
56
66
 
57
67
  Add the following to `~/.bash_profile` (using, for example, an FTP client or your favorite text editor):
58
68
 
59
69
  ```sh
60
70
  function letsencrypt_webfaction {
61
- PATH=$PATH:$GEM_HOME/bin GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib ruby2.2 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction $*
71
+ GEM_HOME=$HOME/.letsencrypt_webfaction/gems PATH=$PATH:$GEM_HOME/bin RUBYLIB=$GEM_HOME/lib ruby2.4 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction $*
62
72
  }
63
73
  ```
64
74
  This will simplify the running of the LetsEncrypt WebFaction command, by setting some variables in advance.
@@ -67,7 +77,7 @@ After saving `~/.bash_profile`, run the command `source $HOME/.bash_profile` to
67
77
 
68
78
  Run `letsencrypt_webfaction init` to generate a registration cert and the config file. Open the config file `nano -w ~/letsencrypt_webfaction.toml` and edit to reflect your configuration.
69
79
 
70
- Now, you are ready to run `letsencrypt_webfaction run` from your SSH session to get certificates. Note that by default the config file `letsencrypt_webfaction.toml` is pointed at the LetsEncrypt staging endpoint (the line that says: `endpoint = "https://acme-staging.api.letsencrypt.org/"`); meaning you will only get "test" certificates installed while using the stage endpoint. To issue live certificates you will need to comment out default line, and uncomment the production endpoint line (the line that says: `endpoint = "https://acme-v01.api.letsencrypt.org/" # Production`).
80
+ Now, you are ready to run `letsencrypt_webfaction run` from your SSH session to get certificates. Note that by default the config file `letsencrypt_webfaction.toml` is pointed at the LetsEncrypt staging endpoint (the line that says: `directory = "https://acme-staging-v02.api.letsencrypt.org/directory"`); meaning you will only get "test" certificates installed while using the stage endpoint. To issue live certificates you will need to comment out default line, and uncomment the production endpoint line (the line that says: `directory = "https://acme-v02.api.letsencrypt.org/directory" # Production`).
71
81
 
72
82
  When you have tested with staging, you can remove the certificate from WebFaction control panel (make sure no webapps are using it first) and re-run with the production endpoint.
73
83
 
@@ -83,13 +93,28 @@ Finally, if you would like the `http` site to redirect to your `https`, follow t
83
93
 
84
94
  The syntax of the letsencrypt_webfaction command is as follows:
85
95
 
86
- $ letsencrypt_webfaction [cmd] [*args]
96
+ $ letsencrypt_webfaction [init|run] [*options]
97
+
98
+ The commands are `init` and `run`. You can also use `--version` to get the currently installed version of letsencrypt_webfaction.
87
99
 
88
- The commands are `init` and `run`. You can add the `--quiet` argument to the `run` command to keep normal output from appearing (useful in cron).
100
+ #### `init`
101
+
102
+ Generate registration cert and config file.
103
+
104
+ #### `run`
105
+
106
+ Generate certs and add to them to the control panel. This command has the following options:
107
+
108
+ * `--config=CONFIG`: Use alternative configuration path
109
+ * `--force`: Re-issue certs regardless of expiration
110
+ * `--help`: Show help for this command
111
+ * `--quiet`: Run with minimal output (useful for cron)
89
112
 
90
113
  ### Testing
91
114
 
92
- 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 rate limit of 5 certs per domain every 7 days. You can change the `endpoint` config line to be `https://acme-staging.api.letsencrypt.org/` in order to test the system.
115
+ 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 rate limit of 5 certs per domain every 7 days. You can change the `directory` config line to be `https://acme-staging-v02.api.letsencrypt.org/directory` in order to test the system.
116
+
117
+ After switching endpoints, you will likely want to run the command with `--force` in order to reissue all certificates from the new endpoint.
93
118
 
94
119
  ### Operation
95
120
 
@@ -106,7 +131,7 @@ The Cron task should run daily (or however often you prefer) and will only renew
106
131
  Your Cron task should look like:
107
132
 
108
133
  ```cron
109
- 18 3 * * * PATH=$PATH:$GEM_HOME/bin:/usr/local/bin GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib ruby2.2 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction run --quiet
134
+ 18 3 * * * PATH=$PATH:$GEM_HOME/bin:/usr/local/bin GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib ruby2.4 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction run --quiet
110
135
  ```
111
136
 
112
137
  *Note the usage of `--quiet` to keep the success message from being shown and emailed.*
@@ -119,18 +144,18 @@ If you want to be notified upon failure, you can add `MAILTO=[you@youremail.com]
119
144
 
120
145
  While WebFaction staff maintain your standard server software, the support team will not upgrade your installation of LetsEncrypt WebFaction. You won't usually need to do this unless you have an issue but, as is good practice with most software, it's best kept up to date.
121
146
 
122
- You can find the current version by running `letsencrypt_webfaction --version`. Sort of. In versions >= 1.1.4, this will work. In older versions, this will just print `letsencrypt_webfaction: version unknown` due to an oversight on my part. So if you get the latter output, just upgrade.
147
+ You can find the current version by running `letsencrypt_webfaction --version`. Sort of. In versions >= 1.1.4 (except for versions v3.0.0-v3.0.1), this will work. In older versions, this will just print `letsencrypt_webfaction: version unknown` due to an oversight on my part. So if you get the latter output, just upgrade.
123
148
 
124
149
  [The changelog](CHANGELOG.md) describes changes from version to version.
125
150
 
126
- LetsEncrypt WebFaction follows [Semantic Versioning](http://semver.org/). In a nutshell, a version number such as `1.2.3` is divided as `major.minor.patch`. When the major version is incremented, you will probably have to change something about the configuration to make it work. The changelog will let you know what changes you need to make. When the minor version is incremented, there are new features but existing features haven't changed. If the patch version is incremented, the changes are all under the hood and shouldn't change or add any existing features.
151
+ LetsEncrypt WebFaction follows [Semantic Versioning](http://semver.org/). In a nutshell, a version number such as `1.2.4` is divided as `major.minor.patch`. When the major version is incremented, you will probably have to change something about the configuration to make it work. The changelog will let you know what changes you need to make. When the minor version is incremented, there are new features but existing features haven't changed. If the patch version is incremented, the changes are all under the hood and shouldn't change or add any existing features.
127
152
 
128
153
  TL;DR: Be careful with major version upgrades and you should be fine with upgrading to minor or patch releases.
129
154
 
130
155
  To upgrade, run the following command to fetch and install the newest version from RubyGems:
131
156
 
132
157
  ```sh
133
- GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib gem2.2 install letsencrypt_webfaction
158
+ GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib gem2.4 install letsencrypt_webfaction
134
159
  ```
135
160
 
136
161
  ## Development
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
  require 'rubocop/rake_task'
@@ -1,7 +1,7 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIDhTCCAm2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBEMRAwDgYDVQQDDAd3aWxs
2
+ MIIDhTCCAm2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMRAwDgYDVQQDDAd3aWxs
3
3
  aWFtMRwwGgYKCZImiZPyLGQBGRYMam9obnN0b25oYXVzMRIwEAYKCZImiZPyLGQB
4
- GRYCdXMwHhcNMTgwNjEwMTMxNTEwWhcNMTkwNjEwMTMxNTEwWjBEMRAwDgYDVQQD
4
+ GRYCdXMwHhcNMjAwNDE2MDIxNzQ1WhcNMjEwNDE2MDIxNzQ1WjBEMRAwDgYDVQQD
5
5
  DAd3aWxsaWFtMRwwGgYKCZImiZPyLGQBGRYMam9obnN0b25oYXVzMRIwEAYKCZIm
6
6
  iZPyLGQBGRYCdXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDl8XJy
7
7
  iFDfTJHbPnQ43vJKAjVPwxRnPhThFeWgYlZ//SU6ZbO4GqewDSMyCrjtWOq+mE59
@@ -12,10 +12,10 @@ iL3gD6KBGRCdOVRmX+mgz0mIxchknFslbLE1aU9kNGabVw/25qUVxTid7HN5DAeY
12
12
  gkKUO+QWHBNH4QL3AgMBAAGjgYEwfzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAd
13
13
  BgNVHQ4EFgQUFOFAV8TE1Qa285rrUux+StPq5WowIgYDVR0RBBswGYEXd2lsbGlh
14
14
  bUBqb2huc3RvbmhhdXMudXMwIgYDVR0SBBswGYEXd2lsbGlhbUBqb2huc3Rvbmhh
15
- dXMudXMwDQYJKoZIhvcNAQELBQADggEBAEZ6tJ2dwjke8nJbBATwwqwqqyISybGc
16
- /uw0ApMsYfK0pninuCV5jfpm4WbmqokqNOfbYvlHLpBKGz7uxJRKOioe6Ivl7LJu
17
- EHiagTaawLYJK0tZ3fH4K7VFx4pXNIbg6LYzOTIflaBQkVSkaVNfrczTJM11aADC
18
- qy0EH65AuAgNtypTvnCKGB6pztMIgxK0FTSdZnnxtC1ReQ1U8MpsaYpOap2Yvofo
19
- ilYPju4QWNSvpNVhV+T7JUvAHXva3Rayfp8SKRpvX8ZpRCjvpYfgbmNxXO2ST1qb
20
- KBba/yJfCMh+B65HfRUXBQRRDtJ2Vu8i0WmRUKenahAnpkkeVmqhWwY=
15
+ dXMudXMwDQYJKoZIhvcNAQEFBQADggEBAMK2SPYRVs6wzv802pqS1fllhrW/a+fZ
16
+ lU3UP5Gw7VlkFfB7i2J7kafB/kH1Qj6n4e9uu6YhzkodCAszXC0vJdBQoUB+nidO
17
+ +XFod0RVfCdcYCmhYsF8YMRqbTOPVDtoBXBISGzpt1boQykR6TZcZFkKEPsAAhRW
18
+ jNRsRelqGB81uWs32PC50OFpQ9Sj8scB/331mAzn//i1F0kiQnQetQDCbr5IieOI
19
+ is7nzWq9MtbVDHPaE5a10t+7UoSjPzWFe4qKnxjB8RjfGymDvy4+H2eJbRQE932E
20
+ Dm3/IFNc1K3ekU2WQEZ3O0WHQY8bCBgCAD/U/CiTaLUOm4VsPnYLAx4=
21
21
  -----END CERTIFICATE-----
@@ -4,22 +4,20 @@ This method is useful if you are already using RBEnv to manage Ruby, or if you a
4
4
 
5
5
  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.
6
6
 
7
- Once you have done so, install Ruby 2.1+, but <2.4 (probably 2.3.1 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.
7
+ Once you have done so, install Ruby 2.4+. Then set the local Ruby and install the Gem. Finally unset the local Ruby so that you don't run into problems.
8
8
 
9
- $ rbenv install 2.3.1 # Installs Ruby 2.3.1
10
- $ rbenv local 2.3.1 # Sets Ruby 2.3.1 as the default version in the current folder.
9
+ $ rbenv install 2.7.0 # Installs Ruby 2.7.0
10
+ $ rbenv local 2.7.0 # Sets Ruby 2.7.0 as the default version in the current folder.
11
11
  $ gem install letsencrypt_webfaction # Installs this utility from RubyGems.
12
12
  $ rbenv rehash # Makes RBenv aware of the letsencrypt_webfaction utility.
13
- $ rm .ruby-version # Unsets Ruby 2.3.1 as the default version in the current folder.
14
-
15
- *Ruby 2.4.0+ is not supported since they removed the XMLRPC library from core and moved it to a gem. This Gem doesn't work in Ruby <2.3, leaving us with an issue as the majority of system Rubies used with this project are <2.4. So don't use 2.4 for now. If you absolutely want to, make sure you install the xmlrpc gem manually.*
13
+ $ rm .ruby-version # Unsets Ruby 2.7.0 as the default version in the current folder.
16
14
 
17
15
  ## Cron usage
18
16
 
19
17
  Instead of the cron command in the readme, when using rbenv it would look like the following:
20
18
 
21
19
  ```cron
22
- 18 3 * * * RBENV_ROOT=~/.rbenv RBENV_VERSION=2.3.1 ~/.rbenv/bin/rbenv exec letsencrypt_webfaction --letsencrypt_account_email [you@youremail.com] --domains [yourdomain.com,www.yourdomain.com] --public ~/webapps/[yourapp/your_public_html]/ --quiet --username [yourusername] --password [yourpassword]
20
+ 18 3 * * * RBENV_ROOT=~/.rbenv RBENV_VERSION=2.7.0 ~/.rbenv/bin/rbenv exec letsencrypt_webfaction --letsencrypt_account_email [you@youremail.com] --domains [yourdomain.com,www.yourdomain.com] --public ~/webapps/[yourapp/your_public_html]/ --quiet --username [yourusername] --password [yourpassword]
23
21
  ```
24
22
 
25
23
  ## Upgrading
@@ -27,5 +25,5 @@ Instead of the cron command in the readme, when using rbenv it would look like t
27
25
  To upgrade the installed version, run:
28
26
 
29
27
  ```sh
30
- RBENV_VERSION=2.3.1 gem install letsencrypt_webfaction
28
+ RBENV_VERSION=2.7.0 gem install letsencrypt_webfaction
31
29
  ```
@@ -1,3 +1,30 @@
1
+ # Upgrading from v3 to v4
2
+
3
+ Switching to ACMEv2 broke backwards compatibility in a couple ways.
4
+
5
+ - You need to change the `endpoint` entry in your config to `directory` and update it to staging or production.
6
+ ```toml
7
+ directory = "https://acme-staging-v02.api.letsencrypt.org/directory" # Staging
8
+ #directory = "https://acme-v02.api.letsencrypt.org/directory" # Production
9
+ ```
10
+ - You need to change all references from Ruby 2.2 to 2.4.
11
+ Run:
12
+ ```bash
13
+ GEM_HOME=$HOME/.letsencrypt_webfaction/gems RUBYLIB=$GEM_HOME/lib gem2.4 install letsencrypt_webfaction
14
+ ```
15
+ And then change
16
+ ```bash
17
+ function letsencrypt_webfaction {
18
+ GEM_HOME=$HOME/.letsencrypt_webfaction/gems PATH=$PATH:$GEM_HOME/bin RUBYLIB=$GEM_HOME/lib ruby2.2 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction $*
19
+ }
20
+ ```
21
+ to
22
+ ```bash
23
+ function letsencrypt_webfaction {
24
+ GEM_HOME=$HOME/.letsencrypt_webfaction/gems PATH=$PATH:$GEM_HOME/bin RUBYLIB=$GEM_HOME/lib ruby2.4 $HOME/.letsencrypt_webfaction/gems/bin/letsencrypt_webfaction $*
25
+ }
26
+ ```
27
+
1
28
  # Upgrading from v2 to v3
2
29
 
3
30
  Version 3 has a number of major ease of use improvements that break backwards compatibility:
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'letsencrypt_webfaction/application'
4
5
  require 'letsencrypt_webfaction/errors'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'letsencrypt_webfaction'
@@ -25,11 +27,9 @@ Gem::Specification.new do |spec|
25
27
  spec.cert_chain = ['certs/will_in_wi.pem']
26
28
  spec.signing_key = File.expand_path('~/.ssh/gem-private_key.pem') if $PROGRAM_NAME.end_with?('gem')
27
29
 
28
- spec.required_ruby_version = '>= 2.2.0'
29
-
30
- spec.add_runtime_dependency 'acme-client', '~> 1.0'
31
- spec.add_runtime_dependency 'toml-rb', '~> 1.1'
30
+ spec.required_ruby_version = '>= 2.4.0'
32
31
 
33
- # This will be required for Ruby 2.4. But it is incompatible for Ruby <2.3. Unsupporting Ruby 2.4 for the moment.
34
- # spec.add_runtime_dependency 'xmlrpc', '~> 0.3.0'
32
+ spec.add_runtime_dependency 'acme-client', '~> 2.0'
33
+ spec.add_runtime_dependency 'toml-rb', '~> 2.0'
34
+ spec.add_runtime_dependency 'xmlrpc', '~> 0.3.0'
35
35
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LetsencryptWebfaction
2
- VERSION = '3.1.1'.freeze
4
+ VERSION = '4.0.2'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'letsencrypt_webfaction/application/init'
2
4
  require 'letsencrypt_webfaction/application/run'
3
5
  require 'letsencrypt_webfaction/application/version'
@@ -18,7 +20,7 @@ module LetsencryptWebfaction
18
20
  $stderr.puts "Missing command. Must be one of #{SUPPORTED_COMMANDS.keys.join(', ')}"
19
21
  raise LetsencryptWebfaction::AppExitError, 'Missing command'
20
22
  elsif v2_command?(args)
21
- $stderr.puts 'It looks like you are trying to run a version 2 command in version 3'
23
+ $stderr.puts 'It looks like you are trying to run a version 2 command in version 4'
22
24
  $stderr.puts 'See https://github.com/will-in-wi/letsencrypt-webfaction/blob/master/docs/upgrading.md'
23
25
  raise LetsencryptWebfaction::AppExitError, 'v2 command'
24
26
  else
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'letsencrypt_webfaction/options'
2
4
 
3
5
  require 'pathname'
@@ -7,7 +9,7 @@ require 'openssl'
7
9
  module LetsencryptWebfaction
8
10
  module Application
9
11
  class Init
10
- def initialize(_); end # rubocop:disable Naming/UncommunicativeMethodParamName
12
+ def initialize(_); end
11
13
 
12
14
  def run!
13
15
  copy_config_file
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'letsencrypt_webfaction/options'
2
4
  require 'letsencrypt_webfaction/errors'
3
5
  require 'letsencrypt_webfaction/webfaction_api_credentials'
@@ -11,7 +13,7 @@ require 'pathname'
11
13
  module LetsencryptWebfaction
12
14
  module Application
13
15
  class Run
14
- RENEWAL_DELTA = 14 # days
16
+ RENEWAL_DELTA = 30 # days
15
17
 
16
18
  def initialize(args)
17
19
  @config_path = DefaultConfigPath.new
@@ -46,6 +48,7 @@ module LetsencryptWebfaction
46
48
 
47
49
  def validate!
48
50
  return true if @path.exist?
51
+
49
52
  print_error
50
53
  raise AppExitError, 'config missing'
51
54
  end
@@ -70,7 +73,7 @@ module LetsencryptWebfaction
70
73
  end
71
74
  end
72
75
 
73
- def parse_options(args)
76
+ def parse_options(args) # rubocop:disable Metrics/MethodLength
74
77
  OptionParser.new do |opts|
75
78
  opts.banner = 'Usage: letsencrypt_webfaction run [options]'
76
79
 
@@ -81,6 +84,10 @@ module LetsencryptWebfaction
81
84
  opts.on('--config=CONFIG', 'Alternative configuration path') do |c|
82
85
  @config_path = CustomConfigPath.new(c)
83
86
  end
87
+
88
+ opts.on('--force', 'When passed, all certs are re-issued regardless of expiration') do |d|
89
+ @force_refresh = d
90
+ end
84
91
  end.parse!(args)
85
92
  end
86
93
 
@@ -88,7 +95,10 @@ module LetsencryptWebfaction
88
95
  wf_cert_list = api_credentials.call('list_certificates')
89
96
  @options.certificates.each do |cert|
90
97
  wf_cert = wf_cert_list.find { |c| c['name'] == cert.cert_name }
91
- if wf_cert.nil?
98
+ if @force_refresh
99
+ # Issue because nonexistent
100
+ Out.puts "Force issuing #{cert.cert_name}."
101
+ elsif wf_cert.nil?
92
102
  # Issue because nonexistent
93
103
  Out.puts "Issuing #{cert.cert_name} for the first time."
94
104
  elsif wf_cert['domains'].split(',').map(&:strip).sort == cert.domains.sort
@@ -116,6 +126,7 @@ module LetsencryptWebfaction
116
126
 
117
127
  def validate_options # rubocop:disable Metrics/MethodLength
118
128
  return if @options.valid?
129
+
119
130
  $stderr.puts 'The configuration file has an error:'
120
131
  @options.errors.each do |field, error|
121
132
  case error
@@ -148,19 +159,20 @@ module LetsencryptWebfaction
148
159
  end
149
160
 
150
161
  def client
151
- @_client ||= Acme::Client.new(private_key: private_key, endpoint: @options.endpoint)
162
+ @_client ||= Acme::Client.new(private_key: private_key, directory: @options.directory)
163
+ end
164
+
165
+ def key_registered?
166
+ !client.kid.nil?
167
+ rescue Acme::Client::Error::AccountDoesNotExist
168
+ false
152
169
  end
153
170
 
154
171
  def register_key
172
+ return if key_registered?
173
+
155
174
  # If the private key is not known to the server, we need to register it for the first time.
156
- registration = client.register(contact: "mailto:#{@options.letsencrypt_account_email}")
157
-
158
- # 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)
159
- registration.agree_terms
160
- rescue Acme::Client::Error::Malformed => e
161
- # Stupid hack if the registration already exists.
162
- return if e.message == 'Registration key is already in use'
163
- raise
175
+ client.new_account(contact: "mailto:#{@options.letsencrypt_account_email}", terms_of_service_agreed: true)
164
176
  end
165
177
  end
166
178
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'letsencrypt_webfaction'
2
4
 
3
5
  module LetsencryptWebfaction
4
6
  module Application
5
7
  class Version
6
- def initialize(_); end # rubocop:disable Naming/UncommunicativeMethodParamName
8
+ def initialize(_); end
7
9
 
8
10
  def run!
9
11
  puts LetsencryptWebfaction::VERSION
@@ -1,10 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'xmlrpc/client'
2
4
 
3
5
  module LetsencryptWebfaction
4
6
  class CertificateInstaller
5
- def initialize(cert_name, certificate, credentials)
7
+ def initialize(cert_name, certificate, private_key, credentials)
6
8
  @cert_name = cert_name
7
9
  @certificate = certificate
10
+ @private_key = private_key
8
11
  @credentials = credentials
9
12
  end
10
13
 
@@ -15,7 +18,7 @@ module LetsencryptWebfaction
15
18
  else
16
19
  'create_certificate'
17
20
  end
18
- @credentials.call(action, @cert_name, @certificate.to_pem, @certificate.request.private_key.to_pem, @certificate.chain_to_pem)
21
+ @credentials.call(action, @cert_name, @certificate, @private_key.to_pem)
19
22
 
20
23
  true
21
24
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'acme-client'
2
4
  require 'letsencrypt_webfaction/domain_validator'
3
5
  require 'letsencrypt_webfaction/certificate_installer'
@@ -22,19 +24,31 @@ module LetsencryptWebfaction
22
24
 
23
25
  private
24
26
 
27
+ def order
28
+ @_order ||= @client.new_order(identifiers: @cert_config.domains)
29
+ end
30
+
25
31
  def validator
26
- @_validator ||= LetsencryptWebfaction::DomainValidator.new @cert_config.domains, @client, @cert_config.public_dirs
32
+ @_validator ||= LetsencryptWebfaction::DomainValidator.new order, @client, @cert_config.public_dirs
27
33
  end
28
34
 
29
35
  def certificate_installer
30
- @_certificate_installer ||= LetsencryptWebfaction::CertificateInstaller.new(@cert_config.cert_name, certificate, @api_credentials)
36
+ @_certificate_installer ||= LetsencryptWebfaction::CertificateInstaller.new(@cert_config.cert_name, certificate, csr.private_key, @api_credentials)
31
37
  end
32
38
 
33
39
  def certificate
34
40
  # We can now request a certificate, you can pass anything that returns
35
41
  # a valid DER encoded CSR when calling to_der on it, for example a
36
42
  # OpenSSL::X509::Request too.
37
- @_certificate ||= @client.new_certificate(csr)
43
+ @_certificate ||= begin
44
+ order.finalize(csr: csr)
45
+ while order.status == 'processing'
46
+ sleep(2)
47
+ order.reload
48
+ end
49
+
50
+ order.certificate
51
+ end
38
52
  end
39
53
 
40
54
  def csr
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
 
3
5
  module LetsencryptWebfaction
4
6
  class DomainValidator
5
- def initialize(domains, client, public_dirs)
6
- @domains = domains
7
+ def initialize(order, client, public_dirs)
8
+ @order = order
7
9
  @client = client
8
10
  @public_dirs = public_dirs.map { |dir| File.expand_path(dir) }
9
11
  end
@@ -11,15 +13,18 @@ module LetsencryptWebfaction
11
13
  def validate! # rubocop:disable Metrics/MethodLength
12
14
  write_files!
13
15
 
14
- challenges.map(&:request_verification).tap do |requests|
16
+ challenges.map(&:request_validation).tap do |requests|
15
17
  next unless requests.any?(&:!)
18
+
16
19
  $stderr.puts 'Failed to request validations.'
17
20
  return false
18
21
  end
19
22
 
20
23
  10.times do
24
+ challenges.each(&:reload)
21
25
  break if no_challenges_pending?
22
- sleep(1)
26
+
27
+ sleep(2)
23
28
  end
24
29
 
25
30
  return true if all_challenges_valid?
@@ -30,20 +35,16 @@ module LetsencryptWebfaction
30
35
 
31
36
  private
32
37
 
33
- def authorizations
34
- @authorizations ||= @domains.map { |domain| @client.authorize(domain: domain) }
35
- end
36
-
37
38
  def challenges
38
- @challenges ||= authorizations.map(&:http01)
39
+ @challenges ||= @order.authorizations.map(&:http)
39
40
  end
40
41
 
41
42
  def no_challenges_pending?
42
- challenges.none? { |challenge| challenge.authorization.verify_status == 'pending' }
43
+ challenges.none? { |challenge| challenge.status == 'pending' }
43
44
  end
44
45
 
45
46
  def all_challenges_valid?
46
- challenges.reject { |challenge| challenge.authorization.verify_status == 'valid' }.empty?
47
+ challenges.reject { |challenge| challenge.status == 'valid' }.empty?
47
48
  end
48
49
 
49
50
  def write_files!
@@ -59,7 +60,7 @@ module LetsencryptWebfaction
59
60
  end
60
61
 
61
62
  def print_errors
62
- validations = authorizations.map(&:domain).zip(challenges)
63
+ validations = @order.authorizations.map(&:domain).zip(challenges)
63
64
  $stderr.puts 'Failed to verify statuses.'
64
65
  validations.each { |tuple| Validation.new(*tuple).print_error }
65
66
  end
@@ -71,7 +72,7 @@ module LetsencryptWebfaction
71
72
  end
72
73
 
73
74
  def print_error # rubocop:disable Metrics/MethodLength
74
- case @challenge.authorization.verify_status
75
+ case @challenge.status
75
76
  when 'valid'
76
77
  $stderr.puts "#{@domain}: Success"
77
78
  when 'invalid'
@@ -80,7 +81,7 @@ module LetsencryptWebfaction
80
81
  when 'pending'
81
82
  $stderr.puts "#{@domain}: Still pending, but timed out"
82
83
  else
83
- $stderr.puts "#{@domain}: Unexpected authorization status #{@challenge.authorization.verify_status}"
84
+ $stderr.puts "#{@domain}: Unexpected authorization status #{@challenge.status}"
84
85
  end
85
86
  end
86
87
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LetsencryptWebfaction
2
4
  class Error < StandardError; end
3
5
  class InvalidConfigValueError < Error; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LetsencryptWebfaction
2
4
  class LoggerOutput
3
5
  attr_accessor :quiet
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'toml-rb'
2
4
  require 'socket'
3
5
 
@@ -5,9 +7,9 @@ require 'letsencrypt_webfaction/options/certificate'
5
7
 
6
8
  module LetsencryptWebfaction
7
9
  class Options
8
- NON_BLANK_FIELDS = %i[username password letsencrypt_account_email endpoint api_url servername].freeze
10
+ NON_BLANK_FIELDS = %i[username password letsencrypt_account_email directory api_url servername].freeze
9
11
 
10
- WEBFACTION_API_URL = 'https://api.webfaction.com/'.freeze
12
+ WEBFACTION_API_URL = 'https://api.webfaction.com/'
11
13
 
12
14
  def initialize(args)
13
15
  @config = args
@@ -39,8 +41,8 @@ module LetsencryptWebfaction
39
41
  @config['letsencrypt_account_email']
40
42
  end
41
43
 
42
- def endpoint
43
- @config['endpoint']
44
+ def directory
45
+ @config['directory']
44
46
  end
45
47
 
46
48
  def api_url
@@ -57,6 +59,7 @@ module LetsencryptWebfaction
57
59
 
58
60
  def errors
59
61
  {}.tap do |e|
62
+ e[:endpoint] = 'needs to be updated to directory. See upgrade documentation.' if @config.key?('endpoint')
60
63
  NON_BLANK_FIELDS.each do |field|
61
64
  e[field] = "can't be blank" if public_send(field).nil? || public_send(field) == ''
62
65
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LetsencryptWebfaction
2
4
  class Options
3
5
  class Certificate
4
6
  SUPPORTED_VALIDATION_METHODS = ['http01'].freeze
5
- VALID_CERT_NAME = /[^a-zA-Z\d_]/
7
+ VALID_CERT_NAME = /[^a-zA-Z\d_]/.freeze
6
8
  VALID_KEY_SIZES = [2048, 4096].freeze
7
9
 
8
10
  def initialize(args)
@@ -11,6 +13,7 @@ module LetsencryptWebfaction
11
13
 
12
14
  def domains
13
15
  return [] if @args['domains'].nil? || @args['domains'] == ''
16
+
14
17
  Array(@args['domains'])
15
18
  end
16
19
 
@@ -20,6 +23,7 @@ module LetsencryptWebfaction
20
23
 
21
24
  def public_dirs
22
25
  return [] if @args['public'].nil? || @args['public'] == ''
26
+
23
27
  Array(@args['public'])
24
28
  end
25
29
 
@@ -41,7 +45,7 @@ module LetsencryptWebfaction
41
45
  e[:method] = 'must be "http01"' unless SUPPORTED_VALIDATION_METHODS.include?(validation_method)
42
46
  e[:public] = "can't be empty" if public_dirs.none?
43
47
  e[:name] = "can't be blank" if cert_name.nil? || cert_name == ''
44
- e[:name] = 'can only include letters, numbers, and underscores' if cert_name =~ VALID_CERT_NAME
48
+ e[:name] = 'can only include letters, numbers, and underscores' if VALID_CERT_NAME.match?(cert_name)
45
49
  e[:key_size] = "must be one of #{VALID_KEY_SIZES.join(', ')}" unless VALID_KEY_SIZES.include?(key_size)
46
50
  end
47
51
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'xmlrpc/client'
2
4
 
3
5
  module LetsencryptWebfaction
@@ -24,6 +26,7 @@ module LetsencryptWebfaction
24
26
  !session_id.nil?
25
27
  rescue XMLRPC::FaultException => e
26
28
  return false if e.message == 'LoginError'
29
+
27
30
  raise
28
31
  end
29
32
 
@@ -1,4 +1,4 @@
1
- # Your Webfaction username and password
1
+ # Your Webfaction username and password, for the API & control panel, not SSH
2
2
  username = "myusername"
3
3
  password = "mypassword"
4
4
 
@@ -6,9 +6,10 @@ password = "mypassword"
6
6
  letsencrypt_account_email = "me@example.com"
7
7
 
8
8
  # The ACME endpoint. Use the staging server until you get everything working.
9
- # Then switch to the production endpoint.
10
- endpoint = "https://acme-staging.api.letsencrypt.org/" # Staging
11
- #endpoint = "https://acme-v01.api.letsencrypt.org/" # Production
9
+ # Then switch to the production endpoint. You may want to run with the --force
10
+ # command after switching to reissue all certificates.
11
+ directory = "https://acme-staging-v02.api.letsencrypt.org/directory" # Staging
12
+ #directory = "https://acme-v02.api.letsencrypt.org/directory" # Production
12
13
 
13
14
  # The URL to the WebFaction API. You should not change this under normal
14
15
  # circumstances.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: letsencrypt_webfaction
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 4.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Johnston
@@ -10,9 +10,9 @@ bindir: exe
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDhTCCAm2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBEMRAwDgYDVQQDDAd3aWxs
13
+ MIIDhTCCAm2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMRAwDgYDVQQDDAd3aWxs
14
14
  aWFtMRwwGgYKCZImiZPyLGQBGRYMam9obnN0b25oYXVzMRIwEAYKCZImiZPyLGQB
15
- GRYCdXMwHhcNMTgwNjEwMTMxNTEwWhcNMTkwNjEwMTMxNTEwWjBEMRAwDgYDVQQD
15
+ GRYCdXMwHhcNMjAwNDE2MDIxNzQ1WhcNMjEwNDE2MDIxNzQ1WjBEMRAwDgYDVQQD
16
16
  DAd3aWxsaWFtMRwwGgYKCZImiZPyLGQBGRYMam9obnN0b25oYXVzMRIwEAYKCZIm
17
17
  iZPyLGQBGRYCdXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDl8XJy
18
18
  iFDfTJHbPnQ43vJKAjVPwxRnPhThFeWgYlZ//SU6ZbO4GqewDSMyCrjtWOq+mE59
@@ -23,14 +23,14 @@ cert_chain:
23
23
  gkKUO+QWHBNH4QL3AgMBAAGjgYEwfzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAd
24
24
  BgNVHQ4EFgQUFOFAV8TE1Qa285rrUux+StPq5WowIgYDVR0RBBswGYEXd2lsbGlh
25
25
  bUBqb2huc3RvbmhhdXMudXMwIgYDVR0SBBswGYEXd2lsbGlhbUBqb2huc3Rvbmhh
26
- dXMudXMwDQYJKoZIhvcNAQELBQADggEBAEZ6tJ2dwjke8nJbBATwwqwqqyISybGc
27
- /uw0ApMsYfK0pninuCV5jfpm4WbmqokqNOfbYvlHLpBKGz7uxJRKOioe6Ivl7LJu
28
- EHiagTaawLYJK0tZ3fH4K7VFx4pXNIbg6LYzOTIflaBQkVSkaVNfrczTJM11aADC
29
- qy0EH65AuAgNtypTvnCKGB6pztMIgxK0FTSdZnnxtC1ReQ1U8MpsaYpOap2Yvofo
30
- ilYPju4QWNSvpNVhV+T7JUvAHXva3Rayfp8SKRpvX8ZpRCjvpYfgbmNxXO2ST1qb
31
- KBba/yJfCMh+B65HfRUXBQRRDtJ2Vu8i0WmRUKenahAnpkkeVmqhWwY=
26
+ dXMudXMwDQYJKoZIhvcNAQEFBQADggEBAMK2SPYRVs6wzv802pqS1fllhrW/a+fZ
27
+ lU3UP5Gw7VlkFfB7i2J7kafB/kH1Qj6n4e9uu6YhzkodCAszXC0vJdBQoUB+nidO
28
+ +XFod0RVfCdcYCmhYsF8YMRqbTOPVDtoBXBISGzpt1boQykR6TZcZFkKEPsAAhRW
29
+ jNRsRelqGB81uWs32PC50OFpQ9Sj8scB/331mAzn//i1F0kiQnQetQDCbr5IieOI
30
+ is7nzWq9MtbVDHPaE5a10t+7UoSjPzWFe4qKnxjB8RjfGymDvy4+H2eJbRQE932E
31
+ Dm3/IFNc1K3ekU2WQEZ3O0WHQY8bCBgCAD/U/CiTaLUOm4VsPnYLAx4=
32
32
  -----END CERTIFICATE-----
33
- date: 2018-08-05 00:00:00.000000000 Z
33
+ date: 2020-08-23 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: acme-client
@@ -38,28 +38,42 @@ dependencies:
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '1.0'
41
+ version: '2.0'
42
42
  type: :runtime
43
43
  prerelease: false
44
44
  version_requirements: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '1.0'
48
+ version: '2.0'
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: toml-rb
51
51
  requirement: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '1.1'
55
+ version: '2.0'
56
56
  type: :runtime
57
57
  prerelease: false
58
58
  version_requirements: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '1.1'
62
+ version: '2.0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: xmlrpc
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 0.3.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 0.3.0
63
77
  description: A tool to simplify the manual process of using LetsEncrypt on Webfaction
64
78
  hosts. It can be added to cron where it will validate your domains automatically,
65
79
  place the generated certs in a common folder, and then email the WebFaction support
@@ -117,15 +131,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
131
  requirements:
118
132
  - - ">="
119
133
  - !ruby/object:Gem::Version
120
- version: 2.2.0
134
+ version: 2.4.0
121
135
  required_rubygems_version: !ruby/object:Gem::Requirement
122
136
  requirements:
123
137
  - - ">="
124
138
  - !ruby/object:Gem::Version
125
139
  version: '0'
126
140
  requirements: []
127
- rubyforge_project:
128
- rubygems_version: 2.7.7
141
+ rubygems_version: 3.1.2
129
142
  signing_key:
130
143
  specification_version: 4
131
144
  summary: LetsEncrypt utility client for WebFaction hosts.
metadata.gz.sig CHANGED
Binary file