heroku-api 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,12 @@
1
+ 0.3.3 09/15/2012
2
+ ================
3
+
4
+ update to more realistic self signed cert in tests
5
+ update body format for delete_ssl_endpoint
6
+ vendor latest okjson
7
+ patch okjson to work around encoding bug
8
+ bump excon and use blocking requests
9
+
1
10
  0.3.2 08/01/2012
2
11
  ================
3
12
 
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
17
  s.require_paths = ["lib"]
18
18
 
19
- s.add_runtime_dependency 'excon', '~>0.15.5'
19
+ s.add_runtime_dependency 'excon', '~>0.16.0'
20
20
 
21
21
  s.add_development_dependency 'minitest'
22
22
  s.add_development_dependency 'rake'
@@ -41,6 +41,7 @@ module Heroku
41
41
  options = {
42
42
  :headers => {},
43
43
  :host => 'api.heroku.com',
44
+ :nonblock => false,
44
45
  :scheme => 'https'
45
46
  }.merge(options)
46
47
  options[:headers] = {
@@ -221,9 +221,9 @@ module Heroku
221
221
  end
222
222
 
223
223
 
224
- def nulltok(s); s[0,4] == 'null' && [:val, 'null', nil] end
225
- def truetok(s); s[0,4] == 'true' && [:val, 'true', true] end
226
- def falsetok(s); s[0,5] == 'false' && [:val, 'false', false] end
224
+ def nulltok(s); s[0,4] == 'null' ? [:val, 'null', nil] : [] end
225
+ def truetok(s); s[0,4] == 'true' ? [:val, 'true', true] : [] end
226
+ def falsetok(s); s[0,5] == 'false' ? [:val, 'false', false] : [] end
227
227
 
228
228
 
229
229
  def numtok(s)
@@ -236,6 +236,8 @@ module Heroku
236
236
  else
237
237
  [:val, m[0], Integer(m[0])]
238
238
  end
239
+ else
240
+ []
239
241
  end
240
242
  end
241
243
 
@@ -263,13 +265,13 @@ module Heroku
263
265
  # Unquote will raise an error if q contains control characters.
264
266
  def unquote(q)
265
267
  q = q[1...-1]
266
- a = q.dup # allocate a big enough string
267
268
  rubydoesenc = false
268
269
  # In ruby >= 1.9, a[w] is a codepoint, not a byte.
269
- if a.class.method_defined?(:force_encoding)
270
- a.force_encoding('UTF-8')
270
+ if q.class.method_defined?(:force_encoding)
271
+ q.force_encoding('UTF-8')
271
272
  rubydoesenc = true
272
273
  end
274
+ a = q.dup # allocate a big enough string
273
275
  r, w = 0, 0
274
276
  while r < q.length
275
277
  c = q[r]
@@ -376,15 +378,6 @@ module Heroku
376
378
  end
377
379
 
378
380
 
379
- def unsubst(u)
380
- if u < Usurrself || u > Umax || surrogate?(u)
381
- return Ucharerr, Ucharerr
382
- end
383
- u -= Usurrself
384
- [Usurr1 + ((u>>10)&0x3ff), Usurr2 + (u&0x3ff)]
385
- end
386
-
387
-
388
381
  def surrogate?(u)
389
382
  Usurr1 <= u && u < Usurr3
390
383
  end
@@ -474,15 +467,18 @@ module Heroku
474
467
  else
475
468
  c = s[r]
476
469
  case true
470
+ when rubydoesenc
471
+ begin
472
+ c.ord # will raise an error if c is invalid UTF-8
473
+ t.write(c)
474
+ rescue
475
+ t.write(Ustrerr)
476
+ end
477
477
  when Spc <= c && c <= ?~
478
478
  t.putc(c)
479
- when rubydoesenc
480
- u = c.ord
481
- surrenc(t, u)
482
479
  else
483
- u, size = uchardec(s, r)
484
- r += size - 1 # we add one more at the bottom of the loop
485
- surrenc(t, u)
480
+ n = ucharcopy(t, s, r) # ensure valid UTF-8 output
481
+ r += n - 1 # r is incremented below
486
482
  end
487
483
  end
488
484
  r += 1
@@ -492,28 +488,6 @@ module Heroku
492
488
  end
493
489
 
494
490
 
495
- def surrenc(t, u)
496
- if u < 0x10000
497
- t.print('\\u')
498
- hexenc4(t, u)
499
- else
500
- u1, u2 = unsubst(u)
501
- t.print('\\u')
502
- hexenc4(t, u1)
503
- t.print('\\u')
504
- hexenc4(t, u2)
505
- end
506
- end
507
-
508
-
509
- def hexenc4(t, u)
510
- t.putc(Hex[(u>>12)&0xf])
511
- t.putc(Hex[(u>>8)&0xf])
512
- t.putc(Hex[(u>>4)&0xf])
513
- t.putc(Hex[u&0xf])
514
- end
515
-
516
-
517
491
  def numenc(x)
518
492
  if ((x.nan? || x.infinite?) rescue false)
519
493
  raise Error, "Numeric cannot be represented: #{x}"
@@ -522,60 +496,77 @@ module Heroku
522
496
  end
523
497
 
524
498
 
525
- # Decodes unicode character u from UTF-8
526
- # bytes in string s at position i.
527
- # Returns u and the number of bytes read.
528
- def uchardec(s, i)
499
+ # Copies the valid UTF-8 bytes of a single character
500
+ # from string s at position i to I/O object t, and
501
+ # returns the number of bytes copied.
502
+ # If no valid UTF-8 char exists at position i,
503
+ # ucharcopy writes Ustrerr and returns 1.
504
+ def ucharcopy(t, s, i)
529
505
  n = s.length - i
530
- return [Ucharerr, 1] if n < 1
506
+ raise Utf8Error if n < 1
531
507
 
532
508
  c0 = s[i].ord
533
509
 
534
510
  # 1-byte, 7-bit sequence?
535
511
  if c0 < Utagx
536
- return [c0, 1]
512
+ t.putc(c0)
513
+ return 1
537
514
  end
538
515
 
539
- # unexpected continuation byte?
540
- return [Ucharerr, 1] if c0 < Utag2
516
+ raise Utf8Error if c0 < Utag2 # unexpected continuation byte?
541
517
 
542
- # need continuation byte
543
- return [Ucharerr, 1] if n < 2
518
+ raise Utf8Error if n < 2 # need continuation byte
544
519
  c1 = s[i+1].ord
545
- return [Ucharerr, 1] if c1 < Utagx || Utag2 <= c1
520
+ raise Utf8Error if c1 < Utagx || Utag2 <= c1
546
521
 
547
522
  # 2-byte, 11-bit sequence?
548
523
  if c0 < Utag3
549
- u = (c0&Umask2)<<6 | (c1&Umaskx)
550
- return [Ucharerr, 1] if u <= Uchar1max
551
- return [u, 2]
524
+ raise Utf8Error if ((c0&Umask2)<<6 | (c1&Umaskx)) <= Uchar1max
525
+ t.putc(c0)
526
+ t.putc(c1)
527
+ return 2
552
528
  end
553
529
 
554
530
  # need second continuation byte
555
- return [Ucharerr, 1] if n < 3
531
+ raise Utf8Error if n < 3
532
+
556
533
  c2 = s[i+2].ord
557
- return [Ucharerr, 1] if c2 < Utagx || Utag2 <= c2
534
+ raise Utf8Error if c2 < Utagx || Utag2 <= c2
558
535
 
559
536
  # 3-byte, 16-bit sequence?
560
537
  if c0 < Utag4
561
538
  u = (c0&Umask3)<<12 | (c1&Umaskx)<<6 | (c2&Umaskx)
562
- return [Ucharerr, 1] if u <= Uchar2max
563
- return [u, 3]
539
+ raise Utf8Error if u <= Uchar2max
540
+ t.putc(c0)
541
+ t.putc(c1)
542
+ t.putc(c2)
543
+ return 3
564
544
  end
565
545
 
566
546
  # need third continuation byte
567
- return [Ucharerr, 1] if n < 4
547
+ raise Utf8Error if n < 4
568
548
  c3 = s[i+3].ord
569
- return [Ucharerr, 1] if c3 < Utagx || Utag2 <= c3
549
+ raise Utf8Error if c3 < Utagx || Utag2 <= c3
570
550
 
571
551
  # 4-byte, 21-bit sequence?
572
552
  if c0 < Utag5
573
553
  u = (c0&Umask4)<<18 | (c1&Umaskx)<<12 | (c2&Umaskx)<<6 | (c3&Umaskx)
574
- return [Ucharerr, 1] if u <= Uchar3max
575
- return [u, 4]
576
- end
554
+ raise Utf8Error if u <= Uchar3max
555
+ t.putc(c0)
556
+ t.putc(c1)
557
+ t.putc(c2)
558
+ t.putc(c3)
559
+ return 4
560
+ end
561
+
562
+ raise Utf8Error
563
+ rescue Utf8Error
564
+ t.write(Ustrerr)
565
+ return 1
566
+ end
567
+
577
568
 
578
- return [Ucharerr, 1]
569
+ class Utf8Error < ::StandardError
579
570
  end
580
571
 
581
572
 
@@ -596,15 +587,14 @@ module Heroku
596
587
  Uchar2max = (1<<11) - 1
597
588
  Uchar3max = (1<<16) - 1
598
589
  Ucharerr = 0xFFFD # unicode "replacement char"
590
+ Ustrerr = "\xef\xbf\xbd" # unicode "replacement char"
599
591
  Usurrself = 0x10000
600
592
  Usurr1 = 0xd800
601
593
  Usurr2 = 0xdc00
602
594
  Usurr3 = 0xe000
603
- Umax = 0x10ffff
604
595
 
605
596
  Spc = ' '[0]
606
597
  Unesc = {?b=>?\b, ?f=>?\f, ?n=>?\n, ?r=>?\r, ?t=>?\t}
607
- Hex = '0123456789abcdef'
608
598
  end
609
599
  end
610
600
  end
@@ -1,5 +1,5 @@
1
1
  module Heroku
2
2
  class API
3
- VERSION = "0.3.2"
3
+ VERSION = "0.3.3"
4
4
  end
5
5
  end
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC/jCCAeYCCQDqx6gBfaFHsjANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJV
3
+ UzELMAkGA1UECBMCQ0ExDzANBgNVBAoTBkhlcm9rdTEUMBIGA1UEAxMLZXhhbXBs
4
+ ZS5jb20wHhcNMTIwODAxMjIzMjA5WhcNMTMwODAxMjIzMjA5WjBBMQswCQYDVQQG
5
+ EwJVUzELMAkGA1UECBMCQ0ExDzANBgNVBAoTBkhlcm9rdTEUMBIGA1UEAxMLZXhh
6
+ bXBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/0Nhc36j5
7
+ CHgbEFYyExDR6PKLrhfJPGtYZTDlpy+d/vT+sFp1m81k/68/ylQwq7lJROvfrQ0M
8
+ vAZNO2axWOJnjSrEqQo96VLrFYp5dmkG7bWBjAa+aHzn3fvoKQ2NDrFLFRcuaw0Q
9
+ ra593EFry1VfbI4UeQPdy1V4fFm2A0l9S33Y9Fd/Qv/kUShKgjJXJISdg6PFruz9
10
+ XLqO3kjS1wDVCBrm+t3D6qxC99N3fW//9tCgjZHaiRRgs5B5DyJI3CIi1vmUR5IZ
11
+ 7vGFFtw84LcOh6PHWr/ZwRCDJa4dFtjI5fix6GLJZ7FhmezDyeqzqbVVEOIO9wbN
12
+ 0QXV1d8BBCw1AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAHsCtjR4qNfwtcBu95oR
13
+ jBnUReaxkYLA3Tbcy5bqusLnPvlgUhNn4XUWuPy0QVPP9TK/VGguqZrpJlfdWUJW
14
+ qrh5VX7ixieGWzHGw1bDzHA5ZNchyQyLyFHdXGw1dA85yVXZoAFkUxwY0qCRGWnt
15
+ /Kqct507tqsilFpliS9lzAY/E1GYSHRWuXB6I6tMZD0/jd9zPcg8Y/2aYuvuZ2SC
16
+ A3P04IhG9X9O8MGEPlxdlxmSHi6Vuj8iV+5N3zcodntOcLHlRm6grOC4y6xXaIfE
17
+ KDNGnoOsTJA+yPVtx8R2oZUHA52y09EjujzwMvXgKiq9R33zw6eQwrsD6Pp023Hj
18
+ 6CQ=
19
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEAv9DYXN+o+Qh4GxBWMhMQ0ejyi64XyTxrWGUw5acvnf70/rBa
3
+ dZvNZP+vP8pUMKu5SUTr360NDLwGTTtmsVjiZ40qxKkKPelS6xWKeXZpBu21gYwG
4
+ vmh859376CkNjQ6xSxUXLmsNEK2ufdxBa8tVX2yOFHkD3ctVeHxZtgNJfUt92PRX
5
+ f0L/5FEoSoIyVySEnYOjxa7s/Vy6jt5I0tcA1Qga5vrdw+qsQvfTd31v//bQoI2R
6
+ 2okUYLOQeQ8iSNwiItb5lEeSGe7xhRbcPOC3Doejx1q/2cEQgyWuHRbYyOX4sehi
7
+ yWexYZnsw8nqs6m1VRDiDvcGzdEF1dXfAQQsNQIDAQABAoIBAQCt/ExUqZbGFHWE
8
+ 7uOQVhTaobZnFkmDAefIbTjWBji90gX9go76wJCkfPtEHE0TPKA7ImXlJD2DAIWi
9
+ xi+Wy63JCZXyffXJRHsuuwI4vDv1yeXqFM4FJhet5X9aDOq6uMn99apqMzXNnAx7
10
+ Iy7ADNZqULfrP/1Oz+G+AOUKoJ6nIyD6v1dGCfJhZhQyymhyOsEYjXl2RzSLHL1G
11
+ d6+404nnV7hP8zhQjREleYk/F1ZewJhtS7Tsv9YeeuckLQDBTfutuyS07QzRvnyf
12
+ XqXo9mhkl0OK27Jml82XFwquFBe/FoH8lKoXax3PT5xXQ6/UJQ4pOJi3D5ZnOLUk
13
+ Lsc9Fr89AoGBAOmbzXuF62MksVsk6bcV1UhmY+sGSNQwRa7GShczMgQE/GHDTayW
14
+ km2T1NLQt5oL0lnXMtuX6Wi0y2oNu+x3q5/O7DR+EQqsX4nbX34jynNsEmRv27pC
15
+ vACq7wRaaDoLWm14DX8Qp8KZmPTXsoRoswv6/hdvPMg3nNB+HxP10LknAoGBANIz
16
+ jAKi2XkaJRkSMBuqTjND3UkDIOwcd1v5V3Dy0bLlegBTxyIhlhicwO6JHZ8u5obx
17
+ 68eikKMc9gXf6hJTcNXbogf6t4+/v5oKgPVA6puPefZkt1Lswc1aR7NdC5tYmplc
18
+ C71WZISEONEQsTbp1c5QOJ69/gf325IE3sXb+vFDAoGAIy97WKKIHKu3JuI9bX0V
19
+ Xc1GOWz95S/MHxHwsOPeIaralKME/PzE20pL4ODc9o/XQ/7cwyRzXHj2tmeRKYGw
20
+ 0OYqv5FJYdEqpqnrDSW45X+emZAbiUdp57PXQlGXpz50hU5ywfOxQOc/mYkvczAN
21
+ 370TLlZr0kBGF0UXyzrYEDsCgYAlHm8qBAHtTb2hWMHgEMnwaZqJCyFkMH6vYi+b
22
+ xXVcZwONTT4L++xaekvjk5kEhC63Q79EKKPr+fBEB095Xvy89yT8zbxeiRjXpeUx
23
+ 6f3D7Kk35n8tCJwMnFWvCc5D53idflCgZcIoWIUD/jOdI9vaq/Xjql9SnuVKOsvw
24
+ GrGMqwKBgQCytS+qZdQ8/OoDSO+iLQr7prVxAfzVwuPggTIoRKcdU83o/2O89ipY
25
+ zkcS+NcCD78phRydu9G6dFhDThkQYGcouF1tYpNqbjqqMoudcP35yE2+h3pzmiuV
26
+ hZIQ2YjfaWARcNX+881gDb7m6835lCFyAZ75z9xsSWpYb+4EVH0gjg==
27
+ -----END RSA PRIVATE KEY-----
@@ -8,12 +8,12 @@ require 'time'
8
8
  DATA_PATH = File.expand_path("#{File.dirname(__FILE__)}/data")
9
9
  MOCK = ENV['MOCK'] != 'false'
10
10
 
11
- def data_server_crt
12
- @data_server_crt ||= File.read(File.join(DATA_PATH, 'server.crt'))
11
+ def data_site_crt
12
+ @data_site_crt ||= File.read(File.join(DATA_PATH, 'site.crt'))
13
13
  end
14
14
 
15
- def data_server_key
16
- @data_server_key ||= File.read(File.join(DATA_PATH, 'server.key'))
15
+ def data_site_key
16
+ @data_site_key ||= File.read(File.join(DATA_PATH, 'site.key'))
17
17
  end
18
18
 
19
19
  def heroku
@@ -6,11 +6,18 @@ class TestSslEndpoints < MiniTest::Unit::TestCase
6
6
  skip if MOCK
7
7
  with_app do |app_data|
8
8
  heroku.post_addon(app_data['name'], 'ssl:endpoint')
9
- ssl_endpoint_data = heroku.post_ssl_endpoint(app_data['name'], data_server_crt, data_server_key).body
9
+ ssl_endpoint_data = heroku.post_ssl_endpoint(app_data['name'], data_site_crt, data_site_key).body
10
10
 
11
11
  response = heroku.delete_ssl_endpoint(app_data['name'], ssl_endpoint_data['cname'])
12
12
 
13
- assert_equal(' ', response.body)
13
+ data = response.body['ssl_cert']
14
+ assert_equal(false, data['ca_signed?'])
15
+ assert_equal(true, data['self_signed?'])
16
+ assert_equal(['example.com'], data['cert_domains'])
17
+ assert_equal('2013/08/01 15:32:09 -0700', data['expires_at'])
18
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['issuer'])
19
+ assert_equal('2012/08/01 15:32:09 -0700', data['starts_at'])
20
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['subject'])
14
21
  assert_equal(200, response.status)
