grenache-ruby-http 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,22 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDojCCAoqgAwIBAgIJAMI0yYskTydNMA0GCSqGSIb3DQEBCwUAMGYxCzAJBgNV
3
+ BAYTAlVLMQ8wDQYDVQQIDAZMb25kb24xGTAXBgNVBAoMEEJpdGZpbmV4IExpbWl0
4
+ ZWQxFzAVBgNVBAsMDkluZnJhc3RydWN0dXJlMRIwEAYDVQQDDAkxMjcuMC4wLjEw
5
+ HhcNMTcwNjA3MjEzOTM1WhcNMTgwNjA3MjEzOTM1WjBmMQswCQYDVQQGEwJVSzEP
6
+ MA0GA1UECAwGTG9uZG9uMRkwFwYDVQQKDBBCaXRmaW5leCBMaW1pdGVkMRcwFQYD
7
+ VQQLDA5JbmZyYXN0cnVjdHVyZTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkq
8
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2z/ZCCeKBMBh9A4MvHIbywZdqNFg2DjT
9
+ oib0E0/1vcTGedrdP/ly+j9cvUtATuOmrZP5PunUXJNw1EGZPQzBLbfkGTh5x0RK
10
+ pyewS6cM+hgTHAk3e5q3I1vL/nO4rEthHxz7cwwBqTfIXWZbb9WHNFtbUfRU4KgP
11
+ Nj/iwUNKTOnttCpx0x6gfquem2iRK2x2g6Dum1XlUteKb6p3w1+k7F1AcOnsKqSV
12
+ SH+rRL2xpPBBrfRlv788WRrw7C6ji/DrRt1y36lx/OByqkH8Ji7SmBr+32dIYPun
13
+ RP6XQSz/oc+uk6sGlT5iXWRzHbT4WmJ7is/SdcQPFjjYx/Ed40RDfwIDAQABo1Mw
14
+ UTAdBgNVHQ4EFgQUDTUx+d9DTDhBPmbmrDsbnZDamLUwHwYDVR0jBBgwFoAUDTUx
15
+ +d9DTDhBPmbmrDsbnZDamLUwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsF
16
+ AAOCAQEA1YFKHna73k6otketEGbOfP0dAN8SF9qJ1tEoRUFgbRd/a6b9Pgz9cVwZ
17
+ 7MfFnz77+HHomUTVLt7Euxly3Me8Y8dkftPRffoURykrH6GABkE2Q38bqBfKcFT2
18
+ 25Pu8C18un43hIRC2ti50/zdsoaXY/XxwcWMBvRt3zOE7JxV6iPXX9K2cLdfyMxR
19
+ sYI5rCA3bEqQrv2kjEt42Slp861TrddgYvaM00iUrWW4QewBJI3ahPsfbzJgxdyl
20
+ 2DKbcoqFLtEi8VAv47xam3jMoVcpmvMsn7deQs8vKT58tfsKFE7DXUCm2BzBPy5Y
21
+ iGksJFFkmiBcJ+zHOuilqXlOpqTecg==
22
+ -----END CERTIFICATE-----
@@ -0,0 +1,346 @@
1
+ #
2
+ # OpenSSL example configuration file.
3
+ # This is mostly being used for generation of certificate requests.
4
+ #
5
+
6
+ # This definition stops the following lines choking if HOME isn't
7
+ # defined.
8
+ HOME = .
9
+ RANDFILE = $ENV::HOME/.rnd
10
+
11
+ # Extra OBJECT IDENTIFIER info:
12
+ #oid_file = $ENV::HOME/.oid
13
+ oid_section = new_oids
14
+
15
+ # To use this configuration file with the "-extfile" option of the
16
+ # "openssl x509" utility, name here the section containing the
17
+ # X.509v3 extensions to use:
18
+ # extensions =
19
+ # (Alternatively, use a configuration file that has only
20
+ # X.509v3 extensions in its main [= default] section.)
21
+
22
+ [ new_oids ]
23
+
24
+ # We can add new OIDs in here for use by 'ca', 'req' and 'ts'.
25
+ # Add a simple OID like this:
26
+ # testoid1=1.2.3.4
27
+ # Or use config file substitution like this:
28
+ # testoid2=${testoid1}.5.6
29
+
30
+ # Policies used by the TSA examples.
31
+ tsa_policy1 = 1.2.3.4.1
32
+ tsa_policy2 = 1.2.3.4.5.6
33
+ tsa_policy3 = 1.2.3.4.5.7
34
+
35
+ ####################################################################
36
+ [ ca ]
37
+ default_ca = CA_default # The default ca section
38
+
39
+ ####################################################################
40
+ [ CA_default ]
41
+
42
+ dir = . # Where everything is kept
43
+ certs = $dir/certs # Where the issued certs are kept
44
+ crl_dir = $dir/crl # Where the issued crl are kept
45
+ database = $dir/index.txt # database index file.
46
+ #unique_subject = no # Set to 'no' to allow creation of
47
+ # several certs with same subject.
48
+ new_certs_dir = $dir/newcerts # default place for new certs.
49
+
50
+ certificate = $dir/cacert.pem # The CA certificate
51
+ serial = $dir/serial # The current serial number
52
+ crlnumber = $dir/crlnumber # the current crl number
53
+ # must be commented out to leave a V1 CRL
54
+ crl = $dir/crl.pem # The current CRL
55
+ private_key = $dir/private/cakey.pem# The private key
56
+ RANDFILE = $dir/private/.rand # private random number file
57
+
58
+ x509_extensions = usr_cert # The extensions to add to the cert
59
+
60
+ # Comment out the following two lines for the "traditional"
61
+ # (and highly broken) format.
62
+ name_opt = ca_default # Subject Name options
63
+ cert_opt = ca_default # Certificate field options
64
+
65
+ # Extension copying option: use with caution.
66
+ # copy_extensions = copy
67
+
68
+ # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
69
+ # so this is commented out by default to leave a V1 CRL.
70
+ # crlnumber must also be commented out to leave a V1 CRL.
71
+ # crl_extensions = crl_ext
72
+
73
+ default_days = 365 # how long to certify for
74
+ default_crl_days= 30 # how long before next CRL
75
+ default_md = default # use public key default MD
76
+ preserve = no # keep passed DN ordering
77
+
78
+ # A few difference way of specifying how similar the request should look
79
+ # For type CA, the listed attributes must be the same, and the optional
80
+ # and supplied fields are just that :-)
81
+ policy = policy_match
82
+
83
+ # For the CA policy
84
+ [ policy_match ]
85
+ countryName = match
86
+ stateOrProvinceName = match
87
+ organizationName = match
88
+ organizationalUnitName = optional
89
+ commonName = supplied
90
+ emailAddress = optional
91
+
92
+ # For the 'anything' policy
93
+ # At this point in time, you must list all acceptable 'object'
94
+ # types.
95
+ [ policy_anything ]
96
+ countryName = optional
97
+ stateOrProvinceName = optional
98
+ localityName = optional
99
+ organizationName = optional
100
+ organizationalUnitName = optional
101
+ commonName = supplied
102
+ emailAddress = optional
103
+
104
+ ####################################################################
105
+ [ req ]
106
+ default_bits = 2048
107
+ default_keyfile = privkey.pem
108
+ distinguished_name = req_distinguished_name
109
+ attributes = req_attributes
110
+ x509_extensions = v3_ca # The extensions to add to the self signed cert
111
+
112
+ # Passwords for private keys if not present they will be prompted for
113
+ # input_password = secret
114
+ # output_password = secret
115
+
116
+ # This sets a mask for permitted string types. There are several options.
117
+ # default: PrintableString, T61String, BMPString.
118
+ # pkix : PrintableString, BMPString (PKIX recommendation before 2004)
119
+ # utf8only: only UTF8Strings (PKIX recommendation after 2004).
120
+ # nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
121
+ # MASK:XXXX a literal mask value.
122
+ # WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
123
+ string_mask = utf8only
124
+
125
+ # req_extensions = v3_req # The extensions to add to a certificate request
126
+
127
+ [ req_distinguished_name ]
128
+ countryName = Country Name (2 letter code)
129
+ countryName_default = AU
130
+ countryName_min = 2
131
+ countryName_max = 2
132
+
133
+ stateOrProvinceName = State or Province Name (full name)
134
+ stateOrProvinceName_default = Some-State
135
+
136
+ localityName = Locality Name (eg, city)
137
+
138
+ 0.organizationName = Organization Name (eg, company)
139
+ 0.organizationName_default = Internet Widgits Pty Ltd
140
+
141
+ # we can do this but it is not needed normally :-)
142
+ #1.organizationName = Second Organization Name (eg, company)
143
+ #1.organizationName_default = World Wide Web Pty Ltd
144
+
145
+ organizationalUnitName = Organizational Unit Name (eg, section)
146
+ #organizationalUnitName_default =
147
+
148
+ commonName = Common Name (e.g. server FQDN or YOUR name)
149
+ commonName_max = 64
150
+
151
+ emailAddress = Email Address
152
+ emailAddress_max = 64
153
+
154
+ # SET-ex3 = SET extension number 3
155
+
156
+ [ req_attributes ]
157
+ challengePassword = A challenge password
158
+ challengePassword_min = 4
159
+ challengePassword_max = 20
160
+
161
+ unstructuredName = An optional company name
162
+
163
+ [ usr_cert ]
164
+
165
+ # These extensions are added when 'ca' signs a request.
166
+
167
+ # This goes against PKIX guidelines but some CAs do it and some software
168
+ # requires this to avoid interpreting an end user certificate as a CA.
169
+
170
+ basicConstraints=CA:FALSE
171
+
172
+ # Here are some examples of the usage of nsCertType. If it is omitted
173
+ # the certificate can be used for anything *except* object signing.
174
+
175
+ # This is OK for an SSL server.
176
+ # nsCertType = server
177
+
178
+ # For an object signing certificate this would be used.
179
+ # nsCertType = objsign
180
+
181
+ # For normal client use this is typical
182
+ # nsCertType = client, email
183
+
184
+ # and for everything including object signing:
185
+ # nsCertType = client, email, objsign
186
+
187
+ # This is typical in keyUsage for a client certificate.
188
+ # keyUsage = nonRepudiation, digitalSignature, keyEncipherment
189
+
190
+ # This will be displayed in Netscape's comment listbox.
191
+ nsComment = "OpenSSL Generated Certificate"
192
+
193
+ # PKIX recommendations harmless if included in all certificates.
194
+ subjectKeyIdentifier=hash
195
+ authorityKeyIdentifier=keyid,issuer
196
+
197
+ # This stuff is for subjectAltName and issuerAltname.
198
+ # Import the email address.
199
+ # subjectAltName=email:copy
200
+ # An alternative to produce certificates that aren't
201
+ # deprecated according to PKIX.
202
+ # subjectAltName=email:move
203
+
204
+ # Copy subject details
205
+ # issuerAltName=issuer:copy
206
+
207
+ #nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
208
+ #nsBaseUrl
209
+ #nsRevocationUrl
210
+ #nsRenewalUrl
211
+ #nsCaPolicyUrl
212
+ #nsSslServerName
213
+
214
+ # This is required for TSA certificates.
215
+ # extendedKeyUsage = critical,timeStamping
216
+
217
+ [ v3_req ]
218
+
219
+ # Extensions to add to a certificate request
220
+
221
+ basicConstraints = CA:FALSE
222
+ keyUsage = nonRepudiation, digitalSignature, keyEncipherment
223
+
224
+ [ v3_ca ]
225
+
226
+
227
+ # Extensions for a typical CA
228
+
229
+
230
+ # PKIX recommendation.
231
+
232
+ subjectKeyIdentifier=hash
233
+
234
+ authorityKeyIdentifier=keyid:always,issuer
235
+
236
+ basicConstraints = critical,CA:true
237
+
238
+ # Key usage: this is typical for a CA certificate. However since it will
239
+ # prevent it being used as an test self-signed certificate it is best
240
+ # left out by default.
241
+ # keyUsage = cRLSign, keyCertSign
242
+
243
+ # Some might want this also
244
+ # nsCertType = sslCA, emailCA
245
+
246
+ # Include email address in subject alt name: another PKIX recommendation
247
+ # subjectAltName=email:copy
248
+ # Copy issuer details
249
+ # issuerAltName=issuer:copy
250
+
251
+ # DER hex encoding of an extension: beware experts only!
252
+ # obj=DER:02:03
253
+ # Where 'obj' is a standard or added object
254
+ # You can even override a supported extension:
255
+ # basicConstraints= critical, DER:30:03:01:01:FF
256
+
257
+ [ crl_ext ]
258
+
259
+ # CRL extensions.
260
+ # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
261
+
262
+ # issuerAltName=issuer:copy
263
+ authorityKeyIdentifier=keyid:always
264
+
265
+ [ proxy_cert_ext ]
266
+ # These extensions should be added when creating a proxy certificate
267
+
268
+ # This goes against PKIX guidelines but some CAs do it and some software
269
+ # requires this to avoid interpreting an end user certificate as a CA.
270
+
271
+ basicConstraints=CA:FALSE
272
+
273
+ # Here are some examples of the usage of nsCertType. If it is omitted
274
+ # the certificate can be used for anything *except* object signing.
275
+
276
+ # This is OK for an SSL server.
277
+ # nsCertType = server
278
+
279
+ # For an object signing certificate this would be used.
280
+ # nsCertType = objsign
281
+
282
+ # For normal client use this is typical
283
+ # nsCertType = client, email
284
+
285
+ # and for everything including object signing:
286
+ # nsCertType = client, email, objsign
287
+
288
+ # This is typical in keyUsage for a client certificate.
289
+ # keyUsage = nonRepudiation, digitalSignature, keyEncipherment
290
+
291
+ # This will be displayed in Netscape's comment listbox.
292
+ nsComment = "OpenSSL Generated Certificate"
293
+
294
+ # PKIX recommendations harmless if included in all certificates.
295
+ subjectKeyIdentifier=hash
296
+ authorityKeyIdentifier=keyid,issuer
297
+
298
+ # This stuff is for subjectAltName and issuerAltname.
299
+ # Import the email address.
300
+ # subjectAltName=email:copy
301
+ # An alternative to produce certificates that aren't
302
+ # deprecated according to PKIX.
303
+ # subjectAltName=email:move
304
+
305
+ # Copy subject details
306
+ # issuerAltName=issuer:copy
307
+
308
+ #nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
309
+ #nsBaseUrl
310
+ #nsRevocationUrl
311
+ #nsRenewalUrl
312
+ #nsCaPolicyUrl
313
+ #nsSslServerName
314
+
315
+ # This really needs to be in place for it to be a proxy certificate.
316
+ proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
317
+
318
+ ####################################################################
319
+ [ tsa ]
320
+
321
+ default_tsa = tsa_config1 # the default TSA section
322
+
323
+ [ tsa_config1 ]
324
+
325
+ # These are used by the TSA reply generation only.
326
+ dir = /etc/ssl # TSA root directory
327
+ serial = $dir/tsaserial # The current serial number (mandatory)
328
+ crypto_device = builtin # OpenSSL engine to use for signing
329
+ signer_cert = $dir/tsacert.pem # The TSA signing certificate
330
+ # (optional)
331
+ certs = $dir/cacert.pem # Certificate chain to include in reply
332
+ # (optional)
333
+ signer_key = $dir/private/tsakey.pem # The TSA private key (optional)
334
+ signer_digest = sha256 # Signing digest to use. (Optional)
335
+ default_policy = tsa_policy1 # Policy if request did not specify it
336
+ # (optional)
337
+ other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
338
+ digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory)
339
+ accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
340
+ clock_precision_digits = 0 # number of digits after dot. (optional)
341
+ ordering = yes # Is ordering defined for timestamps?
342
+ # (optional, default: no)
343
+ tsa_name = yes # Must the TSA name be included in the reply?
344
+ # (optional, default: no)
345
+ ess_cert_id_chain = no # Must the ESS cert id chain be included?
346
+ # (optional, default: no)
@@ -0,0 +1,30 @@
1
+ -----BEGIN ENCRYPTED PRIVATE KEY-----
2
+ MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI/9PYxW9nXMoCAggA
3
+ MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECLrgz9P2kXvGBIIEyMik2zIicpbu
4
+ +RaCRPYH7u7Nv21eAB5xkBcRt8yvWPDkVA/6bgCVcfpDNVW7yIMszMyEHCtUSoKh
5
+ XXhTeaTDk0E1ArASv8GWMtycd9kVl5MfEP1QqvP2HcXrYjkXPtQXLhah59vF3iBJ
6
+ JO7278RzqYlOfmh4j9o+YE3Qt+4kdiNboDYc1RxREridi651N2M9Rzi2xtiwn6Hr
7
+ CQfZ4MMaQhfp8QRuqGMv24ddWpi3eCySauV+pKuAWeaRTm0KPcng3pKuHwBO31OJ
8
+ S81MZPojWdKspgsZkXO3RTfndKfB9+Oi5g9SV9KGlV96dRiJkadhXGLPU+8Vpfm6
9
+ qMDExNPJ7cq70y8lYOEMiXeu8OWuMc8+CWnt5uHpJS9Ig7c9D6gwLAfufymBj6yN
10
+ 6C9UnzjXmnpZYBvU31uET2Y7qmf2x95wCJ3z72XsURsomf5KwyJKEPecV2o1GWrC
11
+ vsupV41qVu9L9nhlWpmzL99XRxmmy8KE+Tm1LpncCseSIdVWcdZ7DOtLry3kn3a/
12
+ J61c5/rFWbiKEzuTo+jIAKCVgkOKhy/7V16eOLuvgal6cmi02uKNFZRVhcfNdV99
13
+ CZ5X12+Cz0p9w/632R9f0qM04clBE3JnT0JeiP3c6cDMCUP6DZtNxwaMIZ+bVPRp
14
+ M4nBaxk3yE50oyMwvw/+L5KkZ/wAaswuJkFq2Cf6mXjWusr2Hq0Kaz1YAQ3WVaGL
15
+ YSeuS8LilkJhLQTctvO0zv3tAa9mPnDg5M1bJTUHtnpezIWrwG1VId3Wg1ykUZPV
16
+ cOk1nr5dJlLbEv86C2unAKCdUKITNKAqcxoRmfi/cUEJIzsWuoDRAxsZ0gcE8y8r
17
+ izC3RvAazbBndo2EkIPtTrWHdh4ppilgSZ6ETT6rw8ik7fPB48NtnuAaM/G3xtD3
18
+ B5M5T6W00iPJCPZqMe9LRhiu9VWnamHPQcSnNt/IWXh6C+rwO338o2cXd4uZJGWo
19
+ tfRjOdLmKjzGVi57jcpKcHyZ+AbiEYE3gsa+6Qiebd2W2hW+VsQJKBfYEGlnW8da
20
+ WNldU+eZtJFpUbBBBkv878isFXQyrP+22NmgUdU+PfUMKPc0DTDrKGmO3LOptv1k
21
+ PFtquWON5dlmhrAFvNPl3BH0wVhHFRYm9616jkM27nGvqSnf2F3GQUX+eFwrpTmI
22
+ N75O4mHEQDVU8JImHrWrjthFVJzkF76BsJA8jit4Oeg5MWlE/Lrvd3eLp+Pi4UIo
23
+ K2P8Xa9SxFucqEyNkE9YYE2uuTiIwjOwKxE5vVs1iJokEPeH5IMbq0zfDiprFU1o
24
+ evyKFiDdFHrpGA7wdQ1bHSMbb/YA2TZGnmailwOjBF+jeCh7RZPPhLEg6eviRgwJ
25
+ 8PU00u3+DNZ0HRrCnRU85MbgTiqfBNh1LUqxu6hbf0k4D2vKwKVOgeVEOam3sy7T
26
+ nV7eUlIIaLKecoPsTUjg91p3JNQ+pNUZR6+9BW15D3d7ANnHp1Vrv2FetQNesHFi
27
+ XLBJbXgjMxCCExpVHed0LGvrl/GBTYhpRD/G3FDP/QE7UmZgbRdJl9Py21TLoAKQ
28
+ l+uZ/wEUy4VJAC6smgttK+7vWpSwzNzq6Zyqmlu9pC/y515NWLNUHDybXhOHnaKd
29
+ OLx8SUhmBHuCQ/EnOM0CXA==
30
+ -----END ENCRYPTED PRIVATE KEY-----
@@ -0,0 +1 @@
1
+ 01
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDarkxzkR3m+xeQ
3
+ 6UDuPdMk8H8gBhQ6r/HMheOvYKlyhcxWtdlyZcPTEqKcbmeygKTIuSBQpiEzfH0y
4
+ opc+qdEwaXbQfUNkkfAPddXQPjQo+sw3V6XGHoB0GaiIZW/F09RVlVfWFgvyqUzB
5
+ QiuhlJrhUdZCSx8o8OZU06tW3E4AOyeDZPkiIGPfV13FHH39MmpNDw8BP9+ezbGf
6
+ FaZJ9byYkIH+vfEIgGSAqVs3NL2Fu3bE4RFCKL/Mq7xlbxHG4wUVTbKiztpZasx1
7
+ CJ4K2OWa/QSvSAlXjfireRIBA/bSLKshyjCR+Kyg/pHEp4SVT+Tp/6EGGKypUQud
8
+ 4Ok/mAhZAgMBAAECggEALCDqKpQJLbhTvBll0e3F8vlZHfQ8Fs+0gqouFRDzgLnB
9
+ T2oo9C3XA3wKNnkNEfdlyV+aRswPfR1NAm/PB4UrQpK1uELe26ebgvMrb3dt/SsH
10
+ FM/qEv3KvCMFYGjf0lL50T9u1zPhu1kwtPsOZO/hBUEHdJ9GLXPXdxyzwbZ5QxBN
11
+ UYrplS5gpKY3/xxYqJ+DoiAibMHbX+25Gmals0j9OEnEloe+DsaFWm8SW1ZS9k7Q
12
+ pcFA29j9dYc2DNPJRUfqfr3Q+pCFwES1QyaoZouXRsXboHCkdsplfYTNMyyEdLGV
13
+ qe2F+OYQJAD44P3YoOZqeQ2a75by0l5gF/hkzxEUUQKBgQD0Nc1JygKh1cUZytrJ
14
+ RknZGCARHQPHhxGV4WXAhYshatjih8yBA51HDskURsie78RQBKZJ4xVg+uanrxv/
15
+ QVH4Nrr2/sovwzduMRB4opyuS0ivE5qCg6y6PGxXk96SurEi6pxp+LQa3jQ3sdX7
16
+ RED44KxJEg2Q6vS42ti9rlMf7QKBgQDlPPrAyIZUUd+aztTnMuhoSt6uqg+H9mtF
17
+ kdQOEgaYwOkGa5LxfWnqpvcBsLRQ+twhJUbJrEaBohR0M28KrkV25VeaFlAxPXBL
18
+ bwCJWEj047UjweJG8LSesvz1HjteYJMpEIm+f8sBQe1GT3hdYWoRdt3sKw8bfF4s
19
+ MglV/VzEnQKBgQCQJeHTGGaNWD1LiC20eMTGXDMxZssAT33V1oHVLf597y+uJzJT
20
+ ROrlMpkGWvG4vxZFlTkCjAPmhrL3b6k69jeIJ+YcPTDjGHvzkwqB6ppJVy7ECPI+
21
+ 77JZC6l32FScj45XadyBwMeuxFJWPaZs9lDTluqbBwjy7X0eUC93Zxqx0QKBgQDO
22
+ QBhIXeLmeKebrJ5HyjjqpPpH4oCIzwBjHrrRUgyXYXIHscALANDMLB8vaSJDfgGS
23
+ 3OwcxaDGP+LxTdmJnZSoTd6Mp6jNNL8VT7EG4eT6WOoAWxBQzX9lDhukGuhFmNSu
24
+ 7M9SE769yehHC3d7ZQs+3Vj8hR1ZmINOdlKKCKRvzQKBgQDnfoNhMLgHMyzxe9QU
25
+ yIbW0Iy/bZgHgogbiZUSrqccFzZqoJYYppDtf9r/4v/fv33N0LXlTHnmynqdEn2V
26
+ 9uq297R+Xx3JmdBIuHRhYfVWBjPZpS0AaWCg7TWy9IDRs7w0rNnWQIHZ31UXJ1FV
27
+ IXGqWb8lkCJYf5SJ5wFH9FeKhg==
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,22 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDljCCAn6gAwIBAgIJAJ+xCVRfdiL2MA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV
3
+ BAYTAlVLMQ8wDQYDVQQIDAZMb25kb24xGTAXBgNVBAoMEEJpdGZpbmV4IExpbWl0
4
+ ZWQxETAPBgNVBAsMCFNlY3VyaXR5MRIwEAYDVQQDDAkxMjcuMC4wLjEwHhcNMTcw
5
+ NjA3MjEzODUzWhcNMTgwNjA3MjEzODUzWjBgMQswCQYDVQQGEwJVSzEPMA0GA1UE
6
+ CAwGTG9uZG9uMRkwFwYDVQQKDBBCaXRmaW5leCBMaW1pdGVkMREwDwYDVQQLDAhT
7
+ ZWN1cml0eTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOC
8
+ AQ8AMIIBCgKCAQEA2q5Mc5Ed5vsXkOlA7j3TJPB/IAYUOq/xzIXjr2CpcoXMVrXZ
9
+ cmXD0xKinG5nsoCkyLkgUKYhM3x9MqKXPqnRMGl20H1DZJHwD3XV0D40KPrMN1el
10
+ xh6AdBmoiGVvxdPUVZVX1hYL8qlMwUIroZSa4VHWQksfKPDmVNOrVtxOADsng2T5
11
+ IiBj31ddxRx9/TJqTQ8PAT/fns2xnxWmSfW8mJCB/r3xCIBkgKlbNzS9hbt2xOER
12
+ Qii/zKu8ZW8RxuMFFU2yos7aWWrMdQieCtjlmv0Er0gJV434q3kSAQP20iyrIcow
13
+ kfisoP6RxKeElU/k6f+hBhisqVELneDpP5gIWQIDAQABo1MwUTAdBgNVHQ4EFgQU
14
+ ljiy80UAHCJU946wKXxtJAIL6eEwHwYDVR0jBBgwFoAUljiy80UAHCJU946wKXxt
15
+ JAIL6eEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAsOXXgYSI
16
+ IDI+ZPErZJ2cb2unsgtd1xwFxd8KTx7ZRmVu+ElnJjMhRyaKOUw4EXhplbQoyK/1
17
+ EKHqAGpl+uwddafFsx3qK0sMBRH/oSEz6RG5ONRCfISZ2jMSGKfg2AsdJIBD+Wko
18
+ c5hHFVZk/xkeEri6tI04co9xfl1pJquAtbH0cQyDUISssdUJeC9jRTm8460fBkFg
19
+ 79bbxn+34swSCe/lVIcF6u4Tu7fiaUsUG2XSRyjsNRWrZe0nKmJ3QQsMHYwkua7p
20
+ HEBJXLzamDdd+0wHyKckk+R7TXa0d2r83t6c7kNVbFwGWl1iljXvtbhnbddzlAzk
21
+ Ts0eU2wgPtMQQw==
22
+ -----END CERTIFICATE-----
data/examples/worker.rb CHANGED
@@ -12,7 +12,8 @@ EM.run do
12
12
  c = Grenache::Http.new
