user upgrades: add upgrade code system.
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.
This commit is contained in:
30
app/logical/payment_transaction/shopify.rb
Normal file
30
app/logical/payment_transaction/shopify.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user