15
22
  end
16
23
  end
@@ -26,18 +33,18 @@ class TestSslEndpoints < MiniTest::Unit::TestCase
26
33
  skip if MOCK
27
34
  with_app do |app_data|
28
35
  heroku.post_addon(app_data['name'], 'ssl:endpoint')
29
- ssl_endpoint_data = heroku.post_ssl_endpoint(app_data['name'], data_server_crt, data_server_key).body
36
+ ssl_endpoint_data = heroku.post_ssl_endpoint(app_data['name'], data_site_crt, data_site_key).body
30
37
 
31
38
  response = heroku.get_ssl_endpoint(app_data['name'], ssl_endpoint_data['cname'])
32
39
 
33
40
  data = response.body['ssl_cert']
34
41
  assert_equal(false, data['ca_signed?'])
35
42
  assert_equal(true, data['self_signed?'])
36
- assert_equal(['geemus (wesley beary)'], data['cert_domains'])
37
- assert_equal('2013/07/30 15:19:30 -0700', data['expires_at'])
38
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['issuer'])
39
- assert_equal('2012/07/30 15:19:30 -0700', data['starts_at'])
40
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['subject'])
43
+ assert_equal(['example.com'], data['cert_domains'])
44
+ assert_equal('2013/08/01 15:32:09 -0700', data['expires_at'])
45
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['issuer'])
46
+ assert_equal('2012/08/01 15:32:09 -0700', data['starts_at'])
47
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['subject'])
41
48
  assert_equal(200, response.status)