13
13
 
14
14
  c.listen('rpc_test', 5004) do |msg|
15
- [StandardError.new("Error!"),"hello #{msg.payload}"]
15
+ #[StandardError.new("Error!"),"hello #{msg.payload}"]
16
+ [nil, "hello #{msg.payload}"]
16
17
  end
17
18
 
18
19
  end
@@ -0,0 +1,25 @@
1
+ require_relative '../lib/grenache-ruby-http.rb'
2
+
3
+ Grenache::Http.configure do |conf|
4
+ conf.grape_address = "http://127.0.0.1:40002/"
5
+ conf.key = File.expand_path('.') + "/ssl/server-key.pem"
6
+ conf.cert_pem = File.expand_path('.') + "/ssl/server-crt.pem"
7
+ conf.ca = File.expand_path('.') + "/ssl/ca-crt.pem"
8
+ conf.verify_mode = Grenache::SSL_VERIFY_PEER
9
+ conf.service_host = "localhost"
10
+ end
11
+
12
+ EM.run do
13
+
14
+ Signal.trap("INT") { EventMachine.stop }
15
+ Signal.trap("TERM") { EventMachine.stop }
16
+
17
+ c = Grenache::Http.new
18
+
19
+ c.listen('rpc_test', 5004) do |msg, fingerprint|
20
+ #[StandardError.new("Error!"),"hello #{msg.payload}"]
21
+ puts fingerprint
22
+ [nil,"hello #{msg.payload}"]
23
+ end
24
+
25
+ end
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.add_runtime_dependency "eventmachine", "~> 1.2"
20
20
  spec.add_runtime_dependency "faye-websocket", "~> 0.10"
