* app/controllers (& decorators) i18n etc * tidy key names * update keys * delete ja.yml * delete an involved ja.yml * fix for PR review * fix for spec * delete ja.yml
108 lines
3.3 KiB
Ruby
108 lines
3.3 KiB
Ruby
class StripeActiveCardsController < ApplicationController
|
|
before_action :authenticate_user!
|
|
before_action :initialize_stripe
|
|
|
|
AUDIT_LOG_CATEGORY = "user.credit_card.edit".freeze
|
|
private_constant :AUDIT_LOG_CATEGORY
|
|
|
|
STRIPE_PERMITTED_PARAMS = %i[stripe_token].freeze
|
|
|
|
def create
|
|
authorize :stripe_active_card
|
|
|
|
customer = find_or_create_customer
|
|
|
|
if Payments::Customer.create_source(customer.id, stripe_params[:stripe_token])
|
|
flash[:settings_notice] = I18n.t("stripe_active_cards_controller.updated")
|
|
audit_log("add")
|
|
else
|
|
ForemStatsClient.increment("stripe.errors", tags: ["action:create_card", "user_id:#{current_user.id}"])
|
|
|
|
flash[:error] = I18n.t("stripe_active_cards_controller.cannot_update")
|
|
end
|
|
redirect_to user_settings_path(:billing)
|
|
rescue Payments::CardError, Payments::InvalidRequestError => e
|
|
ForemStatsClient.increment("stripe.errors", tags: ["action:create_card", "user_id:#{current_user.id}"])
|
|
redirect_to user_settings_path(:billing), flash: { error: e.message }
|
|
end
|
|
|
|
def update
|
|
authorize :stripe_active_card
|
|
|
|
# change the default card
|
|
customer = find_customer
|
|
card = Payments::Customer.get_source(customer, params[:id])
|
|
customer.default_source = card.id
|
|
|
|
if Payments::Customer.save(customer)
|
|
flash[:settings_notice] = I18n.t("stripe_active_cards_controller.updated")
|
|
audit_log("update")
|
|
else
|
|
ForemStatsClient.increment("stripe.errors", tags: ["action:update_card", "user_id:#{current_user.id}"])
|
|
flash[:error] = I18n.t("stripe_active_cards_controller.cannot_update")
|
|
end
|
|
|
|
redirect_to user_settings_path(:billing)
|
|
rescue Payments::CardError, Payments::InvalidRequestError => e
|
|
ForemStatsClient.increment("stripe.errors", tags: ["action:update_card", "user_id:#{current_user.id}"])
|
|
|
|
redirect_to user_settings_path(:billing), flash: { error: e.message }
|
|
end
|
|
|
|
def destroy
|
|
authorize :stripe_active_card
|
|
|
|
customer = find_customer
|
|
|
|
if customer.subscriptions.count.positive?
|
|
flash[:error] = I18n.t("stripe_active_cards_controller.cannot_remove")
|
|
else
|
|
source = Payments::Customer.get_source(customer, params[:id])
|
|
Payments::Customer.detach_source(customer.id, source.id)
|
|
Payments::Customer.save(customer)
|
|
|
|
flash[:settings_notice] = I18n.t("stripe_active_cards_controller.removed")
|
|
audit_log("remove")
|
|
end
|
|
|
|
redirect_to user_settings_path(:billing)
|
|
rescue Payments::InvalidRequestError => e
|
|
ForemStatsClient.increment("stripe.errors")
|
|
|
|
redirect_to user_settings_path(:billing), flash: { error: e.message }
|
|
end
|
|
|
|
private
|
|
|
|
def find_customer
|
|
Payments::Customer.get(current_user.stripe_id_code)
|
|
end
|
|
|
|
def find_or_create_customer
|
|
if current_user.stripe_id_code.present?
|
|
find_customer
|
|
else
|
|
Payments::Customer.create(email: current_user.email).tap do |customer|
|
|
current_user.update(stripe_id_code: customer.id)
|
|
end
|
|
end
|
|
end
|
|
|
|
def stripe_params
|
|
params.permit(STRIPE_PERMITTED_PARAMS)
|
|
end
|
|
|
|
def audit_log(user_action)
|
|
AuditLog.create(
|
|
category: AUDIT_LOG_CATEGORY,
|
|
user: current_user,
|
|
roles: current_user.roles_name,
|
|
slug: "credit_card_#{user_action}",
|
|
data: {
|
|
action: action_name,
|
|
controller: controller_name,
|
|
user_action: user_action
|
|
},
|
|
)
|
|
end
|
|
end
|