42
49
  end
43
50
  end
@@ -46,18 +53,18 @@ class TestSslEndpoints < MiniTest::Unit::TestCase
46
53
  skip if MOCK
47
54
  with_app do |app_data|
48
55
  heroku.post_addon(app_data['name'], 'ssl:endpoint')
49
- heroku.post_ssl_endpoint(app_data['name'], data_server_crt, data_server_key)
56
+ heroku.post_ssl_endpoint(app_data['name'], data_site_crt, data_site_key)
50
57
 
51
58
  response = heroku.get_ssl_endpoints(app_data['name'])
52
59
 
53
60
  data = response.body.first['ssl_cert']
54
61
  assert_equal(false, data['ca_signed?'])
55
62
  assert_equal(true, data['self_signed?'])
56
- assert_equal(['geemus (wesley beary)'], data['cert_domains'])
57
- assert_equal('2013/07/30 15:19:30 -0700', data['expires_at'])
58
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['issuer'])
59
- assert_equal('2012/07/30 15:19:30 -0700', data['starts_at'])
60
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['subject'])
63
+ assert_equal(['example.com'], data['cert_domains'])
64
+ assert_equal('2013/08/01 15:32:09 -0700', data['expires_at'])
65
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['issuer'])
66
+ assert_equal('2012/08/01 15:32:09 -0700', data['starts_at'])
67
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['subject'])
61
68
  assert_equal(200, response.status)