21
- spec.add_runtime_dependency "grenache-ruby-base", "~> 0.2.0"
21
+ spec.add_runtime_dependency "grenache-ruby-base", "~> 0.2.3"
22
22
  spec.add_runtime_dependency "httparty", "~> 0.14.0"
23
23
  spec.add_runtime_dependency "oj", "~> 2.18"
24
24
  spec.add_runtime_dependency "thin", "~> 1.7"
25
+ spec.add_runtime_dependency "puma", "~> 3.9.1"
25
26
 
26
27
  end
@@ -0,0 +1,48 @@
1
+ module Grenache
2
+ class Http
3
+ class HttpClient
4
+ include HTTParty
5
+
6
+ def initialize config
7
+ @config = config
8
+ end
9
+
10
+ def request uri, body, params = {}
11
+ options = {body: body}
12
+
13
+ if params[:timeout]
14
+ options[:timeout] = params[:timeout]
15
+ else
16
+ options[:timeout] = timeout if timeout
17
+ end
18
+
19
+ if tls?
20
+ options[:pem] = pem
21
+ options[:ssl_ca_file] = ssl_ca_file
22
+ end
23
+
24
+ self.class.post uri, options
25
+ end
26
+
27
+ private
28
+
29
+ def tls?
30
+ !! @config.cert_pem
31
+ end
32
+
33
+ def pem
34
+ cert = File.read @config.cert_pem
35
+ key = File.read @config.key
36
+ cert + key
37
+ end
38
+
39
+ def ssl_ca_file
40
+ @config.ca
41
+ end
42
+
43
+ def timeout
44
+ @config.service_timeout
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  module Grenache
2
2
  module HTTP
