class Dubai::Passbook::Pass

Constants

TYPES

Attributes

assets[R]
pass[R]

Public Class Methods

new(directory) click to toggle source
# File lib/dubai/pass.rb, line 48
def initialize(directory)
  @assets = Dir[File.join(directory, '*')]
  @pass = File.read(@assets.delete(@assets.detect { |file| File.basename(file) == 'pass.json' }))
end

Public Instance Methods

manifest() click to toggle source
# File lib/dubai/pass.rb, line 53
def manifest
  checksums = {}
  checksums['pass.json'] = Digest::SHA1.hexdigest(@pass)

  @assets.each do |file|
    checksums[File.basename(file)] = Digest::SHA1.file(file).hexdigest
  end

  checksums.to_json
end
pkpass() click to toggle source
# File lib/dubai/pass.rb, line 64
def pkpass
  Zip::OutputStream.write_buffer do |zip|
    zip.put_next_entry('pass.json') && zip.write(@pass)
    zip.put_next_entry('manifest.json') && zip.write(manifest)
    zip.put_next_entry('signature') && zip.write(signature(manifest))

    @assets.each do |file|
      zip.put_next_entry(File.basename(file)) && zip.print(IO.read(file))
    end
  end
end

Private Instance Methods

p12() click to toggle source
# File lib/dubai/pass.rb, line 89
def p12
  OpenSSL::PKCS12.new(File.read(Passbook.certificate), Passbook.password)
end
signature(manifest) click to toggle source
# File lib/dubai/pass.rb, line 78
def signature(manifest)
  pk7 = OpenSSL::PKCS7.sign(p12.certificate, p12.key, manifest, [wwdr], OpenSSL::PKCS7::BINARY | OpenSSL::PKCS7::DETACHED)
  data = OpenSSL::PKCS7.write_smime(pk7)

  start = %(filename=\"smime.p7s"\n\n)
  finish = "\n\n------"
  data = data[(data.index(start) + start.length)...(data.rindex(finish) + finish.length)]

  Base64.decode64(data)
end
wwdr() click to toggle source
# File lib/dubai/pass.rb, line 93
def wwdr
  OpenSSL::X509::Certificate.new(WWDR_CERTIFICATE)
end