62
69
  end
63
70
  end
@@ -67,16 +74,16 @@ class TestSslEndpoints < MiniTest::Unit::TestCase
67
74
  with_app do |app_data|
68
75
  heroku.post_addon(app_data['name'], 'ssl:endpoint')
69
76
 
70
- response = heroku.post_ssl_endpoint(app_data['name'], data_server_crt, data_server_key)
77
+ response = heroku.post_ssl_endpoint(app_data['name'], data_site_crt, data_site_key)
71
78
 
72
79
  data = response.body['ssl_cert']
73
80
  assert_equal(false, data['ca_signed?'])
74
81
  assert_equal(true, data['self_signed?'])
75
- assert_equal(['geemus (wesley beary)'], data['cert_domains'])
76
- assert_equal('2013/07/30 15:19:30 -0700', data['expires_at'])
77
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['issuer'])
78
- assert_equal('2012/07/30 15:19:30 -0700', data['starts_at'])
79
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['subject'])
82
+ assert_equal(['example.com'], data['cert_domains'])
83
+ assert_equal('2013/08/01 15:32:09 -0700', data['expires_at'])
84
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['issuer'])
85
+ assert_equal('2012/08/01 15:32:09 -0700', data['starts_at'])
86
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['subject'])
80
87
  assert_equal(200, response.status)
