The code powering m.abunchtell.com https://m.abunchtell.com
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

65 lignes
1.9 KiB

  1. # frozen_string_literal: true
  2. class Api::Web::PushSubscriptionsController < Api::Web::BaseController
  3. respond_to :json
  4. before_action :require_user!
  5. def create
  6. active_session = current_session
  7. unless active_session.web_push_subscription.nil?
  8. active_session.web_push_subscription.destroy!
  9. active_session.update!(web_push_subscription: nil)
  10. end
  11. # Mobile devices do not support regular notifications, so we enable push notifications by default
  12. alerts_enabled = active_session.detection.device.mobile? || active_session.detection.device.tablet?
  13. data = {
  14. alerts: {
  15. follow: alerts_enabled,
  16. follow_request: false,
  17. favourite: alerts_enabled,
  18. reblog: alerts_enabled,
  19. mention: alerts_enabled,
  20. poll: alerts_enabled,
  21. },
  22. }
  23. data.deep_merge!(data_params) if params[:data]
  24. web_subscription = ::Web::PushSubscription.create!(
  25. endpoint: subscription_params[:endpoint],
  26. key_p256dh: subscription_params[:keys][:p256dh],
  27. key_auth: subscription_params[:keys][:auth],
  28. data: data,
  29. user_id: active_session.user_id,
  30. access_token_id: active_session.access_token_id
  31. )
  32. active_session.update!(web_push_subscription: web_subscription)
  33. render json: web_subscription, serializer: REST::WebPushSubscriptionSerializer
  34. end
  35. def update
  36. params.require([:id])
  37. web_subscription = ::Web::PushSubscription.find(params[:id])
  38. web_subscription.update!(data: data_params)
  39. render json: web_subscription, serializer: REST::WebPushSubscriptionSerializer
  40. end
  41. private
  42. def subscription_params
  43. @subscription_params ||= params.require(:subscription).permit(:endpoint, keys: [:auth, :p256dh])
  44. end
  45. def data_params
  46. @data_params ||= params.require(:data).permit(alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll])
  47. end
  48. end