Devolver la llave pública de VAPID
This commit is contained in:
parent
fbf30112e9
commit
20d5c811a1
6 changed files with 38 additions and 3 deletions
|
@ -88,7 +88,7 @@ GEM
|
||||||
msgpack (1.2.9)
|
msgpack (1.2.9)
|
||||||
multi_json (1.13.1)
|
multi_json (1.13.1)
|
||||||
nio4r (2.3.1)
|
nio4r (2.3.1)
|
||||||
nokogiri (1.10.3)
|
nokogiri (1.10.4)
|
||||||
mini_portile2 (~> 2.4.0)
|
mini_portile2 (~> 2.4.0)
|
||||||
parallel (1.17.0)
|
parallel (1.17.0)
|
||||||
parser (2.6.3.0)
|
parser (2.6.3.0)
|
||||||
|
|
|
@ -4,6 +4,13 @@
|
||||||
class WebpushSubscriptionsController < ApplicationController
|
class WebpushSubscriptionsController < ApplicationController
|
||||||
before_action :authenticate!
|
before_action :authenticate!
|
||||||
|
|
||||||
|
# POST /webpush_subscriptions
|
||||||
|
#
|
||||||
|
# Genera una suscripción Webpush
|
||||||
|
#
|
||||||
|
# @param Hash {
|
||||||
|
# webpush_subscription: {
|
||||||
|
# endpoint: @string, auth: @string, p256dh: @string } }
|
||||||
def create
|
def create
|
||||||
@subscription = current_pirata.webpush_subscriptions
|
@subscription = current_pirata.webpush_subscriptions
|
||||||
.build(subscriptions_params)
|
.build(subscriptions_params)
|
||||||
|
@ -17,6 +24,15 @@ class WebpushSubscriptionsController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# GET /webpush_subscriptions/vapid/public_key
|
||||||
|
#
|
||||||
|
# Devuelve la llave pública VAPID para suscribirse a Webpush
|
||||||
|
#
|
||||||
|
# @return Hash { vapid: { public_key: @string } }
|
||||||
|
def vapid_public_key
|
||||||
|
render 'webpush_subscriptions/vapid/public_key'
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def subscriptions_params
|
def subscriptions_params
|
||||||
|
|
|
@ -14,8 +14,8 @@ class WebpushSubscription < ApplicationRecord
|
||||||
Webpush.payload_send(
|
Webpush.payload_send(
|
||||||
vapid: {
|
vapid: {
|
||||||
subject: 'mailto:lumi@partidopirata.com.ar',
|
subject: 'mailto:lumi@partidopirata.com.ar',
|
||||||
public_key: Rails.application.credentials.vapid.public_key,
|
public_key: Rails.application.credentials.vapid[:public_key],
|
||||||
private_key: Rails.application.credentials.vapid.private_key
|
private_key: Rails.application.credentials.vapid[:private_key]
|
||||||
},
|
},
|
||||||
endpoint: endpoint, auth: auth, p256dh: p256dh,
|
endpoint: endpoint, auth: auth, p256dh: p256dh,
|
||||||
ttl: ttl.to_i, urgency: normalize_urgency(urgency),
|
ttl: ttl.to_i, urgency: normalize_urgency(urgency),
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
json.vapid do
|
||||||
|
json.public_key Rails.application.credentials.vapid[:public_key]
|
||||||
|
end
|
|
@ -4,6 +4,9 @@ Rails.application.routes.draw do
|
||||||
get '/piratas/yo', to: 'piratas#yo'
|
get '/piratas/yo', to: 'piratas#yo'
|
||||||
# No queremos un índice de piratas
|
# No queremos un índice de piratas
|
||||||
resources :piratas, only: %i[create]
|
resources :piratas, only: %i[create]
|
||||||
|
# Obtener la llave VAPID para suscripciones
|
||||||
|
get '/webpush_subscriptions/vapid/public_key',
|
||||||
|
to: 'webpush_subscriptions#vapid_public_key'
|
||||||
# Solo se pueden crear suscripciones
|
# Solo se pueden crear suscripciones
|
||||||
resources :webpush_subscriptions, only: %i[create]
|
resources :webpush_subscriptions, only: %i[create]
|
||||||
# Podemos crear barcas y dentro de ellas consensos
|
# Podemos crear barcas y dentro de ellas consensos
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'test_helper'
|
||||||
class PiratasControllerTest < ActionDispatch::IntegrationTest
|
class PiratasControllerTest < ActionDispatch::IntegrationTest
|
||||||
setup do
|
setup do
|
||||||
@pirata = create :pirata
|
@pirata = create :pirata
|
||||||
|
@ -36,4 +37,14 @@ class PiratasControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
assert_equal 204, @response.status
|
assert_equal 204, @response.status
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test 'se puede obtener la llave pública VAPID' do
|
||||||
|
get webpush_subscriptions_vapid_public_key_url,
|
||||||
|
as: :json, headers: @auth
|
||||||
|
|
||||||
|
body = JSON.parse response.body
|
||||||
|
|
||||||
|
assert body['vapid'].present?
|
||||||
|
assert body['vapid']['public_key'].present?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue