Sha256: b83649dab08dfd3ee47d89d37ab8cd3b5281167a3a56b26ab0a9e39640f066ee

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require 'rack'
require 'rack/contrib'

require 'sinatra/base'
require 'sinatra/param'
require 'rack'

require 'sequel'

require 'venice'

module Rack
  class InAppPurchase < Sinatra::Base
    VERSION = '0.0.2'

    use Rack::PostBodyContentTypeParser
    helpers Sinatra::Param

    Sequel.extension :core_extensions, :migration

    autoload :Product, ::File.join(::File.dirname(__FILE__), 'in-app-purchase/models/product')
    autoload :Receipt, ::File.join(::File.dirname(__FILE__), 'in-app-purchase/models/receipt')

    disable :raise_errors, :show_exceptions

    before do
      content_type :json
    end

    get '/products/identifiers' do
      Product.where(is_enabled: true).map(:product_identifier).to_json
    end

    post '/receipts/verify' do
      param :'receipt-data', String, required: true

      status 203

      begin
        receipt = Venice::Receipt.verify!(params[:'receipt-data'])

        Receipt.create({ip_address: request.ip}.merge(receipt.to_h))

        content = settings.content_callback.call(receipt) rescue nil

        {
          status: 0,
          receipt: receipt.to_h,
          content: content
        }.select{|k,v| v}.to_json
      rescue Venice::ReceiptVerificationError => error
        {
          status: Integer(error.message)
        }.to_json
      rescue
        halt 500
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rack-in-app-purchase-0.0.2 ./lib/rack/in-app-purchase.rb