81
88
  end
82
89
  end
@@ -85,19 +92,19 @@ class TestSslEndpoints < MiniTest::Unit::TestCase
85
92
  skip if MOCK
86
93
  with_app do |app_data|
87
94
  heroku.post_addon(app_data['name'], 'ssl:endpoint')
88
- ssl_endpoint_data = heroku.post_ssl_endpoint(app_data['name'], data_server_crt, data_server_key).body
89
- heroku.put_ssl_endpoint(app_data['name'], ssl_endpoint_data['cname'], data_server_crt, data_server_key)
95
+ ssl_endpoint_data = heroku.post_ssl_endpoint(app_data['name'], data_site_crt, data_site_key).body
96
+ heroku.put_ssl_endpoint(app_data['name'], ssl_endpoint_data['cname'], data_site_crt, data_site_key)
90
97
 
91
98
  response = heroku.post_ssl_endpoint_rollback(app_data['name'], ssl_endpoint_data['cname'])
92
99
 
93
100
  data = response.body['ssl_cert']
94
101
  assert_equal(false, data['ca_signed?'])
95
102
  assert_equal(true, data['self_signed?'])
96
- assert_equal(['geemus (wesley beary)'], data['cert_domains'])
97
- assert_equal('2013/07/30 15:19:30 -0700', data['expires_at'])
98
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['issuer'])
99
- assert_equal('2012/07/30 15:19:30 -0700', data['starts_at'])
100
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['subject'])
103
+ assert_equal(['example.com'], data['cert_domains'])
104
+ assert_equal('2013/08/01 15:32:09 -0700', data['expires_at'])
105
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['issuer'])
106
+ assert_equal('2012/08/01 15:32:09 -0700', data['starts_at'])
107
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['subject'])
101
108
  assert_equal(200, response.status)
