mote_sms 1.2.0 → 1.3.0.rc1
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/README.md +4 -11
- data/lib/mote_sms/delivery_job.rb +16 -0
- data/lib/mote_sms/message.rb +18 -1
- data/lib/mote_sms/ssl_certs/ThawtePrimaryRootG3CA.pem +25 -0
- data/lib/mote_sms/ssl_certs/ThawteSSLGA2CA.pem +101 -0
- data/lib/mote_sms/ssl_certs/api.swisscom.com.pem +29 -0
- data/lib/mote_sms/ssl_certs/bulk.mobile-gw.com.pem +93 -79
- data/lib/mote_sms/transports/action_mailer_transport.rb +1 -1
- data/lib/mote_sms/transports/http_client.rb +91 -0
- data/lib/mote_sms/transports/mobile_technics_transport.rb +22 -103
- data/lib/mote_sms/transports/swisscom_transport.rb +106 -0
- data/lib/mote_sms/transports.rb +2 -0
- data/lib/mote_sms/version.rb +1 -1
- data/lib/mote_sms.rb +23 -4
- data/mote_sms.gemspec +12 -9
- data/spec/mote_sms/delivery_job_spec.rb +13 -0
- data/spec/mote_sms/message_spec.rb +50 -7
- data/spec/mote_sms/number_spec.rb +22 -20
- data/spec/mote_sms/transports/http_client_spec.rb +87 -0
- data/spec/spec_helper.rb +7 -0
- metadata +71 -14
- data/lib/mote_sms/ssl_certs/ThawteSSLCA.pem +0 -97
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7750e3f3a9303ab306187ab9e35755f7a7fa5abe
|
|
4
|
+
data.tar.gz: 1108d8459f1672a55f189cadcb1df22aea9ecb04
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4c6133b43af1691dd57eca6043c81419b77021b4dd83e7c1b39324e21f42cb8efeb4e05f3a0ebe34719ac755b79a72b87982c98d3177d1d32bb3d82e5dbd8b67
|
|
7
|
+
data.tar.gz: bdba91cfc834a07026afba68f9ad6bdb7bc046a7093db9300e4a3f01be93e474789892c67df9aa89cdf00cf51f01f9137ef51175b0fd332f054807cb0b826064
|
data/README.md
CHANGED
|
@@ -21,23 +21,16 @@ Or install it yourself as:
|
|
|
21
21
|
## Usage
|
|
22
22
|
|
|
23
23
|
```ruby
|
|
24
|
-
#
|
|
24
|
+
# Transport configuration
|
|
25
25
|
MoteSMS.transport = MoteSMS::MobileTechnicsTransport.new 'https://endpoint.com:1234', 'username', 'password'
|
|
26
|
+
|
|
27
|
+
# Create a message and deliver it
|
|
26
28
|
sms = MoteSMS::Message.new do
|
|
27
29
|
to '+41 79 111 22 33'
|
|
28
30
|
from 'ARUBYGEM'
|
|
29
31
|
body 'Hello world, you know.'
|
|
30
32
|
end
|
|
31
|
-
sms.
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
```ruby
|
|
35
|
-
# Using client instance
|
|
36
|
-
transport = MoteSMS::MobileTechnicsTransport.new 'https://endpoint.com:1234', 'username', 'password'
|
|
37
|
-
sms = MoteSMS::Message.new do
|
|
38
|
-
# create message
|
|
39
|
-
end
|
|
40
|
-
sms.deliver(transport: transport)
|
|
33
|
+
sms.deliver_now # OR: deliver_later
|
|
41
34
|
```
|
|
42
35
|
|
|
43
36
|
## Contributing
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'active_job'
|
|
2
|
+
require 'mote_sms/message'
|
|
3
|
+
|
|
4
|
+
module MoteSMS
|
|
5
|
+
class DeliveryJob < ActiveJob::Base
|
|
6
|
+
queue_as { MoteSMS.delayed_delivery_queue }
|
|
7
|
+
|
|
8
|
+
def perform(from, to, body, options)
|
|
9
|
+
Message.new do
|
|
10
|
+
from from
|
|
11
|
+
to to
|
|
12
|
+
body body
|
|
13
|
+
end.deliver_now options
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
data/lib/mote_sms/message.rb
CHANGED
|
@@ -28,6 +28,7 @@ module MoteSMS
|
|
|
28
28
|
#
|
|
29
29
|
# Returns a new instance.
|
|
30
30
|
def initialize(transport = nil, &block)
|
|
31
|
+
Kernel.warn 'Message#new(transport) is deprecated and will be removed from MoteSMS' if transport
|
|
31
32
|
@transport = transport
|
|
32
33
|
@to = MoteSMS::NumberList.new
|
|
33
34
|
instance_eval(&block) if block_given?
|
|
@@ -60,7 +61,7 @@ module MoteSMS
|
|
|
60
61
|
# Public: Asign an instance of Number instead of the direct
|
|
61
62
|
# string, so only vanity numbers are allowed.
|
|
62
63
|
def from=(val)
|
|
63
|
-
@from = val ? Number.new(val, :
|
|
64
|
+
@from = val ? Number.new(val, vanity: true) : nil
|
|
64
65
|
end
|
|
65
66
|
|
|
66
67
|
# Public: Set to multiple arguments or array, or whatever.
|
|
@@ -86,6 +87,11 @@ module MoteSMS
|
|
|
86
87
|
@to
|
|
87
88
|
end
|
|
88
89
|
|
|
90
|
+
def transport=(trans)
|
|
91
|
+
Kernel.warn 'Message#transport= is deprecated and will be removed from MoteSMS'
|
|
92
|
+
@transport = trans
|
|
93
|
+
end
|
|
94
|
+
|
|
89
95
|
# Public: Deliver message using defined transport, to select the correct
|
|
90
96
|
# transport method uses any of these values:
|
|
91
97
|
#
|
|
@@ -95,8 +101,19 @@ module MoteSMS
|
|
|
95
101
|
#
|
|
96
102
|
# Returns result of transport#deliver.
|
|
97
103
|
def deliver(options = {})
|
|
104
|
+
Kernel.warn 'Message#deliver is deprecated and will be removed from MoteSMS. Please use #deliver_now'
|
|
105
|
+
deliver_now options
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def deliver_now(options = {})
|
|
109
|
+
Kernel.warn 'options[:transport] in Message#deliver_now is deprecated and will be removed from MoteSMS' if options[:transport]
|
|
98
110
|
transport = options.delete(:transport) || self.transport || MoteSMS.transport
|
|
99
111
|
transport.deliver(self, options)
|
|
100
112
|
end
|
|
113
|
+
|
|
114
|
+
def deliver_later(options = {})
|
|
115
|
+
return Kernel.warn 'options[:transport] is not supported in Message#deliveer_later' if options.delete(:transport)
|
|
116
|
+
DeliveryJob.set(options).perform_later @from.to_s, @to.normalized_numbers, @body, options
|
|
117
|
+
end
|
|
101
118
|
end
|
|
102
119
|
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
|
|
3
|
+
rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
|
4
|
+
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
|
5
|
+
MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
|
|
6
|
+
BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
|
|
7
|
+
Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
|
|
8
|
+
LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
|
|
9
|
+
MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
|
|
10
|
+
ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
|
|
11
|
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
|
|
12
|
+
gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
|
|
13
|
+
YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
|
|
14
|
+
b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
|
|
15
|
+
9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
|
|
16
|
+
zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
|
|
17
|
+
OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
|
|
18
|
+
HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
|
|
19
|
+
2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
|
|
20
|
+
oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
|
21
|
+
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
|
|
22
|
+
KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
|
|
23
|
+
m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
|
|
24
|
+
MdRAGmI0Nj81Aa6sY6A=
|
|
25
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
Certificate:
|
|
2
|
+
Data:
|
|
3
|
+
Version: 3 (0x2)
|
|
4
|
+
Serial Number:
|
|
5
|
+
16:87:d6:88:6d:e2:30:06:85:23:3d:bf:11:bf:65:97
|
|
6
|
+
Signature Algorithm: sha256WithRSAEncryption
|
|
7
|
+
Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA
|
|
8
|
+
Validity
|
|
9
|
+
Not Before: Oct 31 00:00:00 2013 GMT
|
|
10
|
+
Not After : Oct 30 23:59:59 2023 GMT
|
|
11
|
+
Subject: C=US, O=thawte, Inc., CN=thawte SSL CA - G2
|
|
12
|
+
Subject Public Key Info:
|
|
13
|
+
Public Key Algorithm: rsaEncryption
|
|
14
|
+
RSA Public Key: (2048 bit)
|
|
15
|
+
Modulus (2048 bit):
|
|
16
|
+
00:b2:fc:06:fb:04:93:d2:ea:59:20:3b:44:85:97:
|
|
17
|
+
52:39:e7:10:f0:7a:e0:b0:94:40:da:46:f8:0c:28:
|
|
18
|
+
bb:b9:ce:60:38:3f:d2:d8:11:42:1b:91:ad:49:ee:
|
|
19
|
+
8f:c7:de:6c:de:37:6f:fd:8b:20:3c:6d:e7:74:d3:
|
|
20
|
+
dc:d5:24:88:41:80:89:ee:36:be:c4:d5:be:8d:53:
|
|
21
|
+
13:aa:e4:a5:b8:93:0a:be:ec:da:cd:3c:d4:32:56:
|
|
22
|
+
ef:d0:4e:a0:b8:97:bb:39:50:1e:6e:65:c3:fd:b2:
|
|
23
|
+
ce:e0:59:a9:48:09:c6:fe:be:ae:fc:3e:3b:81:20:
|
|
24
|
+
97:8b:8f:46:df:60:64:07:75:bb:1b:86:38:9f:47:
|
|
25
|
+
7b:34:ce:a1:d1:97:ad:76:d8:9f:b7:26:db:79:80:
|
|
26
|
+
36:48:f2:c5:37:f8:d9:32:ae:7c:a4:53:81:c7:99:
|
|
27
|
+
a1:54:38:2f:4f:75:a0:bb:5a:a5:bb:cd:ac:02:5b:
|
|
28
|
+
19:02:d5:13:18:a7:ce:ac:74:55:12:05:8b:9b:a2:
|
|
29
|
+
95:46:64:72:38:cd:5a:1b:3a:16:a7:be:71:99:8c:
|
|
30
|
+
54:03:b8:96:6c:01:d3:3e:06:98:3f:21:81:3b:02:
|
|
31
|
+
7e:00:47:53:01:1e:0e:46:43:fb:4b:2d:dc:0b:1a:
|
|
32
|
+
e8:2f:98:f8:7e:d1:99:ab:13:6c:a4:17:de:6f:f6:
|
|
33
|
+
15:f5
|
|
34
|
+
Exponent: 65537 (0x10001)
|
|
35
|
+
X509v3 extensions:
|
|
36
|
+
X509v3 Basic Constraints: critical
|
|
37
|
+
CA:TRUE, pathlen:0
|
|
38
|
+
X509v3 Key Usage: critical
|
|
39
|
+
Certificate Sign, CRL Sign
|
|
40
|
+
X509v3 CRL Distribution Points:
|
|
41
|
+
URI:http://t1.symcb.com/ThawtePCA.crl
|
|
42
|
+
|
|
43
|
+
Authority Information Access:
|
|
44
|
+
OCSP - URI:http://t2.symcb.com
|
|
45
|
+
|
|
46
|
+
X509v3 Certificate Policies:
|
|
47
|
+
Policy: 2.16.840.1.113733.1.7.54
|
|
48
|
+
CPS: https://www.thawte.com/cps
|
|
49
|
+
|
|
50
|
+
X509v3 Subject Alternative Name:
|
|
51
|
+
DirName:/CN=SymantecPKI-1-537
|
|
52
|
+
X509v3 Subject Key Identifier:
|
|
53
|
+
C2:4F:48:57:FC:D1:4F:9A:C0:5D:38:7D:0E:05:DB:D9:2E:B5:52:60
|
|
54
|
+
X509v3 Authority Key Identifier:
|
|
55
|
+
keyid:7B:5B:45:CF:AF:CE:CB:7A:FD:31:92:1A:6A:B6:F3:46:EB:57:48:50
|
|
56
|
+
|
|
57
|
+
Signature Algorithm: sha256WithRSAEncryption
|
|
58
|
+
8d:06:de:43:c9:76:02:ca:d9:23:97:5e:f3:63:d7:7d:44:c2:
|
|
59
|
+
0f:6b:0a:f5:07:e5:8b:b8:fa:e0:a3:fa:6b:80:92:b5:03:2c:
|
|
60
|
+
c5:37:e0:c2:e5:95:b5:92:70:18:28:42:94:ee:4b:77:6a:01:
|
|
61
|
+
0f:8b:23:ec:56:4d:f4:00:69:e5:84:c8:e2:ea:de:5b:3e:f6:
|
|
62
|
+
3c:07:3a:94:ca:6c:27:b1:cc:83:1a:60:71:27:d2:bf:02:f5:
|
|
63
|
+
1e:44:d3:48:d5:a6:d3:76:21:00:9c:fa:98:64:eb:17:36:3f:
|
|
64
|
+
eb:1b:3c:3e:a6:b1:d9:58:06:0e:72:d9:68:be:f1:a7:20:d7:
|
|
65
|
+
52:e4:a4:77:1f:71:70:9d:55:35:85:37:e1:1d:4d:94:c2:70:
|
|
66
|
+
7f:95:40:6e:4b:7d:b2:b4:29:2a:03:79:c8:b9:4c:67:61:04:
|
|
67
|
+
a0:8b:27:ff:59:00:eb:55:7f:c6:b7:33:35:2d:5e:4e:ac:b8:
|
|
68
|
+
ea:12:c5:e8:f7:b9:ab:be:74:92:2c:b7:d9:4d:ca:84:2f:1c:
|
|
69
|
+
c2:f0:72:7c:b2:31:6e:cf:80:e5:88:07:36:51:7b:ba:61:af:
|
|
70
|
+
6d:8d:23:5b:34:a3:95:bc:a2:31:7f:f2:f5:e7:b7:e8:ef:c4:
|
|
71
|
+
b5:27:32:e9:f7:9e:69:c7:2b:e8:be:bb:0c:aa:e7:ea:60:12:
|
|
72
|
+
ea:26:8a:78
|
|
73
|
+
|
|
74
|
+
-----BEGIN CERTIFICATE-----
|
|
75
|
+
MIIEsjCCA5qgAwIBAgIQFofWiG3iMAaFIz2/Eb9llzANBgkqhkiG9w0BAQsFADCB
|
|
76
|
+
qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
|
77
|
+
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
|
78
|
+
MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
|
|
79
|
+
BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMTMxMDMxMDAwMDAwWhcNMjMx
|
|
80
|
+
MDMwMjM1OTU5WjBBMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMu
|
|
81
|
+
MRswGQYDVQQDExJ0aGF3dGUgU1NMIENBIC0gRzIwggEiMA0GCSqGSIb3DQEBAQUA
|
|
82
|
+
A4IBDwAwggEKAoIBAQCy/Ab7BJPS6lkgO0SFl1I55xDweuCwlEDaRvgMKLu5zmA4
|
|
83
|
+
P9LYEUIbka1J7o/H3mzeN2/9iyA8bed009zVJIhBgInuNr7E1b6NUxOq5KW4kwq+
|
|
84
|
+
7NrNPNQyVu/QTqC4l7s5UB5uZcP9ss7gWalICcb+vq78PjuBIJeLj0bfYGQHdbsb
|
|
85
|
+
hjifR3s0zqHRl6122J+3Jtt5gDZI8sU3+NkyrnykU4HHmaFUOC9PdaC7WqW7zawC
|
|
86
|
+
WxkC1RMYp86sdFUSBYubopVGZHI4zVobOhanvnGZjFQDuJZsAdM+Bpg/IYE7An4A
|
|
87
|
+
R1MBHg5GQ/tLLdwLGugvmPh+0ZmrE2ykF95v9hX1AgMBAAGjggE7MIIBNzASBgNV
|
|
88
|
+
HRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAyBgNVHR8EKzApMCegJaAj
|
|
89
|
+
hiFodHRwOi8vdDEuc3ltY2IuY29tL1RoYXd0ZVBDQS5jcmwwLwYIKwYBBQUHAQEE
|
|
90
|
+
IzAhMB8GCCsGAQUFBzABhhNodHRwOi8vdDIuc3ltY2IuY29tMEEGA1UdIAQ6MDgw
|
|
91
|
+
NgYKYIZIAYb4RQEHNjAoMCYGCCsGAQUFBwIBFhpodHRwczovL3d3dy50aGF3dGUu
|
|
92
|
+
Y29tL2NwczApBgNVHREEIjAgpB4wHDEaMBgGA1UEAxMRU3ltYW50ZWNQS0ktMS01
|
|
93
|
+
MzcwHQYDVR0OBBYEFMJPSFf80U+awF04fQ4F29kutVJgMB8GA1UdIwQYMBaAFHtb
|
|
94
|
+
Rc+vzst6/TGSGmq280brV0hQMA0GCSqGSIb3DQEBCwUAA4IBAQCNBt5DyXYCytkj
|
|
95
|
+
l17zY9d9RMIPawr1B+WLuPrgo/prgJK1AyzFN+DC5ZW1knAYKEKU7kt3agEPiyPs
|
|
96
|
+
Vk30AGnlhMji6t5bPvY8BzqUymwnscyDGmBxJ9K/AvUeRNNI1abTdiEAnPqYZOsX
|
|
97
|
+
Nj/rGzw+prHZWAYOctlovvGnINdS5KR3H3FwnVU1hTfhHU2UwnB/lUBuS32ytCkq
|
|
98
|
+
A3nIuUxnYQSgiyf/WQDrVX/GtzM1LV5OrLjqEsXo97mrvnSSLLfZTcqELxzC8HJ8
|
|
99
|
+
sjFuz4DliAc2UXu6Ya9tjSNbNKOVvKIxf/L157fo78S1JzLp955pxyvovrsMqufq
|
|
100
|
+
YBLqJop4
|
|
101
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIE9jCCA96gAwIBAgIQN/ny0e5nZXXyLLuK7lQGBDANBgkqhkiG9w0BAQsFADBD
|
|
3
|
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMR0wGwYDVQQDExR0
|
|
4
|
+
aGF3dGUgU0hBMjU2IFNTTCBDQTAeFw0xNDEwMDMwMDAwMDBaFw0xNzA5MjQyMzU5
|
|
5
|
+
NTlaMHkxCzAJBgNVBAYTAkNIMQ0wCwYDVQQIDARCZXJuMRMwEQYDVQQHDApXb3Ji
|
|
6
|
+
bGF1ZmVuMR4wHAYDVQQKDBVTd2lzc2NvbSAoU2Nod2VpeikgQUcxCzAJBgNVBAsM
|
|
7
|
+
AklUMRkwFwYDVQQDDBBhcGkuc3dpc3Njb20uY29tMIIBIjANBgkqhkiG9w0BAQEF
|
|
8
|
+
AAOCAQ8AMIIBCgKCAQEA+RyG/DP70zYEmmQ2pIXuZH312V8X3HHwR3uPJwVqehBt
|
|
9
|
+
FuPUDz9/mLe8ZKrS+03ei/OR6p11LxCcxwUzhehZzUP/k1Dx7Bb2BSGgKaCZqL1w
|
|
10
|
+
zWA87MSyude0VdblklQ50yfsAdPuYlxTUnmXZHU8OPEARd7n0Tovk+5tuXYQ3kTs
|
|
11
|
+
XSPqYqYPuCqbYyqiIEfEoqu9fb5NKQSE6Z58ehAGEZQazkeUuFbgTo20BN3XE/mm
|
|
12
|
+
IDD+nb7NSHSqTjkTlm2nyMMgBE7Vjh1J0vGd3dyKvd+Stuv21tbb51AqjSxwovUW
|
|
13
|
+
DkZjxbg51A5szjW8hdvx/RaplAKN6qsFOpwjjXsY8QIDAQABo4IBrjCCAaowUwYD
|
|
14
|
+
VR0RBEwwSoISKi5hcGkuc3dpc3Njb20uY29tghEqLmFwaS5zd2lzc2NvbS5jaIIP
|
|
15
|
+
YXBpLnN3aXNzY29tLmNoghBhcGkuc3dpc3Njb20uY29tMAkGA1UdEwQCMAAwcgYD
|
|
16
|
+
VR0gBGswaTBnBgpghkgBhvhFAQc2MFkwJgYIKwYBBQUHAgEWGmh0dHBzOi8vd3d3
|
|
17
|
+
LnRoYXd0ZS5jb20vY3BzMC8GCCsGAQUFBwICMCMMIWh0dHBzOi8vd3d3LnRoYXd0
|
|
18
|
+
ZS5jb20vcmVwb3NpdG9yeTAOBgNVHQ8BAf8EBAMCBaAwHwYDVR0jBBgwFoAUK5o1
|
|
19
|
+
rgEYODDhcHoF4BF2o869kBQwKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3RnLnN5
|
|
20
|
+
bWNiLmNvbS90Zy5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMFcG
|
|
21
|
+
CCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3RnLnN5bWNkLmNvbTAm
|
|
22
|
+
BggrBgEFBQcwAoYaaHR0cDovL3RnLnN5bWNiLmNvbS90Zy5jcnQwDQYJKoZIhvcN
|
|
23
|
+
AQELBQADggEBACZQ4hiOTadCS7hexL9BHE7hzyj0u9lFOs6ND6AdVOT2SWqvQY+H
|
|
24
|
+
yQkehQOcNPoO9yX/nrcirY6i6nBejY4wMQ7m7keXpuiDW60h+3aZw+YNyHmnjeLv
|
|
25
|
+
ppCnOStprLl2/TTmQoYV0Ztt6zYF9P2SJuVTM6Q1Y1OJqTIaoeBsPAdX+wes87ot
|
|
26
|
+
iYZts546c5AHCRLEFg8PeqV8qwSLWvRMEWhY4RKbnOTvEFdhOjnwzaNA98SbnXFR
|
|
27
|
+
c2OQ/uX5PSADiz0jmEI/2PfBcpXR8bmYCCujjcK7IpcAfQb2VGyTAeyxO1/M7dzm
|
|
28
|
+
zcvWJ/MiFXwsthFAqfujNHDtMDduZIktGug=
|
|
29
|
+
-----END CERTIFICATE-----
|
|
@@ -2,99 +2,113 @@ Certificate:
|
|
|
2
2
|
Data:
|
|
3
3
|
Version: 3 (0x2)
|
|
4
4
|
Serial Number:
|
|
5
|
-
|
|
6
|
-
Signature Algorithm:
|
|
7
|
-
Issuer: C=US, O=
|
|
5
|
+
5d:b1:18:24:b0:85:61:d6:98:40:be:85:dd:a2:ad:fa
|
|
6
|
+
Signature Algorithm: sha256WithRSAEncryption
|
|
7
|
+
Issuer: C=US, O=thawte, Inc., CN=thawte SSL CA - G2
|
|
8
8
|
Validity
|
|
9
|
-
Not Before:
|
|
10
|
-
Not After :
|
|
11
|
-
Subject: C=CH, ST=Biel, L=Biel, O=NTH AG, CN
|
|
9
|
+
Not Before: Feb 3 00:00:00 2016 GMT
|
|
10
|
+
Not After : Feb 2 23:59:59 2019 GMT
|
|
11
|
+
Subject: C=CH, ST=Biel, L=Biel, O=NTH AG, CN=*.mobile-gw.com
|
|
12
12
|
Subject Public Key Info:
|
|
13
13
|
Public Key Algorithm: rsaEncryption
|
|
14
14
|
RSA Public Key: (2048 bit)
|
|
15
15
|
Modulus (2048 bit):
|
|
16
|
-
00:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
16
|
+
00:f0:85:d6:fe:aa:b0:05:81:3b:21:0a:5d:65:88:
|
|
17
|
+
f9:fc:d0:4f:00:d4:11:eb:8e:a2:f4:a9:7e:52:8d:
|
|
18
|
+
22:12:d4:5a:ff:1c:3b:f6:e8:74:30:6f:32:75:02:
|
|
19
|
+
b1:92:ce:d1:24:06:75:00:46:38:a8:97:17:4d:61:
|
|
20
|
+
d0:7f:e6:01:18:6e:14:d9:68:65:fc:f8:ee:4f:35:
|
|
21
|
+
31:2e:9d:bd:7c:6e:87:89:1d:c9:c6:b7:f1:09:9a:
|
|
22
|
+
22:1d:ce:b9:7a:9f:46:27:98:1d:d5:e2:7e:f6:2b:
|
|
23
|
+
0b:b6:c0:ef:92:20:c3:dc:d0:a4:65:f0:f6:32:d8:
|
|
24
|
+
90:f5:c0:14:95:7f:2a:f8:ca:c2:06:1a:63:3d:81:
|
|
25
|
+
5f:de:c2:9a:d7:27:69:e0:58:0d:da:90:11:86:97:
|
|
26
|
+
d3:04:a6:e6:4e:6b:25:77:02:4c:c3:65:5e:50:f2:
|
|
27
|
+
38:18:cc:40:cc:3c:77:9c:5f:79:ce:57:14:89:17:
|
|
28
|
+
f5:00:95:7b:e1:bd:be:e0:fb:2c:c2:e6:b2:89:1c:
|
|
29
|
+
d3:17:30:17:91:bb:c5:2b:f7:df:e9:79:86:94:a7:
|
|
30
|
+
21:c8:15:73:d8:af:1d:ca:5c:bd:b3:ed:ba:19:c1:
|
|
31
|
+
4a:11:e6:5a:9f:ca:f0:7e:d4:0b:bd:8c:e8:40:be:
|
|
32
|
+
a8:63:ad:66:8f:c1:72:c3:4f:65:c2:e6:f2:13:65:
|
|
33
|
+
c5:4b
|
|
34
34
|
Exponent: 65537 (0x10001)
|
|
35
35
|
X509v3 extensions:
|
|
36
|
-
X509v3 Subject Alternative Name:
|
|
37
|
-
DNS:
|
|
38
|
-
X509v3 Basic Constraints:
|
|
36
|
+
X509v3 Subject Alternative Name:
|
|
37
|
+
DNS:*.mobile-gw.com, DNS:mobile-gw.com
|
|
38
|
+
X509v3 Basic Constraints:
|
|
39
39
|
CA:FALSE
|
|
40
|
-
X509v3 Certificate Policies:
|
|
41
|
-
Policy: 2.
|
|
42
|
-
CPS: https://www.thawte.com/cps
|
|
40
|
+
X509v3 Certificate Policies:
|
|
41
|
+
Policy: 2.23.140.1.2.2
|
|
42
|
+
CPS: https://www.thawte.com/cps
|
|
43
|
+
User Notice:
|
|
44
|
+
Explicit Text: https://www.thawte.com/repository
|
|
43
45
|
|
|
44
46
|
X509v3 Key Usage: critical
|
|
45
47
|
Digital Signature, Key Encipherment
|
|
46
|
-
X509v3 Authority Key Identifier:
|
|
47
|
-
keyid:
|
|
48
|
+
X509v3 Authority Key Identifier:
|
|
49
|
+
keyid:C2:4F:48:57:FC:D1:4F:9A:C0:5D:38:7D:0E:05:DB:D9:2E:B5:52:60
|
|
48
50
|
|
|
49
|
-
X509v3 CRL Distribution Points:
|
|
50
|
-
URI:http://
|
|
51
|
+
X509v3 CRL Distribution Points:
|
|
52
|
+
URI:http://tj.symcb.com/tj.crl
|
|
51
53
|
|
|
52
|
-
X509v3 Extended Key Usage:
|
|
54
|
+
X509v3 Extended Key Usage:
|
|
53
55
|
TLS Web Server Authentication, TLS Web Client Authentication
|
|
54
|
-
Authority Information Access:
|
|
55
|
-
OCSP - URI:http://
|
|
56
|
-
CA Issuers - URI:http://
|
|
56
|
+
Authority Information Access:
|
|
57
|
+
OCSP - URI:http://tj.symcd.com
|
|
58
|
+
CA Issuers - URI:http://tj.symcb.com/tj.crt
|
|
59
|
+
|
|
60
|
+
Signature Algorithm: sha256WithRSAEncryption
|
|
61
|
+
89:48:ab:9d:2d:ba:b8:55:e3:75:dd:0d:26:c8:89:e9:bd:80:
|
|
62
|
+
8e:9b:f6:f6:d5:8f:eb:81:ff:c6:bd:ba:9d:69:f5:76:e9:45:
|
|
63
|
+
d2:d8:13:6e:79:ba:37:ec:3e:a1:cb:e8:ce:65:28:1c:3e:57:
|
|
64
|
+
1f:e3:15:83:d1:ce:97:89:1b:4f:5b:46:48:6b:de:52:3c:3b:
|
|
65
|
+
c5:0d:25:1e:11:04:d6:fc:84:e7:cd:bd:e0:82:96:0d:9f:5f:
|
|
66
|
+
04:14:c7:75:db:8c:29:c5:bb:cd:16:7f:de:55:e8:c8:f7:95:
|
|
67
|
+
b7:f6:19:f1:96:e1:ad:21:50:90:8d:b1:dc:3c:ad:79:4c:bf:
|
|
68
|
+
41:d6:da:24:8b:92:f1:41:1c:97:bd:66:56:70:8c:09:50:d8:
|
|
69
|
+
d3:75:59:92:8f:c7:1c:42:22:cf:ac:c0:59:63:92:21:f8:53:
|
|
70
|
+
e3:01:c7:69:90:10:5a:2e:45:24:51:d4:a6:a9:f3:84:bd:14:
|
|
71
|
+
ff:6f:85:fe:f5:59:69:f6:a4:18:68:40:86:9d:1e:ee:99:51:
|
|
72
|
+
98:f8:11:88:ac:66:ad:b1:e0:e0:cc:c9:da:b2:c6:ed:01:67:
|
|
73
|
+
62:17:ba:0e:83:7f:38:fa:77:94:31:32:7c:af:2d:3f:26:20:
|
|
74
|
+
83:96:85:ad:8d:b8:cb:5e:d4:04:b1:f8:de:5f:e7:19:20:13:
|
|
75
|
+
69:23:2f:7e
|
|
57
76
|
|
|
58
|
-
Signature Algorithm: sha1WithRSAEncryption
|
|
59
|
-
98:cc:b7:c8:3c:24:cf:88:3a:fb:81:df:24:cc:3d:a0:1c:4e:
|
|
60
|
-
49:48:cd:ce:8d:81:13:bc:f1:72:fa:c5:ad:c4:86:f5:f9:e5:
|
|
61
|
-
91:38:6a:04:3f:61:ad:a8:3b:4b:ff:e6:38:63:30:c9:d3:08:
|
|
62
|
-
ec:90:ed:e1:c1:c1:76:30:91:aa:58:87:b8:f7:f3:39:b1:d5:
|
|
63
|
-
66:6e:0a:cb:21:62:de:90:ff:98:5d:9b:e7:20:66:95:6b:cb:
|
|
64
|
-
08:51:43:66:39:31:4f:43:45:2e:b0:54:6c:96:59:1e:c9:9d:
|
|
65
|
-
d2:76:98:e2:a6:df:1c:d0:64:2e:97:5c:26:e3:f7:9b:34:2c:
|
|
66
|
-
92:48:09:c4:09:0c:af:99:74:20:d1:40:e5:8b:9e:cd:a8:da:
|
|
67
|
-
87:d2:25:1e:7a:88:3c:91:34:05:3f:d6:ba:bd:39:97:4c:b4:
|
|
68
|
-
53:87:85:aa:8c:5d:9e:79:ae:e7:09:c7:4d:e2:cc:bc:01:3f:
|
|
69
|
-
ee:9f:e0:4b:29:48:22:64:d4:fc:6e:0d:91:ed:09:c7:86:c6:
|
|
70
|
-
bb:7c:5f:ab:d6:69:64:52:3c:70:13:25:04:7c:fc:73:aa:ea:
|
|
71
|
-
9d:41:c4:e9:a3:41:8b:77:68:63:80:1c:16:f6:db:b4:eb:6d:
|
|
72
|
-
89:c2:94:e6:ae:13:e3:7d:f1:2b:62:87:2e:d4:bb:22:e0:2d:
|
|
73
|
-
06:61:c7:09
|
|
74
77
|
-----BEGIN CERTIFICATE-----
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
78
|
+
MIIGnDCCBYSgAwIBAgIQXbEYJLCFYdaYQL6F3aKt+jANBgkqhkiG9w0BAQsFADBB
|
|
79
|
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMRswGQYDVQQDExJ0
|
|
80
|
+
aGF3dGUgU1NMIENBIC0gRzIwHhcNMTYwMjAzMDAwMDAwWhcNMTkwMjAyMjM1OTU5
|
|
81
|
+
WjBWMQswCQYDVQQGEwJDSDENMAsGA1UECAwEQmllbDENMAsGA1UEBwwEQmllbDEP
|
|
82
|
+
MA0GA1UECgwGTlRIIEFHMRgwFgYDVQQDDA8qLm1vYmlsZS1ndy5jb20wggEiMA0G
|
|
83
|
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDwhdb+qrAFgTshCl1liPn80E8A1BHr
|
|
84
|
+
jqL0qX5SjSIS1Fr/HDv26HQwbzJ1ArGSztEkBnUARjiolxdNYdB/5gEYbhTZaGX8
|
|
85
|
+
+O5PNTEunb18boeJHcnGt/EJmiIdzrl6n0YnmB3V4n72Kwu2wO+SIMPc0KRl8PYy
|
|
86
|
+
2JD1wBSVfyr4ysIGGmM9gV/ewprXJ2ngWA3akBGGl9MEpuZOayV3AkzDZV5Q8jgY
|
|
87
|
+
zEDMPHecX3nOVxSJF/UAlXvhvb7g+yzC5rKJHNMXMBeRu8Ur99/peYaUpyHIFXPY
|
|
88
|
+
rx3KXL2z7boZwUoR5lqfyvB+1Au9jOhAvqhjrWaPwXLDT2XC5vITZcVLAgMBAAGj
|
|
89
|
+
ggN5MIIDdTApBgNVHREEIjAggg8qLm1vYmlsZS1ndy5jb22CDW1vYmlsZS1ndy5j
|
|
90
|
+
b20wCQYDVR0TBAIwADBuBgNVHSAEZzBlMGMGBmeBDAECAjBZMCYGCCsGAQUFBwIB
|
|
91
|
+
FhpodHRwczovL3d3dy50aGF3dGUuY29tL2NwczAvBggrBgEFBQcCAjAjDCFodHRw
|
|
92
|
+
czovL3d3dy50aGF3dGUuY29tL3JlcG9zaXRvcnkwDgYDVR0PAQH/BAQDAgWgMB8G
|
|
93
|
+
A1UdIwQYMBaAFMJPSFf80U+awF04fQ4F29kutVJgMCsGA1UdHwQkMCIwIKAeoByG
|
|
94
|
+
Gmh0dHA6Ly90ai5zeW1jYi5jb20vdGouY3JsMB0GA1UdJQQWMBQGCCsGAQUFBwMB
|
|
95
|
+
BggrBgEFBQcDAjBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly90
|
|
96
|
+
ai5zeW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly90ai5zeW1jYi5jb20vdGou
|
|
97
|
+
Y3J0MIIB9QYKKwYBBAHWeQIEAgSCAeUEggHhAd8AdQDd6x0reg1PpiCLga2BaHB+
|
|
98
|
+
Lo6dAdVciI09EcTNtuy+zAAAAVKmYNGgAAAEAwBGMEQCICEff8v1whmEcVtS9NvG
|
|
99
|
+
Gf8ADJNiNhvxqRF2GKHVz1xmAiBhrK8hWew6Mm8eGiK9C/Ng4dVfkB02v7LBHAng
|
|
100
|
+
r/n4wAB2AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABUqZg0dgA
|
|
101
|
+
AAQDAEcwRQIgURV5Nsr/ywy1HODZG079z603p0nicJwGrHrpWeeUuu0CIQDhw82F
|
|
102
|
+
RbGA5ulPadFoYCXJZAF6Lu9h3eG0jaqNsNUgxQB2AGj2mPgfZIK+OozuuSgdTPxx
|
|
103
|
+
UV1nk9RE0QpnrLtPT/vEAAABUqZg0dcAAAQDAEcwRQIgVf9hp30TKcEOjJu8lFEz
|
|
104
|
+
uc8LuL0xV3BOIQaLtT/kKkgCIQDpZ5jOj2p1tamrJRf/tSyX7v6+DKKRnsfdMoiC
|
|
105
|
+
V3I2uAB2AO5Lvbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABUqZg06AA
|
|
106
|
+
AAQDAEcwRQIhAM5fmYR2CsP2p+RydqVoWTYnrRnIsEEk1d+gqQ28T4T7AiB6dDfW
|
|
107
|
+
hGcbubfGhicI4XUwqq/jasCJi7RrS8qoCq+o1DANBgkqhkiG9w0BAQsFAAOCAQEA
|
|
108
|
+
iUirnS26uFXjdd0NJsiJ6b2Ajpv29tWP64H/xr26nWn1dulF0tgTbnm6N+w+ocvo
|
|
109
|
+
zmUoHD5XH+MVg9HOl4kbT1tGSGveUjw7xQ0lHhEE1vyE58294IKWDZ9fBBTHdduM
|
|
110
|
+
KcW7zRZ/3lXoyPeVt/YZ8ZbhrSFQkI2x3DyteUy/QdbaJIuS8UEcl71mVnCMCVDY
|
|
111
|
+
03VZko/HHEIiz6zAWWOSIfhT4wHHaZAQWi5FJFHUpqnzhL0U/2+F/vVZafakGGhA
|
|
112
|
+
hp0e7plRmPgRiKxmrbHg4MzJ2rLG7QFnYhe6DoN/OPp3lDEyfK8tPyYgg5aFrY24
|
|
113
|
+
y17UBLH43l/nGSATaSMvfg==
|
|
100
114
|
-----END CERTIFICATE-----
|
|
@@ -42,7 +42,7 @@ module MoteSMS
|
|
|
42
42
|
# Returns nothing.
|
|
43
43
|
def deliver(message, options = {})
|
|
44
44
|
to = self.recipient.respond_to?(:call) ? self.recipient.call(message) : self.recipient
|
|
45
|
-
ActionMailerSMSMailer.forward_sms(to, message).
|
|
45
|
+
ActionMailerSMSMailer.forward_sms(to, message).deliver_now
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'uri'
|
|
2
|
+
require 'net/https'
|
|
3
|
+
require 'digest/sha1'
|
|
4
|
+
|
|
5
|
+
require 'active_support/security_utils'
|
|
6
|
+
require 'mote_sms/version'
|
|
7
|
+
|
|
8
|
+
module Transports
|
|
9
|
+
# Small abstraction on top of Net::HTTP to handle things like public key pinning
|
|
10
|
+
# et all.
|
|
11
|
+
class HttpClient
|
|
12
|
+
CERTS_PATH = File.expand_path File.join(File.dirname(__FILE__), '..', 'ssl_certs')
|
|
13
|
+
|
|
14
|
+
def self.ssl_options
|
|
15
|
+
@ssl_options ||= ->(http) {
|
|
16
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
|
17
|
+
http.verify_depth = 9
|
|
18
|
+
http.cert_store = self.default_cert_store
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.default_cert_store
|
|
23
|
+
@default_cert_store ||= OpenSSL::X509::Store.new.tap do |store|
|
|
24
|
+
Dir["#{CERTS_PATH}/*CA.pem"].each { |c| store.add_file c }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.fingerprint_host(host)
|
|
29
|
+
pem = File.join(CERTS_PATH, "#{host}.pem")
|
|
30
|
+
return unless File.exist?(pem)
|
|
31
|
+
cert = OpenSSL::X509::Certificate.new(File.read(pem))
|
|
32
|
+
Digest::SHA1.hexdigest(cert.to_der)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.default_user_agent
|
|
36
|
+
"Ruby/mote_sms #{MoteSMS::VERSION}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
attr_reader :endpoint, :proxy_address, :proxy_port, :user_agent, :ssl, :fingerprint
|
|
40
|
+
|
|
41
|
+
def initialize(endpoint, enable_fingerprint: true, ssl: self.class.ssl_options,
|
|
42
|
+
proxy_address: nil, proxy_port: nil, user_agent: self.class.default_user_agent)
|
|
43
|
+
@endpoint = URI.parse(endpoint)
|
|
44
|
+
@proxy_address = proxy_address
|
|
45
|
+
@proxy_port = proxy_port
|
|
46
|
+
@user_agent = user_agent
|
|
47
|
+
@ssl = ssl || self.class.ssl_options
|
|
48
|
+
if enable_fingerprint
|
|
49
|
+
@fingerprint = ENV.fetch(
|
|
50
|
+
"MOTE_SMS_#{@endpoint.host.to_s.upcase.gsub(/[\.-]/, '_')}_FINGERPRINT",
|
|
51
|
+
self.class.fingerprint_host(@endpoint.host))
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def https?
|
|
56
|
+
endpoint.scheme == 'https'
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def request(request)
|
|
60
|
+
request['User-Agent'] = user_agent
|
|
61
|
+
build_http_client.request(request)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
protected
|
|
65
|
+
|
|
66
|
+
def build_http_client
|
|
67
|
+
Net::HTTP.new(endpoint.host, endpoint.port, proxy_address, proxy_port).tap do |http|
|
|
68
|
+
if https?
|
|
69
|
+
http.use_ssl = true
|
|
70
|
+
http.verify_callback = ->(ok, store) { verify_fingerprint(ok, store) }
|
|
71
|
+
ssl.call(http) if ssl.respond_to?(:call)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def verify_fingerprint(ok, store)
|
|
77
|
+
cert_digest = Digest::SHA1.hexdigest(store.chain.first.to_der)
|
|
78
|
+
return ok if verify_fingerprint?(cert_digest)
|
|
79
|
+
|
|
80
|
+
logger.error(
|
|
81
|
+
format('[Transports::HttpClient] failed to verify %s fingerprint (ACTUAL: %s, EXPECTED: %s)',
|
|
82
|
+
endpoint, digest, fingerprint))
|
|
83
|
+
false
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def verify_fingerprint?(digest)
|
|
87
|
+
return true unless fingerprint
|
|
88
|
+
ActiveSupport::SecurityUtils.secure_compare(digest, fingerprint)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|