Add a system for upgrading accounts using upgrade codes. Users purchase an upgrade code off-site then redeem it on-site to upgrade their account to Gold. Upgrade codes are randomly pre-generated and are one time use only. Codes have enough randomness that guessing a code is infeasible.
31 lines
830 B
Ruby
31 lines
830 B
Ruby
# frozen_string_literal: true
|
|
|
|
class PaymentTransaction::Shopify < PaymentTransaction
|
|
class InvalidWebhookError < StandardError; end
|
|
|
|
def create!(**params)
|
|
nil
|
|
end
|
|
|
|
def refund!(reason = nil)
|
|
raise NotImplementedError
|
|
end
|
|
|
|
concerning :WebhookMethods do
|
|
class_methods do
|
|
def receive_webhook(request)
|
|
verify_webhook!(request)
|
|
end
|
|
|
|
private def verify_webhook!(request)
|
|
payload = request.body.read
|
|
actual_signature = request.headers["X-Shopify-Hmac-Sha256"].to_s
|
|
calculated_signature = Base64.strict_encode64(OpenSSL::HMAC.digest("sha256", Danbooru.config.shopify_webhook_secret, payload))
|
|
raise InvalidWebhookError unless ActiveSupport::SecurityUtils::secure_compare(actual_signature, calculated_signature)
|
|
|
|
request
|
|
end
|
|
end
|
|
end
|
|
end
|