Class: Webpush::Request
- Inherits:
-
Object
- Object
- Webpush::Request
- Defined in:
- lib/webpush/request.rb
Instance Method Summary collapse
- #body ⇒ Object
- #build_vapid_headers ⇒ Object
- #headers ⇒ Object
-
#initialize(message: "", subscription:, vapid:, **options) ⇒ Request
constructor
A new instance of Request.
- #perform ⇒ Object
Constructor Details
#initialize(message: "", subscription:, vapid:, **options) ⇒ Request
Returns a new instance of Request.
10 11 12 13 14 15 16 |
# File 'lib/webpush/request.rb', line 10 def initialize(message: "", subscription:, vapid:, **) endpoint = subscription.fetch(:endpoint) @endpoint = endpoint.gsub(GCM_URL, TEMP_GCM_URL) @payload = build_payload(, subscription) @vapid_options = vapid @options = .merge() end |
Instance Method Details
#body ⇒ Object
74 75 76 |
# File 'lib/webpush/request.rb', line 74 def body @payload.fetch(:ciphertext, "") end |
#build_vapid_headers ⇒ Object
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/webpush/request.rb', line 63 def build_vapid_headers vapid_key = VapidKey.from_keys(vapid_public_key, vapid_private_key) jwt = JWT.encode(jwt_payload, vapid_key.curve, 'ES256', jwt_header_fields) p256ecdsa = vapid_key.public_key_for_push_header { 'Authorization' => 'WebPush ' + jwt, 'Crypto-Key' => 'p256ecdsa=' + p256ecdsa, } end |
#headers ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/webpush/request.rb', line 41 def headers headers = {} headers["Content-Type"] = "application/octet-stream" headers["Ttl"] = ttl if @payload.has_key?(:server_public_key) headers["Content-Encoding"] = "aesgcm" headers["Encryption"] = "salt=#{salt_param}" headers["Crypto-Key"] = "dh=#{dh_param}" end if api_key? headers["Authorization"] = api_key elsif vapid? vapid_headers = build_vapid_headers headers["Authorization"] = vapid_headers["Authorization"] headers["Crypto-Key"] = [ headers["Crypto-Key"], vapid_headers["Crypto-Key"] ].compact.join(";") end headers end |
#perform ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/webpush/request.rb', line 18 def perform http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true req = Net::HTTP::Post.new(uri.request_uri, headers) req.body = body resp = http.request(req) if resp.is_a?(Net::HTTPGone) || #Firefox unsubscribed response (resp.is_a?(Net::HTTPBadRequest) && resp. == "UnauthorizedRegistration") #Chrome unsubscribed response raise InvalidSubscription.new(resp, uri.host) elsif resp.is_a?(Net::HTTPNotFound) # 404 raise ExpiredSubscription.new(resp, uri.host) elsif resp.is_a?(Net::HTTPRequestEntityTooLarge) # 413 raise PayloadTooLarge.new(resp, uri.host) elsif resp.is_a?(Net::HTTPTooManyRequests) # 429, try again later! raise TooManyRequests.new(resp, uri.host) elsif !resp.is_a?(Net::HTTPSuccess) # unknown/unhandled response error raise ResponseError.new(resp, uri.host) end resp end |