Files
sure/app/controllers/api/v1/push_subscriptions_controller.rb
T
0aa43de10a Add experimental Swift-native Sure Insights app (#3134)
* Add Swift-native Sure app

* Fix push subscriptions schema for CI

* Address native app review feedback

* Address remaining native app review feedback

* Use Flutter app logo for native icon

* Honor insight notification preferences and locale

---------

Co-authored-by: Juan Jose Mata <2v8shcb6pz@privaterelay.appleid.com>
Co-authored-by: sure-admin <sure-admin@splashblot.com>
2026-08-25 04:16:24 +02:00

58 lines
1.8 KiB
Ruby

# frozen_string_literal: true
class Api::V1::PushSubscriptionsController < Api::V1::BaseController
before_action :ensure_write_scope
def create
token = subscription_params[:token].to_s.downcase
subscription = current_resource_owner.push_subscriptions.find_or_initialize_by(token: token)
subscription.assign_attributes(
environment: subscription_params[:environment],
platform: subscription_params[:platform],
last_registered_at: Time.current
)
subscription.save!
render json: serialize(subscription), status: :created
rescue ActiveRecord::RecordInvalid => e
render json: { error: "validation_error", message: e.record.errors.full_messages.to_sentence },
status: :unprocessable_entity
rescue ActiveRecord::RecordNotUnique
subscription = current_resource_owner.push_subscriptions.find_by(token: token)
if subscription
subscription.update!(
environment: subscription_params[:environment],
platform: subscription_params[:platform],
last_registered_at: Time.current
)
render json: serialize(subscription), status: :created
else
render json: { error: "validation_error", message: "Device token is already registered" },
status: :unprocessable_entity
end
end
def destroy
current_resource_owner.push_subscriptions.find(params[:id]).destroy!
head :no_content
end
private
def ensure_write_scope
authorize_scope!(:write)
end
def subscription_params
params.permit(:token, :environment, :platform)
end
def serialize(subscription)
{
id: subscription.id,
environment: subscription.environment,
platform: subscription.platform,
last_registered_at: subscription.last_registered_at.iso8601
}
end
end