jekyll-gitlab-letsencrypt 0.1.0 → 0.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 +4 -4
- data/CHANGELOG.markdown +4 -0
- data/README.md +4 -26
- data/jekyll-gitlab-letsencrypt.gemspec +1 -1
- data/lib/jekyll/gitlab/letsencrypt.rb +1 -1
- data/lib/jekyll/gitlab/letsencrypt/{committer.rb → gitlab_client.rb} +17 -8
- data/lib/jekyll/gitlab/letsencrypt/process.rb +18 -2
- data/lib/jekyll/gitlab/letsencrypt/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4aa19772ee6eb9fbc74b590baa566f4cfde43db9
|
4
|
+
data.tar.gz: 57f5f353d78eee5a174165adac509ef69ddb1a8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0b7ca49d5056a76e89530cee2f40913660649054d15294871ffe2e02e80348082103366493630cac0d3236930d597c90017269b650647b5f7d8016e8539ce37
|
7
|
+
data.tar.gz: 124da27fd3bfee7347f7972b84d6112dbe9e86c22ae70eb770b5ae02fcbcd3ef57c7aaeef3f8477363c04e9aa00e493bbf2bc75424e24816d16d83538b6f3b96
|
data/CHANGELOG.markdown
CHANGED
data/README.md
CHANGED
@@ -4,15 +4,14 @@
|
|
4
4
|
|
5
5
|