3
- VERSION = "0.2.2"
3
+ VERSION = "0.2.3"
4
4
  end
5
5
  end
data/lib/grenache/http.rb CHANGED
@@ -1,5 +1,9 @@
1
+ require "puma/events"
2
+
1
3
  module Grenache
4
+
2
5
  class Http < Grenache::Base
6
+
3
7
  def listen(key, port, opts={}, &block)
4
8
  start_http_service(port,&block)
5
9
 
@@ -8,25 +12,41 @@ module Grenache
8
12
  end
9
13
  end
10
14
 
11
- def start_http_service(port, &block)
12
- EM.defer {
13
- app = -> (env) {
14
- req = ServiceMessage.parse(env['rack.input'].read)
15
- e, payload = block.call(req)
16
- err = e.kind_of?(Exception) ? e.message : e
17
- [200,nil, ServiceMessage.new(payload, err, req.rid).to_json]
18
- }
19
- server = Thin::Server.start('0.0.0.0', port, app, {signals: false})
15
+ def start_http_service(port, &block)
16
+ app = -> (env) {
17
+ req = ServiceMessage.parse(env['rack.input'].read)
18
+ fingerprint = extract_fingerprint(env['puma.peercert'])
19
+ e, payload = block.call(req, fingerprint)
20
+ err = e.kind_of?(Exception) ? e.message : e
21
+ [200,[], [ServiceMessage.new(payload, err, req.rid).to_json]]
20
22
  }
23
+
24
+ event = Puma::Events.new $stdout, $stderr
25
+ server = Puma::Server.new app, event
26
+ host = config.service_host
27
+
28
+ if tls?
29
+ ctx = Puma::MiniSSL::Context.new
30
+ ctx.key = config.key
31
+ ctx.cert = config.cert_pem
32
+ ctx.ca = config.ca
33
+ ctx.verify_mode = config.verify_mode
34
+
35
+ server.add_ssl_listener host, port, ctx
36
+ else
37
+ server.add_tcp_listener host, port
38
+ end
39
+
40
+ puts "starting server on port #{port}"
41
+ server.run
21
42
  end
22
43
 
23
- def request(key, payload)
44
+ def request(key, payload, params = {})
24
45
  services = lookup(key)
25
46
  if services.size > 0
26
47
  json = ServiceMessage.new(payload,key).to_json
27
- service = services.sample.sub("tcp://","http://")
28
- service.prepend("http://") unless service.start_with?("http://")
29
- resp = HTTParty.post(service,{body: json})
48
+ service = get_random_service services
49
+ resp = http_client.request service, json, params
30
50
  msg = ServiceMessage.parse(resp.body)
31
51
  return [msg.err, msg.payload]
32
52
  else
@@ -35,5 +55,32 @@ module Grenache
35
55
  rescue Exception => e
36
56
  return [e, nil]
37
57
  end
58
+
59
+ private
60
+
61
+ def extract_fingerprint cert
62
+ return "" unless cert
63
+ cert = OpenSSL::X509::Certificate.new cert
64
+ OpenSSL::Digest::SHA1.new(cert.to_der).to_s
65
+ end
66
+
67
+ def tls?
68
+ !! config.cert_pem
69
+ end
70
+
71
+ def get_random_service services
72
+ service = services.sample
73
+ service.sub!("tcp://","https://")
74
+ if tls?
75
+ service.prepend("https://") unless service.start_with?("https://")
76
+ else
77
+ service.prepend("http://") unless service.start_with?("http://")
78
+ end
79
+ service
80
+ end
81
+
82
+ def http_client
83
+ @http_client ||= HttpClient.new(config)
84
+ end
38
85
  end
39
86
  end
@@ -1,10 +1,9 @@
1
1
  require 'oj'
2
- require 'eventmachine'
3
2
  require 'faye/websocket'
4
3
  require 'httparty'
5
4
  require 'grenache-ruby-base'
6
- require 'thin'
7
- require 'rack'
5
+ require 'puma'
8
6
 
9
7
  require 'grenache/http'
10
8
  require 'grenache/http/version'
9
+ require 'grenache/http/http_client'