r509-middleware-certwriter 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +20 -0
- data/Rakefile +36 -0
- data/doc/R509.html +117 -0
- data/doc/R509/Middleware.html +117 -0
- data/doc/R509/Middleware/Certwriter.html +339 -0
- data/doc/_index.html +140 -0
- data/doc/class_list.html +53 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +328 -0
- data/doc/file.README.html +95 -0
- data/doc/file_list.html +55 -0
- data/doc/frames.html +28 -0
- data/doc/index.html +95 -0
- data/doc/js/app.js +214 -0
- data/doc/js/full_list.js +173 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +68 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/r509/middleware/certwriter.rb +57 -0
- data/lib/r509/middleware/certwriter/version.rb +7 -0
- data/spec/fixtures.rb +16 -0
- data/spec/fixtures/cert1.pem +24 -0
- data/spec/fixtures/san.pem +26 -0
- data/spec/fixtures/utf.pem +21 -0
- data/spec/fixtures/wildcard.pem +22 -0
- data/spec/middleware_spec.rb +188 -0
- data/spec/spec_helper.rb +16 -0
- metadata +142 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEVTCCAz2gAwIBAgIQK5l6hFau2oVFyjrq4Y3tYjANBgkqhkiG9w0BAQUFADBI
|
3
|
+
MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
|
4
|
+
FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTExMDIxNzAxMDkxM1oXDTExMDIx
|
5
|
+
ODAyMzYyNVowXDESMBAGA1UEAxMJbGFuZ3VpLnNoMRAwDgYDVQQHEwdDaGljYWdv
|
6
|
+
MREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1BhdWwg
|
7
|
+
S2VocmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3/vt5cvm4ObA
|
8
|
+
AUoKXqjT9hWbN7c//piYtypGCvUWPqXElIWSpftMfmyIyujXGVx1TtpjSTX1VORB
|
9
|
+
J1N4ZmGsEnyS5Z4jw6kFtKBEA6avIezYfAwUU+GKL5xvJ2iuwPgVzrDwADD1lSio
|
10
|
+
worMdqeZMfClVBbeLPE1ZZQrj1YV4ywpfEUVNNkmYLxetT8WyGFmFopiQWv21v0u
|
11
|
+
BWfWa1c8wQMrLNSzDot76+CgqC/j9AFcfv75M77WktDlz8zFm142UUe0Clx3DzlO
|
12
|
+
k+OepGYLUhRZaGhiP56qW2kgQpeQ+Otiu7NrJP1oa6lP1inzr25aStWtt9+0uJAJ
|
13
|
+
LvHisvPV7QIDAQABo4IBJTCCASEwCQYDVR0TBAIwADAdBgNVHQ4EFgQUOnG63iFQ
|
14
|
+
miWaAnvO7ve38SmF2FEwHwYDVR0jBBgwFoAUQjK2FvoE/f5dS3rD/fdMQB1aQ68w
|
15
|
+
CwYDVR0PBAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMDQGA1UdHwQtMCswKaAn
|
16
|
+
oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NUQ0EuY3JsMEQGA1UdIAQ9
|
17
|
+
MDswOQYMYIZIAYb9ZAEBAgMBMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly9zc2wudHJ1
|
18
|
+
c3R3YXZlLmNvbS9DQTA2BgNVHREELzAtgglsYW5ndWkuc2iCC3ZpY3RvbHkuY29t
|
19
|
+
ghNteXRlYW1nb3Ryb2JiZWQuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQB8t6JEw494
|
20
|
+
wMHyPN8K65PmImqdI4qL5W4T141vG+SnynSsyF2gdnwfWC8esoVOBK8LxSxq5dqL
|
21
|
+
7DRWwJww5YELWhVGz9BMGqpsUQ8ea1EX2YRkguqhIs9Ox/D0zcE5T0t4CXAoqJoW
|
22
|
+
h1A3UBknOgHNtxbBcQUINITj+IIQ99yZdf/X5QnuyRxk+FheUtuR/PGSHi5s0GOh
|
23
|
+
aEysvcklQTZXaQ+yeq5mH9LrKlBaEgo2BWnzWuWbudNJ3Pn16MHE4hGesiO/ifu4
|
24
|
+
D4ZcDusOOKJISgellMBwEX9njm771lzcVrXrg8IxBwHAmbA5SlTd12DOhrViPuEC
|
25
|
+
DhMwdOfwCNq/
|
26
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDcTCCAlmgAwIBAgIVAOwRcCniDRHmYonGNci2hn7WEUjbMA0GCSqGSIb3DQEB
|
3
|
+
BQUAMFgxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhJbGxpbm9pczEQMA4GA1UEBwwH
|
4
|
+
Q2hpY2FnbzERMA8GA1UECgwIcjUwOSBMTEMxETAPBgNVBAMMCMO8dGYuY29tMB4X
|
5
|
+
DTEyMDczMTA5NTk0OFoXDTEyMDgwNTE1NTk0OFowWDELMAkGA1UEBhMCVVMxETAP
|
6
|
+
BgNVBAgMCElsbGlub2lzMRAwDgYDVQQHDAdDaGljYWdvMREwDwYDVQQKDAhyNTA5
|
7
|
+
IExMQzERMA8GA1UEAwwIw7x0Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
8
|
+
ggEKAoIBAQCcM1YlpONMNoK+VZRe/fygehtQoNhc/NEvpD4g9z61jY9JrRAiS/sj
|
9
|
+
FqVYUyJIoQ8x2tpiJMqzTfdTXVbXdVi6iuDYGg6oiski3N8wa8Ya2FWEWS0nCdiM
|
10
|
+
AYCX5imyHY9qJqRCGo8mzFjdPQ1YL5qEIN8a7to82F81P9D+AWaPeXgvR/AuWNXo
|
11
|
+
ZTTWDxf2hHhBI00lMkQYk/JP//jq4vhArnvhP/NjQRMPv+Oc7/oKG0dPGp8IMVt0
|
12
|
+
B+Gus/Lte6GFqSt3A4j3JslUR7s5tZMvNoYCHTp70n3So28U7zSFjqtLZ0qYdMnw
|
13
|
+
+ysrVeemz4iUBjLFDuUoUFETLJCZxN4HAgMBAAGjMjAwMA8GA1UdEwEB/wQFMAMB
|
14
|
+
Af8wHQYDVR0OBBYEFIZITcrz5duBFkyK1USyvJn6dBh2MA0GCSqGSIb3DQEBBQUA
|
15
|
+
A4IBAQCFzmlRVaLjzo3CzETtNcg3rqItIugXX1xtVBYdmXE+OZu54zEUCKRphave
|
16
|
+
4j/fjx7UVRlZJfkpxw77bXcOt+pgAuKogVv8b0jNVLI/IJSqpdLYRmNBmO/z5Tsn
|
17
|
+
bJ2anRLxYABxx3QiyxbteJ5kNyqkOXdC92YT0ajYcsI1PYr5bC+yc4oju3dkVHox
|
18
|
+
6nbghWIZxbLq08DO3FwbTZk7OOERFYakntaEV7A9HI75pct9fR03lej86wthLCva
|
19
|
+
bf4jZw6fbLZTMK8AIGm0dSlkNWzN7XB6xDyxxYoCauZc+TBoZg4hXAzwfgZcX3Rr
|
20
|
+
MHJh+Ni/iMiCFSZPcZqauprdCldD
|
21
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,22 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDpzCCAo+gAwIBAgIFMUeGsoAwDQYJKoZIhvcNAQEFBQAwSDELMAkGA1UEBhMC
|
3
|
+
VVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5T
|
4
|
+
ZWN1cmVUcnVzdCBDQTAeFw0wOTA1MjkyMDM0NTdaFw0xMDA1MjkyMDM0NTdaMHcx
|
5
|
+
CzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQMA4GA1UEBxMHQ2hpY2Fn
|
6
|
+
bzEtMCsGA1UEChMkVHJ1c3R3YXZlIChUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4p
|
7
|
+
MRQwEgYDVQQDFAsqLnhyYW1wLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
|
8
|
+
gYEA16PhTcHPpJcvXj0sO+hYt4z2zKn5XRj0jrDpwzahxUWn0UWfsYxJHtOpSm/p
|
9
|
+
O8zM3aCv5YI+0DwVWhzkKzh15nL5XtiyhXz2CSg4IskVqYlHJwLN1TasYpiQ3chj
|
10
|
+
0v33GGXg0JjCdX5XM8fl2K/MCHpl6HTNmxHVpr4sghyUBFUCAwEAAaOB7DCB6TAJ
|
11
|
+
BgNVHRMEAjAAMB0GA1UdDgQWBBSGo0yuScr4ea0rLYwuTnN/mmD5aDAfBgNVHSME
|
12
|
+
GDAWgBRCMrYW+gT9/l1LesP990xAHVpDrzALBgNVHQ8EBAMCBaAwEwYDVR0lBAww
|
13
|
+
CgYIKwYBBQUHAwEwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL2NybC5zZWN1cmV0
|
14
|
+
cnVzdC5jb20vU1RDQS5jcmwwRAYDVR0gBD0wOzA5BgxghkgBhv1kAQECAwEwKTAn
|
15
|
+
BggrBgEFBQcCARYbaHR0cDovL3NzbC50cnVzdHdhdmUuY29tL0NBMA0GCSqGSIb3
|
16
|
+
DQEBBQUAA4IBAQBxuF3OJYj4e/4flpn2xRB5HTZtdTJGa0xdhs4cuZfDaH1J26kS
|
17
|
+
D/DEJSjQijxMmRCkBFzjqet095Nxo/Gk4Ak+A6I49vWfg4EYEGfCHq95D40EoLUl
|
18
|
+
+P4n4SqGUWuHCdVue8V61qGhMv4t4aqaodO212oykfkwguX1t1QAqBisBd3trUJC
|
19
|
+
nqeHRdhPQfwSXbEgwPCnvS6QAngwg1BRCK5NJ2V2ybhaSHZLSzTV+n2sh03j2OAw
|
20
|
+
DX1jPcls0lN9TytLZJUkZJjgr/v2yYUlwEGC6ZMHE16ycVAbTxW94LBYKlsCpR3Q
|
21
|
+
kArWrEDOOBl5g0Va/FZliL046AN3EM2lYfWa
|
22
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,188 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "#{File.dirname(__FILE__)}/spec_helper"
|
3
|
+
require "sinatra"
|
4
|
+
require "logger"
|
5
|
+
require "fileutils"
|
6
|
+
|
7
|
+
class TestServer < Sinatra::Base
|
8
|
+
configure do
|
9
|
+
set :config_pool, nil
|
10
|
+
end
|
11
|
+
|
12
|
+
error StandardError do
|
13
|
+
env["sinatra.error"].message
|
14
|
+
end
|
15
|
+
|
16
|
+
get "/some/path/?" do
|
17
|
+
"return value"
|
18
|
+
end
|
19
|
+
|
20
|
+
post "/1/certificate/issue/?" do
|
21
|
+
if params["successful"]
|
22
|
+
if params["cert"]
|
23
|
+
params["cert"]
|
24
|
+
else
|
25
|
+
TestFixtures::CERT
|
26
|
+
end
|
27
|
+
elsif params["invalid_body"]
|
28
|
+
"invalid cert body"
|
29
|
+
else
|
30
|
+
raise StandardError.new("Error")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
post "/1/certificate/revoke/?" do
|
35
|
+
if params["successful"]
|
36
|
+
"CRL"
|
37
|
+
else
|
38
|
+
raise StandardError.new("Error")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
post "/1/certificate/unrevoke/?" do
|
43
|
+
if params["successful"]
|
44
|
+
"CRL"
|
45
|
+
else
|
46
|
+
raise StandardError.new("Error")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe R509::Middleware::Certwriter do
|
52
|
+
before :all do
|
53
|
+
@temp_write_directory = File.join("spec", "temp_write_directory")
|
54
|
+
FileUtils.makedirs(@temp_write_directory)
|
55
|
+
end
|
56
|
+
before :each do
|
57
|
+
@logger = double("logger")
|
58
|
+
@config = double("config")
|
59
|
+
@ca_cert = double("ca_cert")
|
60
|
+
@config_pool = double("config_pool")
|
61
|
+
Dependo::Registry[:log] = @logger
|
62
|
+
end
|
63
|
+
after :each do
|
64
|
+
Dir.entries(@temp_write_directory).select{|x| not x.start_with?(".")}.each do |entry|
|
65
|
+
File.delete(File.join(@temp_write_directory, entry))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
after :all do
|
69
|
+
Dir.delete(@temp_write_directory)
|
70
|
+
end
|
71
|
+
|
72
|
+
def app
|
73
|
+
test_server = TestServer
|
74
|
+
test_server.send(:set, :config_pool, @config_pool)
|
75
|
+
|
76
|
+
@app ||= R509::Middleware::Certwriter.new(test_server, @config)
|
77
|
+
end
|
78
|
+
|
79
|
+
context "some path" do
|
80
|
+
it "returns some return value" do
|
81
|
+
get "/some/path"
|
82
|
+
last_response.body.should == "return value"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "issuing" do
|
87
|
+
it "intercepts issuance" do
|
88
|
+
filename = "langui.sh_testy_211653423715.pem"
|
89
|
+
@config.should_receive(:[]).with("certwriter").and_return({"path"=>@temp_write_directory})
|
90
|
+
@logger.should_receive(:info).with("Writing: #{File.join(@temp_write_directory, filename)}")
|
91
|
+
|
92
|
+
post "/1/certificate/issue", :successful => true, :ca => "testy"
|
93
|
+
last_response.status.should == 200
|
94
|
+
last_response.body.should == TestFixtures::CERT
|
95
|
+
|
96
|
+
File.read(File.join(@temp_write_directory, filename)).should == TestFixtures::CERT
|
97
|
+
end
|
98
|
+
it "no certwriter" do
|
99
|
+
filename = "langui.sh_testy_211653423715.pem"
|
100
|
+
@config.should_receive(:[]).with("certwriter").and_return(nil)
|
101
|
+
@logger.should_receive(:error).twice
|
102
|
+
|
103
|
+
post "/1/certificate/issue", :successful => true, :ca => "testy"
|
104
|
+
last_response.status.should == 200
|
105
|
+
last_response.body.should == TestFixtures::CERT
|
106
|
+
|
107
|
+
File.exist?(File.join(@temp_write_directory, filename)).should == false
|
108
|
+
end
|
109
|
+
it "no certwriter path" do
|
110
|
+
filename = "langui.sh_testy_211653423715.pem"
|
111
|
+
@config.should_receive(:[]).with("certwriter").and_return({})
|
112
|
+
@logger.should_receive(:error).twice
|
113
|
+
|
114
|
+
post "/1/certificate/issue", :successful => true, :ca => "testy"
|
115
|
+
last_response.status.should == 200
|
116
|
+
last_response.body.should == TestFixtures::CERT
|
117
|
+
|
118
|
+
File.exist?(File.join(@temp_write_directory, filename)).should == false
|
119
|
+
end
|
120
|
+
it "fails issuance" do
|
121
|
+
post "/1/certificate/issue/"
|
122
|
+
last_response.status.should == 500
|
123
|
+
end
|
124
|
+
it "invalid cert body" do
|
125
|
+
@logger.should_receive(:error).twice
|
126
|
+
post "/1/certificate/issue", :invalid_body => true
|
127
|
+
last_response.status.should == 200
|
128
|
+
last_response.body.should == "invalid cert body"
|
129
|
+
end
|
130
|
+
it "wildcard" do
|
131
|
+
filename = "STAR.xramp.com_testy_211653407360.pem"
|
132
|
+
@config.should_receive(:[]).with("certwriter").and_return({"path"=>@temp_write_directory})
|
133
|
+
@logger.should_receive(:info).with("Writing: #{File.join(@temp_write_directory, filename)}")
|
134
|
+
|
135
|
+
post "/1/certificate/issue", :successful => true, :cert => TestFixtures::WILDCARD, :ca => "testy"
|
136
|
+
last_response.status.should == 200
|
137
|
+
last_response.body.should == TestFixtures::WILDCARD
|
138
|
+
|
139
|
+
File.read(File.join(@temp_write_directory, filename)).should == TestFixtures::WILDCARD.chomp
|
140
|
+
end
|
141
|
+
it "san" do
|
142
|
+
filename = "langui.sh_testy_57953710177023404420300898930034339170.pem"
|
143
|
+
@config.should_receive(:[]).with("certwriter").and_return({"path"=>@temp_write_directory})
|
144
|
+
@logger.should_receive(:info).with("Writing: #{File.join(@temp_write_directory, filename)}")
|
145
|
+
|
146
|
+
post "/1/certificate/issue", :successful => true, :cert => TestFixtures::SAN, :ca => "testy"
|
147
|
+
last_response.status.should == 200
|
148
|
+
last_response.body.should == TestFixtures::SAN
|
149
|
+
|
150
|
+
File.read(File.join(@temp_write_directory, filename)).should == TestFixtures::SAN.chomp
|
151
|
+
end
|
152
|
+
it "non-ascii characters" do
|
153
|
+
filename = "tf.com_testy_1347710705410875939179018156461170725106572413147.pem"
|
154
|
+
@config.should_receive(:[]).with("certwriter").and_return({"path"=>@temp_write_directory})
|
155
|
+
@logger.should_receive(:info).with("Writing: #{File.join(@temp_write_directory, filename)}")
|
156
|
+
|
157
|
+
post "/1/certificate/issue", :successful => true, :cert => TestFixtures::UTF, :ca => "testy"
|
158
|
+
last_response.status.should == 200
|
159
|
+
last_response.body.should == TestFixtures::UTF
|
160
|
+
|
161
|
+
File.read(File.join(@temp_write_directory, filename)).should == TestFixtures::UTF.chomp
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
context "revoking" do
|
166
|
+
it "intercepts revoke" do
|
167
|
+
post "/1/certificate/revoke", :successful => true, :serial => 1234, :ca => "some_ca"
|
168
|
+
last_response.status.should == 200
|
169
|
+
last_response.body.should == "CRL"
|
170
|
+
end
|
171
|
+
it "fails to revoke" do
|
172
|
+
post "/1/certificate/revoke"
|
173
|
+
last_response.status.should == 500
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context "unrevoking" do
|
178
|
+
it "intercepts unrevoke" do
|
179
|
+
post "/1/certificate/unrevoke", :successful => true, :serial => 1234, :ca => "some_ca"
|
180
|
+
last_response.status.should == 200
|
181
|
+
last_response.body.should == "CRL"
|
182
|
+
end
|
183
|
+
it "fails to unrevoke" do
|
184
|
+
post "/1/certificate/unrevoke"
|
185
|
+
last_response.status.should == 500
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
if (RUBY_VERSION.split('.')[1].to_i > 8)
|
2
|
+
require 'simplecov'
|
3
|
+
SimpleCov.start
|
4
|
+
end
|
5
|
+
|
6
|
+
$:.unshift File.expand_path("../../lib", __FILE__)
|
7
|
+
$:.unshift File.expand_path("../", __FILE__)
|
8
|
+
require 'rubygems'
|
9
|
+
require 'fixtures'
|
10
|
+
require 'rspec'
|
11
|
+
require 'rack/test'
|
12
|
+
require 'r509/middleware/certwriter'
|
13
|
+
|
14
|
+
RSpec.configure do |conf|
|
15
|
+
conf.include Rack::Test::Methods
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: r509-middleware-certwriter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Sean Schulte
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sinatra
|
16
|
+
requirement: &2154591280 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2154591280
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rack
|
27
|
+
requirement: &2154590760 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2154590760
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &2154590240 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2154590240
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: &2154589800 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2154589800
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rack-test
|
60
|
+
requirement: &2154589280 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2154589280
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: &2154604540 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2154604540
|
80
|
+
description: Rack middleware that writes issued certificates to disk
|
81
|
+
email: sirsean@gmail.com
|
82
|
+
executables: []
|
83
|
+
extensions: []
|
84
|
+
extra_rdoc_files: []
|
85
|
+
files:
|
86
|
+
- README.md
|
87
|
+
- Rakefile
|
88
|
+
- lib/r509/middleware/certwriter/version.rb
|
89
|
+
- lib/r509/middleware/certwriter.rb
|
90
|
+
- spec/fixtures/cert1.pem
|
91
|
+
- spec/fixtures/san.pem
|
92
|
+
- spec/fixtures/utf.pem
|
93
|
+
- spec/fixtures/wildcard.pem
|
94
|
+
- spec/fixtures.rb
|
95
|
+
- spec/middleware_spec.rb
|
96
|
+
- spec/spec_helper.rb
|
97
|
+
- doc/_index.html
|
98
|
+
- doc/class_list.html
|
99
|
+
- doc/css/common.css
|
100
|
+
- doc/css/full_list.css
|
101
|
+
- doc/css/style.css
|
102
|
+
- doc/file.README.html
|
103
|
+
- doc/file_list.html
|
104
|
+
- doc/frames.html
|
105
|
+
- doc/index.html
|
106
|
+
- doc/js/app.js
|
107
|
+
- doc/js/full_list.js
|
108
|
+
- doc/js/jquery.js
|
109
|
+
- doc/method_list.html
|
110
|
+
- doc/R509/Middleware/Certwriter.html
|
111
|
+
- doc/R509/Middleware.html
|
112
|
+
- doc/R509.html
|
113
|
+
- doc/top-level-namespace.html
|
114
|
+
homepage: http://vikinghammer.com
|
115
|
+
licenses: []
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options: []
|
118
|
+
require_paths:
|
119
|
+
- lib
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 1.8.6
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
segments:
|
133
|
+
- 0
|
134
|
+
hash: -1561366354408036506
|
135
|
+
requirements: []
|
136
|
+
rubyforge_project:
|
137
|
+
rubygems_version: 1.8.10
|
138
|
+
signing_key:
|
139
|
+
specification_version: 3
|
140
|
+
summary: Rack middleware that writes issued certificates to disk
|
141
|
+
test_files: []
|
142
|
+
has_rdoc: false
|