mirror of
https://github.com/we-promise/sure.git
synced 2026-09-05 23:01:26 +00:00
* 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>
58 lines
1.8 KiB
Ruby
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
|