Class: ItunesReceiptEncoder::Receipt

Inherits:
Object
  • Object
show all
Defined in:
lib/itunes_receipt_encoder/receipt.rb

Overview

ItunesReceiptEncoder::Receipt

Constant Summary collapse

PRIVATE_KEY =
<<-EOF
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCwFAFtL0PVWIAhkZGvOieoG+FYbSxGsQZ+oj8p71kSIPj4zo1/
tNAB4hZZkhNUcys1WXb1AK5dXlMs4AwK6zIANvlwJxu4fBIW+sENc4yHaJWfcZJR
tgX35aWzAPTSjy/ChsYGwV9eVHNN1iG47E5vwLYH7B8xmagK8ame5cNIhwIDAQAB
AoGBAK8VhYGbYRkw4l/+zt1tt2c7Ke1yyXcVqj6beLFrNaeIL+nAAgW9tqRYux6f
2Sa9SnbHGjlvTvK6y3ww4OiujEzxRO/0ERUk49bkKt/wmEgBpp76mNcoosBu21Gq
p/C9NGkqqvV31nDhcgqYBAqI7Yc2d0vsUV4pPBw8tGl4yjKpAkEA4lTYxtXn7y2j
TFOQvmQkctqwC1zi2OtvP4uo3llnLsE1ffIQYk8c1jBXChiGgT7v2frZIv+fIUk/
DSxUEkDG7QJBAMcoxq91664GOZSsmZJK6R8uDbOrQ/PGTSrBfvwPP/CtUSJotaP2
qOFl8CttDs7DJbS6mY5oplNjN8s0MknwisMCQA13FMqHkVvmcC+rTRI2rQB0SEL0
zL4xC5ZRPcO0t/HNJtyOWTEwGbwYdiUwnlf0IZrrVJ3DbXkyfWDQQVQwrGUCQQCT
7T+Wd/n0Kn9+ZK00shtxo11eBGnWmYYbqdlOE22ksLdA3ZF9FerecD7xonGLNfu9
v5Pq6OQRr/JzJnPr45TNAkEAkqll2DUKWTKiva4MPvda30vZFbraRkW0WUWNIara
RDUtoqjlu22PZhexNT4aulrb7OVBxq4yjqdGq5Kgo1z8mw==
-----END RSA PRIVATE KEY-----
EOF
CERTIFICATE =
<<-EOF
-----BEGIN CERTIFICATE-----
MIIC3jCCAkegAwIBAgIJAN0obOgx+IbBMA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV
BAYTAkRFMQ8wDQYDVQQIEwZCZXJsaW4xDzANBgNVBAcTBkJlcmxpbjEjMCEGA1UE
ChMabWJhYXN5IG1vYmlsZSBzb2x1dGlvbnMgVUcwHhcNMTUxMjExMTczNjU3WhcN
MTYxMjEwMTczNjU3WjBUMQswCQYDVQQGEwJERTEPMA0GA1UECBMGQmVybGluMQ8w
DQYDVQQHEwZCZXJsaW4xIzAhBgNVBAoTGm1iYWFzeSBtb2JpbGUgc29sdXRpb25z
IFVHMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwFAFtL0PVWIAhkZGvOieo
G+FYbSxGsQZ+oj8p71kSIPj4zo1/tNAB4hZZkhNUcys1WXb1AK5dXlMs4AwK6zIA
NvlwJxu4fBIW+sENc4yHaJWfcZJRtgX35aWzAPTSjy/ChsYGwV9eVHNN1iG47E5v
wLYH7B8xmagK8ame5cNIhwIDAQABo4G3MIG0MB0GA1UdDgQWBBRWJ8qIehJu60Jt
8QDfEjx/BZIFqTCBhAYDVR0jBH0we4AUVifKiHoSbutCbfEA3xI8fwWSBamhWKRW
MFQxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZCZXJsaW4xDzANBgNVBAcTBkJlcmxp
bjEjMCEGA1UEChMabWJhYXN5IG1vYmlsZSBzb2x1dGlvbnMgVUeCCQDdKGzoMfiG
wTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABBYeC04N2OMT5pPEeC2
Ckl6J9RkVghCz/LurxcqWXzZvt4SbBhKTGRxoIGKIbtkz8Kk3MoCH2/HwSNd56+W
LRZiVl2m9xTwOjNmZI2hqe8Ps3oY5IJyPp/9A6OQqVCB59zW2Br547Su+5hhxRcX
iZxrB9LI1CXppp9/9b8D0vYf
-----END CERTIFICATE-----
EOF

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attrs = {}) {|_self| ... } ⇒ Receipt

Returns a new instance of Receipt.

Yields:

  • (_self)

Yield Parameters:



51
52
53
54
# File 'lib/itunes_receipt_encoder/receipt.rb', line 51

def initialize(attrs = {})
  @payload = Payload.new(attrs)
  yield self if block_given?
end

Instance Attribute Details

#payloadObject (readonly)

Returns the value of attribute payload.



49
50
51
# File 'lib/itunes_receipt_encoder/receipt.rb', line 49

def payload
  @payload
end

Instance Method Details

#to_transaction(options = {}) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/itunes_receipt_encoder/receipt.rb', line 67

def to_transaction(options = {})
  data = {
    'purchase-info' => purchase_info_plist(options),
    'signature' => options.fetch(:signature, 'unsigned'),
    'pod' => options.fetch(:pod, 100),
    'signing-status' => options.fetch(:signing_status, 0)
  }
  data.merge!('environment' => payload.environment) unless
    payload.environment == 'Production'
  plist = CFPropertyList::List.new
  plist.value = CFPropertyList.guess data
  receipt = plist.to_str(CFPropertyList::List::FORMAT_PLAIN)
  options[:raw] ? receipt : [receipt].pack('m0')
end

#to_unified(options = {}) ⇒ Object



56
57
58
59
60
61
62
63
64
65
# File 'lib/itunes_receipt_encoder/receipt.rb', line 56

def to_unified(options = {})
  receipt = OpenSSL::PKCS7.sign(
    OpenSSL::X509::Certificate.new(options.fetch(:cert, CERTIFICATE)),
    OpenSSL::PKey::RSA.new(options.fetch(:key, PRIVATE_KEY)),
    payload.to_asn1_set.to_der,
    [],
    OpenSSL::PKCS7::BINARY
  ).to_der
  options[:raw] ? receipt : [receipt].pack('m0')
end