|
6
6
|
|
7
|
-
This plugin automagically does
|
7
|
+
This plugin automagically does the entire the letsencrypt process for your gitlab-hosted jekyll blog!
|
8
8
|
|
9
9
|
- *(automatic)* It registers your email to the letsencrypt server
|
10
10
|
- *(automatic)* It generates a challenge file, and commits it directly via the gitlab API
|
11
11
|
- *(automatic)* It sleeps until the challenge file is live on the internet
|
12
12
|
- *(automatic)* It asks letsencrypt to verify it
|
13
13
|
- *(automatic)* It spits out the certificate chain and private key
|
14
|
-
- *(
|
15
|
-
- This step must be manual since there is no API through Gitlab for this step
|
14
|
+
- *(automatic)* It updates the gitlab pages domain settings to use the certificate
|
16
15
|
|
17
16
|
## Usage
|
18
17
|
|
@@ -93,29 +92,8 @@ Requesting verification...
|
|
93
92
|
Challenge status = valid
|
94
93
|
Challenge is valid!
|
95
94
|
Certificate retrieved!
|
96
|
-
|
97
|
-
|
98
|
-
- Then click + New Domain and enter the following:
|
99
|
-
|
100
|
-
Domain: example.com
|
101
|
-
|
102
|
-
Certificate (PEM):
|
103
|
-
-----BEGIN CERTIFICATE-----
|
104
|
-
...
|
105
|
-
-----END CERTIFICATE-----
|
106
|
-
-----BEGIN CERTIFICATE-----
|
107
|
-
...
|
108
|
-
-----END CERTIFICATE-----
|
109
|
-
|
110
|
-
Key (PEM):
|
111
|
-
-----BEGIN RSA PRIVATE KEY-----
|
112
|
-
...
|
113
|
-
-----END RSA PRIVATE KEY-----
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
... hit save, wait a bit, and your new SSL will be live!
|
95
|
+
Updating domain example.com pages setting with new certificates..
|
96
|
+
Success!
|
119
97
|
```
|
120
98
|
|
121
99
|
### Alternative token usage
|
@@ -5,7 +5,7 @@ require 'jekyll/gitlab/letsencrypt/version'
|
|
5
5
|
require 'jekyll/gitlab/letsencrypt/configuration'
|
6
6
|
require 'jekyll/gitlab/letsencrypt/acme'
|
7
7
|
require 'jekyll/gitlab/letsencrypt/process'
|
8
|
-
require 'jekyll/gitlab/letsencrypt/
|
8
|
+
require 'jekyll/gitlab/letsencrypt/gitlab_client'
|
9
9
|
|
10
10
|
module Jekyll
|
11
11
|
module Gitlab
|
@@ -3,21 +3,30 @@ require 'faraday'
|
|
3
3
|
module Jekyll
|
4
4
|
module Gitlab
|
5
5
|
module Letsencrypt
|
6
|
-
class
|
6
|
+
class GitlabClient
|
7
7
|
|
8
8
|
attr_accessor :content
|
9
9
|
|
10
|
-
delegate :filename, :personal_access_token, :gitlab_repo, :branch, to: Configuration
|
10
|
+
delegate :filename, :personal_access_token, :gitlab_repo, :branch, :domain, to: Configuration
|
11
11
|
|
12
|
-
def
|
12
|
+
def commit!(content)
|
13
13
|
@content = content
|
14
|
-
end
|
15
|
-
|
16
|
-
def commit!
|
17
14
|
create_branch! unless branch_exists?
|
18
15
|
commit_file!
|
19
16
|
end
|
20
17
|
|
18
|
+
def update_certificate!(certificate, key)
|
19
|
+
Jekyll.logger.info "Updating domain #{domain} pages setting with new certificates.."
|
20
|
+
response = connection.put do |req|
|
21
|
+
req.url "projects/#{repo_id}/pages/domains/#{domain}"
|
22
|
+
req.body = {
|
23
|
+
certificate: certificate,
|
24
|
+
key: key
|
25
|
+
}.to_json
|
26
|
+
end
|
27
|
+
response.success?
|
28
|
+
end
|
29
|
+
|
21
30
|
def create_branch!
|
22
31
|
Jekyll.logger.info "Creating branch #{branch}.."
|
23
32
|
connection.post do |req|
|
@@ -31,7 +40,7 @@ module Jekyll
|
|
31
40
|
|
32
41
|
def commit_file!
|
33
42
|
Jekyll.logger.info "Commiting challenge file as #{filename}"
|
34
|
-
connection.run_request(
|
43
|
+
connection.run_request(request_method_for_commit, nil, nil, nil) do |req|
|
35
44
|
req.url "projects/#{repo_id}/repository/files"
|
36
45
|
req.body = {
|
37
46
|
file_path: filename,
|
@@ -50,7 +59,7 @@ module Jekyll
|
|
50
59
|
JSON.parse(response.body).any? { |json| json['name'] == branch }
|
51
60
|
end
|
52
61
|
|
53
|
-
def
|
62
|
+
def request_method_for_commit
|
54
63
|
response = connection.get "projects/#{repo_id}/repository/files?ref=#{branch}&file_path=#{filename}"
|
55
64
|
response.status == 404 ? :post : :put
|
56
65
|
end
|
@@ -25,14 +25,19 @@ module Jekyll
|
|
25
25
|
wait_until_challenge_is_present
|
26
26
|
request_verification!
|
27
27
|
await_verification_confirmation
|
28
|
-
|
28
|
+
if update_gitlab_pages
|
29
|
+
Jekyll.logger.info "Success!"
|
30
|
+
else
|
31
|
+
Jekyll.logger.info "Updating certificate failed... manual steps:"
|
32
|
+
display_certificate
|
33
|
+
end
|
29
34
|
end
|
30
35
|
|
31
36
|
private
|
32
37
|
|
33
38
|
def commit_to_gitlab!
|
34
39
|
Jekyll.logger.info "Pushing file to Gitlab"
|
35
|
-
|
40
|
+
gitlab_client.commit!(challenge_content)
|
36
41
|
end
|
37
42
|
|
38
43
|
def wait_until_challenge_is_present
|
@@ -54,6 +59,9 @@ module Jekyll
|
|
54
59
|
def request_verification!
|
55
60
|
Jekyll.logger.info "Requesting verification..."
|
56
61
|
challenge.request_verification
|
62
|
+
rescue ::Acme::Client::Error::BadNonce
|
63
|
+
Jekyll.logger.info "bad nonce! trying again.."
|
64
|
+
challenge.request_verification
|
57
65
|
end
|
58
66
|
|
59
67
|
def await_verification_confirmation
|
@@ -70,6 +78,10 @@ module Jekyll
|
|
70
78
|
end
|
71
79
|
end
|
72
80
|
|
81
|
+
def update_gitlab_pages
|
82
|
+
gitlab_client.update_certificate! certificate.fullchain_to_pem, certificate.request.private_key.to_pem
|
83
|
+
end
|
84
|
+
|
73
85
|
def display_certificate
|
74
86
|
Jekyll.logger.info "Certifcate retrieved!"
|
75
87
|
Jekyll.logger.info "Go to https://gitlab.com/#{gitlab_repo}/pages"
|
@@ -114,6 +126,10 @@ module Jekyll
|
|
114
126
|
end
|
115
127
|
end
|
116
128
|
|
129
|
+
def gitlab_client
|
130
|
+
@gitlab_client ||= GitlabClient.new
|
131
|
+
end
|
132
|
+
|
117
133
|
def challenge
|
118
134
|
@challenge ||= client.challenge
|
119
135
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-gitlab-letsencrypt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Aiken
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: '0.6'
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: '0.6'
|
125
125
|
description: Automate letsencrypt renewals for gitlab pages.
|
126
126
|
email:
|
127
127
|
- 60tonangel@gmail.com
|
@@ -142,8 +142,8 @@ files:
|
|
142
142
|
- lib/jekyll/commands/gitlab/letsencrypt.rb
|
143
143
|
- lib/jekyll/gitlab/letsencrypt.rb
|
144
144
|
- lib/jekyll/gitlab/letsencrypt/acme.rb
|
145
|
-
- lib/jekyll/gitlab/letsencrypt/committer.rb
|
146
145
|
- lib/jekyll/gitlab/letsencrypt/configuration.rb
|
146
|
+
- lib/jekyll/gitlab/letsencrypt/gitlab_client.rb
|
147
147
|
- lib/jekyll/gitlab/letsencrypt/process.rb
|
148
148
|
- lib/jekyll/gitlab/letsencrypt/version.rb
|
149
149
|
homepage: https://github.com/JustinAiken/jekyll-gitlab-letsencrypt
|