102
109
  end
103
110
  end
@@ -106,18 +113,18 @@ class TestSslEndpoints < MiniTest::Unit::TestCase
106
113
  skip if MOCK
107
114
  with_app do |app_data|
108
115
  heroku.post_addon(app_data['name'], 'ssl:endpoint')
109
- ssl_endpoint_data = heroku.post_ssl_endpoint(app_data['name'], data_server_crt, data_server_key).body
116
+ ssl_endpoint_data = heroku.post_ssl_endpoint(app_data['name'], data_site_crt, data_site_key).body
110
117
 
111
- response = heroku.put_ssl_endpoint(app_data['name'], ssl_endpoint_data['cname'], data_server_crt, data_server_key)
118
+ response = heroku.put_ssl_endpoint(app_data['name'], ssl_endpoint_data['cname'], data_site_crt, data_site_key)
112
119
 
113
120
  data = response.body['ssl_cert']
114
121
  assert_equal(false, data['ca_signed?'])
115
122
  assert_equal(true, data['self_signed?'])
116
- assert_equal(['geemus (wesley beary)'], data['cert_domains'])
117
- assert_equal('2013/07/30 15:19:30 -0700', data['expires_at'])
118
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['issuer'])
119
- assert_equal('2012/07/30 15:19:30 -0700', data['starts_at'])
120
- assert_equal('/C=US/O=Heroku/CN=geemus (Wesley Beary)/emailAddress=wesley@heroku.com', data['subject'])
123
+ assert_equal(['example.com'], data['cert_domains'])
124
+ assert_equal('2013/08/01 15:32:09 -0700', data['expires_at'])
125
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['issuer'])
126
+ assert_equal('2012/08/01 15:32:09 -0700', data['starts_at'])
127
+ assert_equal('/C=US/ST=CA/O=Heroku/CN=example.com', data['subject'])
121
128
  assert_equal(200, response.status)
