heroku-api 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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-----