From b4fb766b23f4b50b51a366f55b451770ece3153a Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 11 May 2018 11:49:12 +0200 Subject: Add REST API for Web Push Notifications subscriptions (#7445) - POST /api/v1/push/subscription - PUT /api/v1/push/subscription - DELETE /api/v1/push/subscription - New OAuth scope: "push" (required for the above methods) --- .../api/v1/push/subscriptions_controller.rb | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 app/controllers/api/v1/push/subscriptions_controller.rb (limited to 'app/controllers/api/v1/push') diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb new file mode 100644 index 000000000..5038cc03c --- /dev/null +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +class Api::V1::Push::SubscriptionsController < Api::BaseController + before_action -> { doorkeeper_authorize! :push } + before_action :require_user! + before_action :set_web_push_subscription + + def create + @web_subscription&.destroy! + + @web_subscription = ::Web::PushSubscription.create!( + endpoint: subscription_params[:endpoint], + key_p256dh: subscription_params[:keys][:p256dh], + key_auth: subscription_params[:keys][:auth], + data: data_params, + user_id: current_user.id, + access_token_id: doorkeeper_token.id + ) + + render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer + end + + def update + raise ActiveRecord::RecordNotFound if @web_subscription.nil? + + @web_subscription.update!(data: data_params) + + render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer + end + + def destroy + @web_subscription&.destroy! + render_empty + end + + private + + def set_web_push_subscription + @web_subscription = ::Web::PushSubscription.find_by(access_token_id: doorkeeper_token.id) + end + + def subscription_params + params.require(:subscription).permit(:endpoint, keys: [:auth, :p256dh]) + end + + def data_params + return {} if params[:data].blank? + params.require(:data).permit(alerts: [:follow, :favourite, :reblog, :mention]) + end +end -- cgit From 97e43ec5f08aeafe0cb34a2e71e857f22c547f7a Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 13 May 2018 21:07:31 +0200 Subject: Add GET /api/v1/push/subscription REST API (#7471) * Add Api::V1::Push::SubscriptionsController#show * Add to routes --- app/controllers/api/v1/push/subscriptions_controller.rb | 4 ++++ config/routes.rb | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'app/controllers/api/v1/push') diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb index 5038cc03c..e99f20ca0 100644 --- a/app/controllers/api/v1/push/subscriptions_controller.rb +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -20,6 +20,10 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer end + def show + render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer + end + def update raise ActiveRecord::RecordNotFound if @web_subscription.nil? diff --git a/config/routes.rb b/config/routes.rb index b7bd1a7ed..bd9d09226 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -308,7 +308,7 @@ Rails.application.routes.draw do end namespace :push do - resource :subscription, only: [:create, :update, :destroy] + resource :subscription, only: [:create, :show, :update, :destroy] end end -- cgit From 416f6445050b662fb15045185332e1dc3bec3694 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 13 May 2018 21:45:18 +0200 Subject: Fix 404 for GET /api/v1/push/subscription (#7472) My bad... --- app/controllers/api/v1/push/subscriptions_controller.rb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'app/controllers/api/v1/push') diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb index e99f20ca0..1a19bd0ef 100644 --- a/app/controllers/api/v1/push/subscriptions_controller.rb +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -21,6 +21,8 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController end def show + raise ActiveRecord::RecordNotFound if @web_subscription.nil? + render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer end -- cgit