122
129
  end
123
130
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroku-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-01 00:00:00.000000000 Z
12
+ date: 2012-08-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: excon
16
- requirement: &70119193362320 !ruby/object:Gem::Requirement
16
+ requirement: &70255687099020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.15.5
21
+ version: 0.16.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70119193362320
24
+ version_requirements: *70255687099020
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: minitest
27
- requirement: &70119193360480 !ruby/object:Gem::Requirement
27
+ requirement: &70255687097700 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70119193360480
35
+ version_requirements: *70255687097700
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70119193355000 !ruby/object:Gem::Requirement
38
+ requirement: &70255687096380 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70119193355000
46
+ version_requirements: *70255687096380
47
47
  description: Ruby Client for the Heroku API
48
48
  email:
49
49
  - wesley@heroku.com
@@ -94,8 +94,8 @@ files:
94
94
  - lib/heroku/api/user.rb
95
95
  - lib/heroku/api/vendor/okjson.rb
96
96
  - lib/heroku/api/version.rb
97
- - test/data/server.crt
98
- - test/data/server.key
97
+ - test/data/site.crt
98
+ - test/data/site.key
99
99
  - test/test_addons.rb
100
100
  - test/test_apps.rb
101
101
  - test/test_collaborators.rb
@@ -125,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  segments:
127
127
  - 0
128
- hash: -2298175570851415714
128
+ hash: 4015370602863934234
129
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements:
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  version: '0'
135
135
  segments:
136
136
  - 0
137
- hash: -2298175570851415714
137
+ hash: 4015370602863934234
138
138
  requirements: []
139
139
  rubyforge_project:
140
140
  rubygems_version: 1.8.15
@@ -142,8 +142,8 @@ signing_key:
142
142
  specification_version: 3
143
143
  summary: Ruby Client for the Heroku API
144
144
  test_files:
145
- - test/data/server.crt
146
- - test/data/server.key
145
+ - test/data/site.crt
146
+ - test/data/site.key
147
147
  - test/test_addons.rb
148
148
  - test/test_apps.rb
149
149
  - test/test_collaborators.rb
