bullion 0.1.3 → 0.3.1
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/.roxanne.yml +14 -0
- data/.rspec +0 -1
- data/.rubocop.yml +25 -6
- data/.ruby-version +1 -0
- data/Dockerfile +6 -16
- data/Gemfile +1 -1
- data/Gemfile.lock +99 -89
- data/README.md +2 -2
- data/Rakefile +57 -39
- data/bin/console +3 -3
- data/bullion.gemspec +38 -36
- data/config/puma.rb +1 -1
- data/config.ru +5 -5
- data/db/migrate/20210104060422_create_certificates.rb +1 -1
- data/db/migrate/20210105060406_create_orders.rb +1 -1
- data/db/migrate/20210106052306_create_authorizations.rb +1 -1
- data/db/schema.rb +20 -21
- data/lib/bullion/acme/error.rb +9 -9
- data/lib/bullion/challenge_client.rb +4 -4
- data/lib/bullion/challenge_clients/dns.rb +34 -22
- data/lib/bullion/challenge_clients/http.rb +12 -8
- data/lib/bullion/helpers/acme.rb +30 -40
- data/lib/bullion/helpers/service.rb +2 -2
- data/lib/bullion/helpers/ssl.rb +50 -42
- data/lib/bullion/models/account.rb +3 -3
- data/lib/bullion/models/authorization.rb +1 -1
- data/lib/bullion/models/certificate.rb +3 -3
- data/lib/bullion/models/challenge.rb +12 -5
- data/lib/bullion/models/nonce.rb +1 -1
- data/lib/bullion/models/order.rb +1 -1
- data/lib/bullion/models.rb +6 -6
- data/lib/bullion/rspec/challenge_clients/dns.rb +22 -0
- data/lib/bullion/rspec/challenge_clients/http.rb +16 -0
- data/lib/bullion/service.rb +3 -2
- data/lib/bullion/services/ca.rb +107 -91
- data/lib/bullion/services/ping.rb +6 -6
- data/lib/bullion/version.rb +3 -3
- data/lib/bullion.rb +58 -45
- data/scripts/build.sh +3 -0
- data/scripts/release.sh +9 -0
- data/scripts/test.sh +6 -0
- metadata +65 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1897a626efbdecba9680874c7c3266b74bcfdbbe75e6b9646876cdac0951166
|
4
|
+
data.tar.gz: 9615ce0ee849c308eb6c0e19ca265e08f2794decb0b204fe1d3b4ed0896e7705
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f78395c368c1b52af2cf043615c89925697f48faf40d7fa5623198b44b14eece6085d7a49d00bbaff53c7e4d24dafe2fb8fb65fc7f788a872de98c3a75e6aa2a
|
7
|
+
data.tar.gz: d89899a9513543bbba121496a4c214f96ee327e98d7993c5806b436a32e2c16256dc9296f82fa74ab3a558ddaba8755dd895c8534a07e77580f5b964efbad118
|
data/.roxanne.yml
ADDED
data/.rspec
CHANGED
data/.rubocop.yml
CHANGED
@@ -3,18 +3,18 @@ Layout/LineLength:
|
|
3
3
|
|
4
4
|
AllCops:
|
5
5
|
Exclude:
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
TargetRubyVersion: 2.6
|
6
|
+
- 'db/schema.rb'
|
7
|
+
- 'vendor/**/*'
|
8
|
+
TargetRubyVersion: 3.1
|
10
9
|
NewCops: enable
|
11
10
|
|
12
11
|
Metrics/AbcSize:
|
13
12
|
Max: 21
|
14
13
|
|
15
14
|
Metrics/BlockLength:
|
16
|
-
Max:
|
15
|
+
Max: 35
|
17
16
|
Exclude:
|
17
|
+
- 'spec/**/*_spec.rb'
|
18
18
|
- 'Rakefile'
|
19
19
|
- '*.gemspec'
|
20
20
|
|
@@ -22,10 +22,29 @@ Metrics/MethodLength:
|
|
22
22
|
Max: 20
|
23
23
|
|
24
24
|
Metrics/ModuleLength:
|
25
|
-
Max:
|
25
|
+
Max: 160
|
26
|
+
Exclude:
|
27
|
+
- 'spec/**/*_spec.rb'
|
26
28
|
|
27
29
|
Metrics/ClassLength:
|
28
30
|
Max: 300
|
31
|
+
Exclude:
|
32
|
+
- 'spec/**/*_spec.rb'
|
33
|
+
|
34
|
+
Gemspec/RequireMFA:
|
35
|
+
Enabled: false
|
36
|
+
|
37
|
+
Style/MixinUsage:
|
38
|
+
Exclude:
|
39
|
+
- "bin/console"
|
40
|
+
|
41
|
+
Style/StringLiterals:
|
42
|
+
Enabled: true
|
43
|
+
EnforcedStyle: double_quotes
|
44
|
+
|
45
|
+
Style/StringLiteralsInInterpolation:
|
46
|
+
Enabled: true
|
47
|
+
EnforcedStyle: double_quotes
|
29
48
|
|
30
49
|
Style/StringConcatenation:
|
31
50
|
Exclude:
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.1.2
|
data/Dockerfile
CHANGED
@@ -1,34 +1,25 @@
|
|
1
|
-
FROM ruby:
|
1
|
+
FROM ruby:3.1 AS build
|
2
2
|
|
3
3
|
ENV RACK_ENV=development
|
4
4
|
|
5
5
|
COPY . /build
|
6
6
|
|
7
|
-
RUN
|
8
|
-
&& apk --no-cache add git mariadb-client mariadb-connector-c \
|
9
|
-
runit sqlite-dev \
|
10
|
-
&& apk --no-cache add --virtual build-dependencies \
|
11
|
-
build-base mariadb-dev
|
7
|
+
RUN apt-get update && apt-get upgrade -y && apt-get install -y libsqlite3-dev sqlite3 curl libsodium-dev
|
12
8
|
|
13
|
-
RUN
|
14
|
-
&& cd /build \
|
9
|
+
RUN cd /build \
|
15
10
|
&& gem build bullion.gemspec \
|
16
11
|
&& mv bullion*.gem /bullion.gem
|
17
12
|
|
18
13
|
WORKDIR /build
|
19
14
|
|
20
|
-
FROM ruby:
|
15
|
+
FROM ruby:3.1
|
21
16
|
LABEL maintainer="Jonathan Gnagy <jonathan.gnagy@gmail.com>"
|
22
17
|
|
23
18
|
ENV BULLION_PORT=9292
|
24
19
|
ENV BULLION_ENVIRONMENT=development
|
25
20
|
ENV DATABASE_URL=sqlite3:///tmp/bullion.db
|
26
21
|
|
27
|
-
RUN
|
28
|
-
&& apk --no-cache add git mariadb-client mariadb-connector-c \
|
29
|
-
runit sqlite-dev \
|
30
|
-
&& apk --no-cache add --virtual build-dependencies \
|
31
|
-
build-base mariadb-dev
|
22
|
+
RUN apt-get update && apt-get upgrade -y && apt-get -y install libsqlite3-dev sqlite3 curl libsodium-dev
|
32
23
|
|
33
24
|
RUN mkdir /app
|
34
25
|
|
@@ -47,8 +38,7 @@ RUN chmod +x /entrypoint.sh \
|
|
47
38
|
|
48
39
|
WORKDIR /app
|
49
40
|
|
50
|
-
RUN gem install bullion.gem
|
51
|
-
&& apk del build-dependencies
|
41
|
+
RUN gem install bullion.gem
|
52
42
|
|
53
43
|
USER nobody
|
54
44
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,132 +1,140 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bullion (0.1
|
4
|
+
bullion (0.3.1)
|
5
5
|
httparty (~> 0.18)
|
6
|
-
json (~> 2.
|
7
|
-
jwt (~>
|
6
|
+
json (~> 2.6)
|
7
|
+
jwt (~> 2.4)
|
8
8
|
mysql2 (~> 0.5)
|
9
|
-
openssl (~>
|
10
|
-
prometheus-client (~>
|
11
|
-
puma (~>
|
12
|
-
sinatra (~> 2.
|
9
|
+
openssl (~> 3.0)
|
10
|
+
prometheus-client (~> 4.0)
|
11
|
+
puma (~> 5.6)
|
12
|
+
sinatra (~> 2.2)
|
13
13
|
sinatra-activerecord (~> 2.0)
|
14
|
-
sinatra-contrib (~> 2.
|
14
|
+
sinatra-contrib (~> 2.2)
|
15
15
|
sqlite3 (~> 1.4)
|
16
16
|
|
17
17
|
GEM
|
18
18
|
remote: https://rubygems.org/
|
19
19
|
specs:
|
20
|
-
acme-client (2.0.
|
21
|
-
faraday (>= 0
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
20
|
+
acme-client (2.0.11)
|
21
|
+
faraday (>= 1.0, < 3.0.0)
|
22
|
+
faraday-retry (~> 1.0)
|
23
|
+
activemodel (7.0.3.1)
|
24
|
+
activesupport (= 7.0.3.1)
|
25
|
+
activerecord (7.0.3.1)
|
26
|
+
activemodel (= 7.0.3.1)
|
27
|
+
activesupport (= 7.0.3.1)
|
28
|
+
activesupport (7.0.3.1)
|
28
29
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
29
30
|
i18n (>= 1.6, < 2)
|
30
31
|
minitest (>= 5.1)
|
31
32
|
tzinfo (~> 2.0)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
httparty (0.18.1)
|
33
|
+
ast (2.4.2)
|
34
|
+
byebug (11.1.3)
|
35
|
+
concurrent-ruby (1.1.10)
|
36
|
+
diff-lcs (1.5.0)
|
37
|
+
docile (1.4.0)
|
38
|
+
faraday (2.3.0)
|
39
|
+
faraday-net_http (~> 2.0)
|
40
|
+
ruby2_keywords (>= 0.0.4)
|
41
|
+
faraday-net_http (2.0.3)
|
42
|
+
faraday-retry (1.0.3)
|
43
|
+
httparty (0.20.0)
|
44
44
|
mime-types (~> 3.0)
|
45
45
|
multi_xml (>= 0.5.2)
|
46
|
-
i18n (1.
|
46
|
+
i18n (1.12.0)
|
47
47
|
concurrent-ruby (~> 1.0)
|
48
|
-
json (2.
|
49
|
-
jwt (
|
50
|
-
mime-types (3.
|
48
|
+
json (2.6.2)
|
49
|
+
jwt (2.4.1)
|
50
|
+
mime-types (3.4.1)
|
51
51
|
mime-types-data (~> 3.2015)
|
52
|
-
mime-types-data (3.
|
53
|
-
minitest (5.
|
52
|
+
mime-types-data (3.2022.0105)
|
53
|
+
minitest (5.16.2)
|
54
54
|
multi_json (1.15.0)
|
55
55
|
multi_xml (0.6.0)
|
56
|
-
|
57
|
-
mustermann (1.1.1)
|
56
|
+
mustermann (1.1.2)
|
58
57
|
ruby2_keywords (~> 0.0.1)
|
59
|
-
mysql2 (0.5.
|
60
|
-
|
61
|
-
|
62
|
-
|
58
|
+
mysql2 (0.5.4)
|
59
|
+
nio4r (2.5.8)
|
60
|
+
openssl (3.0.0)
|
61
|
+
parallel (1.22.1)
|
62
|
+
parser (3.1.2.0)
|
63
63
|
ast (~> 2.4.1)
|
64
|
-
prometheus-client (
|
65
|
-
puma (
|
66
|
-
|
67
|
-
rack
|
64
|
+
prometheus-client (4.0.0)
|
65
|
+
puma (5.6.4)
|
66
|
+
nio4r (~> 2.0)
|
67
|
+
rack (2.2.4)
|
68
|
+
rack-protection (2.2.1)
|
68
69
|
rack
|
69
|
-
rack-test (0.
|
70
|
-
rack (>= 1.
|
71
|
-
rainbow (3.
|
70
|
+
rack-test (2.0.2)
|
71
|
+
rack (>= 1.3)
|
72
|
+
rainbow (3.1.1)
|
72
73
|
rake (12.3.3)
|
73
|
-
regexp_parser (2.0
|
74
|
-
rexml (3.2.
|
75
|
-
rspec (3.
|
76
|
-
rspec-core (~> 3.
|
77
|
-
rspec-expectations (~> 3.
|
78
|
-
rspec-mocks (~> 3.
|
79
|
-
rspec-core (3.
|
80
|
-
rspec-support (~> 3.
|
81
|
-
rspec-expectations (3.
|
74
|
+
regexp_parser (2.5.0)
|
75
|
+
rexml (3.2.5)
|
76
|
+
rspec (3.11.0)
|
77
|
+
rspec-core (~> 3.11.0)
|
78
|
+
rspec-expectations (~> 3.11.0)
|
79
|
+
rspec-mocks (~> 3.11.0)
|
80
|
+
rspec-core (3.11.0)
|
81
|
+
rspec-support (~> 3.11.0)
|
82
|
+
rspec-expectations (3.11.0)
|
82
83
|
diff-lcs (>= 1.2.0, < 2.0)
|
83
|
-
rspec-support (~> 3.
|
84
|
-
rspec-mocks (3.
|
84
|
+
rspec-support (~> 3.11.0)
|
85
|
+
rspec-mocks (3.11.1)
|
85
86
|
diff-lcs (>= 1.2.0, < 2.0)
|
86
|
-
rspec-support (~> 3.
|
87
|
-
rspec-support (3.
|
88
|
-
rubocop (
|
87
|
+
rspec-support (~> 3.11.0)
|
88
|
+
rspec-support (3.11.0)
|
89
|
+
rubocop (1.31.2)
|
90
|
+
json (~> 2.3)
|
89
91
|
parallel (~> 1.10)
|
90
|
-
parser (>=
|
92
|
+
parser (>= 3.1.0.0)
|
91
93
|
rainbow (>= 2.2.2, < 4.0)
|
92
|
-
regexp_parser (>= 1.8)
|
93
|
-
rexml
|
94
|
-
rubocop-ast (>=
|
94
|
+
regexp_parser (>= 1.8, < 3.0)
|
95
|
+
rexml (>= 3.2.5, < 4.0)
|
96
|
+
rubocop-ast (>= 1.18.0, < 2.0)
|
95
97
|
ruby-progressbar (~> 1.7)
|
96
|
-
unicode-display_width (>= 1.4.0, <
|
97
|
-
rubocop-ast (1.
|
98
|
-
parser (>=
|
98
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
99
|
+
rubocop-ast (1.19.1)
|
100
|
+
parser (>= 3.1.1.0)
|
101
|
+
rubocop-rake (0.6.0)
|
102
|
+
rubocop (~> 1.0)
|
103
|
+
rubocop-rspec (2.11.1)
|
104
|
+
rubocop (~> 1.19)
|
99
105
|
ruby-progressbar (1.11.0)
|
100
|
-
ruby2_keywords (0.0.
|
106
|
+
ruby2_keywords (0.0.5)
|
101
107
|
simplecov (0.21.2)
|
102
108
|
docile (~> 1.1)
|
103
109
|
simplecov-html (~> 0.11)
|
104
110
|
simplecov_json_formatter (~> 0.1)
|
105
|
-
simplecov-cobertura (1.
|
106
|
-
|
111
|
+
simplecov-cobertura (2.1.0)
|
112
|
+
rexml
|
113
|
+
simplecov (~> 0.19)
|
107
114
|
simplecov-html (0.12.3)
|
108
|
-
simplecov_json_formatter (0.1.
|
109
|
-
sinatra (2.1
|
115
|
+
simplecov_json_formatter (0.1.4)
|
116
|
+
sinatra (2.2.1)
|
110
117
|
mustermann (~> 1.0)
|
111
118
|
rack (~> 2.2)
|
112
|
-
rack-protection (= 2.1
|
119
|
+
rack-protection (= 2.2.1)
|
113
120
|
tilt (~> 2.0)
|
114
|
-
sinatra-activerecord (2.0.
|
121
|
+
sinatra-activerecord (2.0.25)
|
115
122
|
activerecord (>= 4.1)
|
116
123
|
sinatra (>= 1.0)
|
117
|
-
sinatra-contrib (2.1
|
124
|
+
sinatra-contrib (2.2.1)
|
118
125
|
multi_json
|
119
126
|
mustermann (~> 1.0)
|
120
|
-
rack-protection (= 2.1
|
121
|
-
sinatra (= 2.1
|
127
|
+
rack-protection (= 2.2.1)
|
128
|
+
sinatra (= 2.2.1)
|
122
129
|
tilt (~> 2.0)
|
123
|
-
sqlite3 (1.4.
|
130
|
+
sqlite3 (1.4.4)
|
124
131
|
tilt (2.0.10)
|
125
132
|
tzinfo (2.0.4)
|
126
133
|
concurrent-ruby (~> 1.0)
|
127
|
-
unicode-display_width (
|
128
|
-
|
129
|
-
|
134
|
+
unicode-display_width (2.2.0)
|
135
|
+
webrick (1.7.0)
|
136
|
+
yard (0.9.28)
|
137
|
+
webrick (~> 1.7.0)
|
130
138
|
|
131
139
|
PLATFORMS
|
132
140
|
ruby
|
@@ -134,15 +142,17 @@ PLATFORMS
|
|
134
142
|
DEPENDENCIES
|
135
143
|
acme-client (~> 2.0)
|
136
144
|
bullion!
|
137
|
-
bundler (~> 2.
|
138
|
-
byebug (~>
|
139
|
-
rack-test (~> 0
|
145
|
+
bundler (~> 2.3)
|
146
|
+
byebug (~> 11)
|
147
|
+
rack-test (~> 2.0)
|
140
148
|
rake (~> 12.3)
|
141
149
|
rspec (~> 3.10)
|
142
|
-
rubocop (~>
|
143
|
-
|
144
|
-
|
150
|
+
rubocop (~> 1.31)
|
151
|
+
rubocop-rake (~> 0.6)
|
152
|
+
rubocop-rspec (~> 2.11)
|
153
|
+
simplecov (~> 0.21)
|
154
|
+
simplecov-cobertura (~> 2.1)
|
145
155
|
yard (~> 0.9)
|
146
156
|
|
147
157
|
BUNDLED WITH
|
148
|
-
2.
|
158
|
+
2.3.10
|
data/README.md
CHANGED
@@ -36,8 +36,8 @@ Whether run locally or via Docker, the following environment variables configure
|
|
36
36
|
| `CA_CERT_PATH` | `$CA_DIR/tls.crt` | Public cert for Bullion. If Bullion is an intermediate CA, you'll want to include the root CA's public cert in this file as well the signed cert for Bullion. |
|
37
37
|
| `CA_DOMAINS` | `example.com` | A comma-delimited list of domains for which Bullion will sign certificate requests. Subdomains are automatically allowed. Certificates containing other domains will be rejected. |
|
38
38
|
| `CERT_VALIDITY_DURATION` | `7776000` | How long should issued certs be valid (in seconds)? Default is 90 days. |
|
39
|
-
| `DATABASE_URL` | _None_ | A shorthand for telling Bullion how to connect to a database. Acceptable URLs will either
|
40
|
-
| `DNS01_NAMESERVERS` |
|
39
|
+
| `DATABASE_URL` | _None_ | **(Required)** A shorthand for telling Bullion how to connect to a database. Acceptable URLs will either begin with `sqlite3:` or [`mysql2://`](https://github.com/brianmario/mysql2#using-active-records-database_url). |
|
40
|
+
| `DNS01_NAMESERVERS` | _None_ | A comma-delimited list of nameservers to use for resolving [DNS-01](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) challenges. Usually you'll want this to be set to your _internal_ nameservers so internal names resolve correctly. When not set, it'll use the host's DNS. |
|
41
41
|
| `LOG_LEVEL` | `warn` | Log level for Bullion. Supported levels (starting with the noisiest) are debug, info, warn, error, and fatal. |
|
42
42
|
| `BULLION_PORT` | `9292` | TCP port Bullion will listen on. |
|
43
43
|
| `MIN_THREADS` | `2` | Minimum number of [Puma](https://puma.io/) threads for processing requests. |
|
data/Rakefile
CHANGED
@@ -1,91 +1,109 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
ENV["RACK_ENV"] ||= "development"
|
4
|
+
|
5
|
+
if %w[development test].include? ENV["RACK_ENV"]
|
6
|
+
ENV["DATABASE_URL"] = "sqlite3:#{File.expand_path(".")}/tmp/db/#{ENV["RACK_ENV"]}.sqlite3"
|
5
7
|
end
|
6
8
|
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
9
|
+
require "bundler/gem_tasks"
|
10
|
+
require "rspec/core/rake_task"
|
11
|
+
require "rubocop/rake_task"
|
12
|
+
require "yard"
|
13
|
+
require "openssl"
|
14
|
+
require "sqlite3"
|
15
|
+
require "sinatra/activerecord/rake"
|
14
16
|
|
15
17
|
namespace :db do
|
16
18
|
task :load_config do
|
17
|
-
ActiveRecord::Base.establish_connection(ENV
|
19
|
+
ActiveRecord::Base.establish_connection(url: ENV.fetch("DATABASE_URL", nil))
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
|
-
RSpec::Core::RakeTask.new(:spec)
|
23
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
24
|
+
t.exclude_pattern = "spec/integration/**{,/*/**}/*_spec.rb"
|
25
|
+
t.rspec_opts = "--require spec_helper"
|
26
|
+
end
|
27
|
+
RSpec::Core::RakeTask.new(:integration_testing) do |t|
|
28
|
+
t.pattern = "spec/integration/**{,/*/**}/*_spec.rb"
|
29
|
+
t.rspec_opts = "--require integration_helper"
|
30
|
+
end
|
22
31
|
RuboCop::RakeTask.new(:rubocop)
|
23
32
|
YARD::Rake::YardocTask.new
|
24
33
|
|
25
34
|
task :prep do
|
26
|
-
FileUtils.mkdir_p(File.join(File.expand_path(
|
27
|
-
ENV[
|
28
|
-
ENV[
|
29
|
-
ENV[
|
35
|
+
FileUtils.mkdir_p(File.join(File.expand_path("."), "tmp"))
|
36
|
+
ENV["CA_DIR"] = File.join(File.expand_path("."), "tmp").to_s
|
37
|
+
ENV["CA_SECRET"] = "SomeS3cret"
|
38
|
+
ENV["CA_DOMAINS"] = "test.domain"
|
30
39
|
|
31
40
|
key = OpenSSL::PKey::RSA.new(4096)
|
32
|
-
File.
|
33
|
-
|
34
|
-
end
|
41
|
+
File.write(File.join(File.expand_path("."), "tmp", "tls.key"),
|
42
|
+
key.to_pem(OpenSSL::Cipher.new("aes-128-cbc"), ENV.fetch("CA_SECRET", nil)))
|
35
43
|
|
36
44
|
root_ca = OpenSSL::X509::Certificate.new
|
37
45
|
root_ca.version = 2
|
38
46
|
root_ca.serial = (2**rand(10..20)) - 1
|
39
47
|
root_ca.subject = OpenSSL::X509::Name.parse(
|
40
|
-
%w[test domain].reverse.map { |piece| "DC=#{piece}" }.join(
|
48
|
+
%w[test domain].reverse.map { |piece| "DC=#{piece}" }.join("/") + "/CN=bullion"
|
41
49
|
)
|
42
50
|
root_ca.issuer = root_ca.subject # root CA's are "self-signed"
|
43
51
|
root_ca.public_key = key.public_key
|
44
52
|
root_ca.not_before = Time.now
|
45
|
-
root_ca.not_after = root_ca.not_before + 5 * 365 * 24 * 60 * 60 # 5 years validity
|
53
|
+
root_ca.not_after = root_ca.not_before + (5 * 365 * 24 * 60 * 60) # 5 years validity
|
46
54
|
ef = OpenSSL::X509::ExtensionFactory.new
|
47
55
|
ef.subject_certificate = root_ca
|
48
56
|
ef.issuer_certificate = root_ca
|
49
57
|
root_ca.add_extension(
|
50
|
-
ef.create_extension(
|
58
|
+
ef.create_extension("basicConstraints", "CA:TRUE", true)
|
51
59
|
)
|
52
60
|
root_ca.add_extension(
|
53
|
-
ef.create_extension(
|
61
|
+
ef.create_extension("keyUsage", "keyCertSign, cRLSign", true)
|
54
62
|
)
|
55
63
|
root_ca.add_extension(
|
56
|
-
ef.create_extension(
|
64
|
+
ef.create_extension("subjectKeyIdentifier", "hash", false)
|
57
65
|
)
|
58
66
|
root_ca.add_extension(
|
59
|
-
ef.create_extension(
|
67
|
+
ef.create_extension("authorityKeyIdentifier", "keyid:always", false)
|
60
68
|
)
|
61
|
-
root_ca.sign(key, OpenSSL::Digest.new(
|
62
|
-
File.
|
63
|
-
f.write root_ca.to_pem
|
64
|
-
end
|
69
|
+
root_ca.sign(key, OpenSSL::Digest.new("SHA256"))
|
70
|
+
File.write(File.join(File.expand_path("."), "tmp", "tls.crt"), root_ca.to_pem)
|
65
71
|
end
|
66
72
|
|
67
73
|
task :demo do
|
68
|
-
|
74
|
+
rack_env = "test"
|
75
|
+
database_url = "sqlite3:#{File.expand_path(".")}/tmp/db/#{rack_env}.sqlite3"
|
76
|
+
system("RACK_ENV=\"#{rack_env}\" DATABASE_URL=\"#{database_url}\" bundle exec rake db:migrate")
|
77
|
+
system(
|
78
|
+
"RACK_ENV=\"#{rack_env}\" DATABASE_URL=\"#{database_url}\" " \
|
79
|
+
"LOG_LEVEL='#{ENV.fetch("LOG_LEVEL", "info")}' " \
|
80
|
+
"rackup -D -P #{File.expand_path(".")}/tmp/daemon.pid"
|
81
|
+
)
|
69
82
|
end
|
70
83
|
|
71
84
|
task :foreground_demo do
|
72
|
-
system("rackup -P #{File.expand_path(
|
85
|
+
system("rackup -P #{File.expand_path(".")}/tmp/daemon.pid")
|
73
86
|
end
|
74
87
|
|
75
88
|
task :cleanup do
|
76
89
|
at_exit do
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
FileUtils.
|
81
|
-
|
82
|
-
|
83
|
-
ENV[
|
90
|
+
if File.exist?("#{File.expand_path(".")}/tmp/daemon.pid")
|
91
|
+
system("kill $(cat #{File.expand_path(".")}/tmp/daemon.pid)")
|
92
|
+
end
|
93
|
+
FileUtils.rm_f(File.join(File.expand_path("."), "tmp", "tls.crt"))
|
94
|
+
FileUtils.rm_f(File.join(File.expand_path("."), "tmp", "tls.key"))
|
95
|
+
FileUtils.rm_rf(File.join(File.expand_path("."), "tmp", "db"))
|
96
|
+
ENV["CA_DIR"] = nil
|
97
|
+
ENV["CA_SECRET"] = nil
|
98
|
+
ENV["CA_DOMAINS"] = nil
|
84
99
|
end
|
85
100
|
end
|
86
101
|
|
87
|
-
Rake::Task[
|
102
|
+
Rake::Task["integration_testing"].enhance(["cleanup"])
|
103
|
+
|
104
|
+
task test: %i[prep db:migrate spec demo integration_testing]
|
105
|
+
task unit: %i[prep db:migrate spec]
|
88
106
|
|
89
|
-
task default: %i[
|
107
|
+
task default: %i[test rubocop yard]
|
90
108
|
|
91
109
|
task local_demo: %i[prep db:migrate foreground_demo]
|
data/bin/console
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
4
|
+
require "bundler/setup"
|
5
|
+
require "bullion"
|
6
6
|
|
7
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -11,5 +11,5 @@ require 'bullion'
|
|
11
11
|
# require "pry"
|
12
12
|
# Pry.start
|
13
13
|
|
14
|
-
require
|
14
|
+
require "irb"
|
15
15
|
IRB.start(__FILE__)
|