Sha256: a22292a67fdc2250ec21d62e9b4c8154253d2fa8308bc229485c9470cf915e36
Contents?: true
Size: 1.85 KB
Versions: 1
Compression:
Stored size: 1.85 KB
Contents
module Passkit module Api module V1 class PassesController < ActionController::API before_action :decrypt_payload, only: :create def create send_file(fetch_pass(@payload)) end # @return If request is authorized, returns HTTP status 200 with a payload of the pass data. # @return If the request is not authorized, returns HTTP status 401. # @return Otherwise, returns the appropriate standard HTTP status. def show authentication_token = request.headers["Authorization"]&.split(" ") & [1] unless authentication_token.present? render json: {}, status: :unauthorized return end pass = Pass.find_by(serial_number: params[:serial_number], authentication_token: authentication_token) unless pass render json: {}, status: :unauthorized return end pass_output_path = Passkit::Generator.new(pass).generate_and_sign response.headers["last-modified"] = pass.generator.updated_at.strftime("%Y-%m-%d %H:%M:%S") if request.headers["If-Modified-Since"].nil? || (pass.generator.updated_at.to_i > Time.zone.parse(request.headers["If-Modified-Since"]).to_i) send_file(pass_output_path) else head :not_modified end end private def decrypt_payload @payload = Passkit::UrlEncrypt.decrypt(params[:payload]) if DateTime.parse(@payload[:valid_until]).past? head :not_found end end def fetch_pass(payload) generator_class = payload[:generator_class].constantize generator = generator_class.find(payload[:generator_id]) Passkit::Factory.create_pass(generator, payload[:pass_class]) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
passkit-0.2.0 | app/controllers/passkit/api/v1/passes_controller.rb |