@@ -1,20 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDPDCCAiQCCQCh/jTWfdrzuDANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJV
3
- UzEPMA0GA1UEChMGSGVyb2t1MR4wHAYDVQQDExVnZWVtdXMgKFdlc2xleSBCZWFy
4
- eSkxIDAeBgkqhkiG9w0BCQEWEXdlc2xleUBoZXJva3UuY29tMB4XDTEyMDczMDIy
5
- MTkzMFoXDTEzMDczMDIyMTkzMFowYDELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkhl
6
- cm9rdTEeMBwGA1UEAxMVZ2VlbXVzIChXZXNsZXkgQmVhcnkpMSAwHgYJKoZIhvcN
7
- AQkBFhF3ZXNsZXlAaGVyb2t1LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
8
- AQoCggEBAOLKtOae7E8zilNDZfdrg943Q6UOpV9+0i/LHR38vMcgbWJ1KO/ei/d7
9
- i0Ei6krOJjrLcxZH4ixxSRTHeKv8iYqH+IUXnDAxoLSi64/0xrCo+EQibDWx7dFy
10
- zgDqE2CCsf9LJmU3O2gshiTnuyZPyxAHumDp9uyf56T1L3tCyjTyjagigkxOcR9/
11
- Hff7aV1Emtu4pQvza2mFIxL8PA2FYm850dHQod3TtSrL+HtUZOxS4wBZD6Pw+3vA
12
- i0jemuFXBszgwDQl0zF1zQ8u1dQmo5PETr8Swnx7LN7G/BauUZ3iXt91M83kE0Pw
13
- tFNIAAVvajUFDi42jWdOBwXQE7XlEdUCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
14
- 3K5EOBNclZzlrrGU+vrawhoERPGShMDqA8Xqk7wXnYFhtj/3432+SRxSfrNEatqD
15
- +lTdSdzERvJBWXHX5xJyu2GmenMNbA4WleqUKPhCXjyCz7dPUUp5hYNcCeAFENYl
16
- 6MJX0NNrfgRLC8guWseerCAosPAr7Tw4SjMLYVl2yakV5O4e3E5rwazFOr15aMN/
17
- oUp0RjkkgqqVCNua2zwXk23OSnqO+quKSbpmjRI5e00qFyp70n0T3+ODl+1GFczJ
18
- iTPDEBkW7A4q/lNMlKful7kEeEOhRXfXoGwoSVracDD/bBngXKu0Epgv8LzQVQkK
19
- IZf1KG3pPS7kiGgk31G4Wg==
20
- -----END CERTIFICATE-----
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEpAIBAAKCAQEA4sq05p7sTzOKU0Nl92uD3jdDpQ6lX37SL8sdHfy8xyBtYnUo
3
- 796L93uLQSLqSs4mOstzFkfiLHFJFMd4q/yJiof4hRecMDGgtKLrj/TGsKj4RCJs
4
- NbHt0XLOAOoTYIKx/0smZTc7aCyGJOe7Jk/LEAe6YOn27J/npPUve0LKNPKNqCKC
5
- TE5xH38d9/tpXUSa27ilC/NraYUjEvw8DYVibznR0dCh3dO1Ksv4e1Rk7FLjAFkP
6
- o/D7e8CLSN6a4VcGzODANCXTMXXNDy7V1Cajk8ROvxLCfHss3sb8Fq5RneJe33Uz
7
- zeQTQ/C0U0gABW9qNQUOLjaNZ04HBdATteUR1QIDAQABAoIBAQCJDqPgs65v9t/j
8
- jdmzeuBIjPFucLl0SrpPc9p24uRbGrfARrmkrMO9noX7qVQaPRdRdN5qWqrO3O+j
9
- hSDiH04n0CBanngfj/5k7AicCPuCi7rtwjfPA2aLq2vflZZ8Pr+/XvUnOgfG3xF6
10
- gCjT8GjxmRoDs6EsQz7ErAAz55s3/zJjYp25bauULPML9/KVNaGM87ynAK+2NEki
11
- QEBydo/BzxtuMYu/sUPd1eAj1UyIVW+h6K01H0xmU5Vx2xD/+prHcYidTzFPyDWz
12
- 3A96Yj9xl8QuiF9h8st919ot80I0V8LOjJ0yuCpNq3Qu9zV6OHW+SPRkYrUQf6o3
13
- 6Mty5zQJAoGBAPS1R6MY7B1yO+OkLTY1ibAzmdK/G6pvFNC/dbl5VFfTgxi4sjth
14
- Sg44jd1Ttd/LnqQ4SQBRXm/UI3CxoYsF6BQFG8WDdQ+Kn1wB9SzBQl+bz/KYUBbQ
15
- r/mwWW9F91aavz8NAALIjRk3wz+PtN4aV2M7BOlEmVxHVQ8K3piqEZI3AoGBAO1B
16
- yGQ8Uh9VxFnghqgJY2gWPXLq4ju3sef+16nSVvS0+ypOq55w3uXX8zfa9riKyTau
17
- J4QIJYGtYR9dVWyn3mp2F7AesL9Qk5+g3q6hMpFGamaiL+GaEbjfKWjxdp1EC6qs
18
- LwYHYuo9DrCkApbPnFoHpbaOYPQ+BhxzdVFYNaZTAoGBAKQVCbvq8ieseUviwg4f
19
- R/vGHdaaHkrhwOtX9fAv0sYxJS5madw3GBkBAt7tSn6NYgprU0fLR69kZ38hHFjD
20
- 1SHXaw+9XbjWEpT3GxavX3oMWBsq1kj2FYkvHkjmeTqw+Jumc+Np5nKKWXk9OuHS
21
- d9YptNlVDiA6FGbJuwhSwQVxAoGAcB0qzbr3b5k+3N3No/AzykbgKMK3v1Jxvlhd
22
- nwEnWCGBop9kV82sdt5SL23IMrJanP007R5QYvQENicLq/mzj4lYbkBCc1VnPQJu
23
- 2ASSebXVp8QybiA5CaxizBV2YKB8Bt2wpt+srVXG8E/AbXWTw7Njal3jkOcSSjWB
24
- FbxiNcMCgYApDMoIJRshdDUbnAmHBiejBxAbyrnhjs5LIklDb3R5OBm2OdgtpDPX
25
- OEQVS9jHW2rBsLKHTi5bqFfVV1UsIH0nw3aTj4qhEzlVwoGIrrkKN5HG0TK991Y+
26
- nMZF5DpWRpXGilpBqD3ZYExmDvPW8DkvxCSH7O2tuaAMg9djm/wyzw==
27
- -----END RSA PRIVATE KEY-----