grenache-ruby-http 0.2.2 → 0.2.3

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.
@@ -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'