doorkeeper 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of doorkeeper might be problematic. Click here for more details.

Files changed (35) hide show
  1. data/README.md +42 -14
  2. data/Rakefile +1 -1
  3. data/app/assets/stylesheets/doorkeeper/application.css +4 -0
  4. data/app/controllers/doorkeeper/application_controller.rb +2 -2
  5. data/app/controllers/doorkeeper/application_controller.rbc +32 -20
  6. data/app/controllers/doorkeeper/authorizations_controller.rbc +86 -22
  7. data/app/controllers/doorkeeper/authorized_applications_controller.rb +13 -0
  8. data/app/controllers/doorkeeper/authorized_applications_controller.rbc +393 -0
  9. data/app/controllers/doorkeeper/tokens_controller.rb +4 -0
  10. data/app/models/access_grant.rb +8 -0
  11. data/app/models/access_grant.rbc +204 -39
  12. data/app/models/access_token.rb +31 -3
  13. data/app/models/access_token.rbc +270 -72
  14. data/app/models/application.rb +8 -1
  15. data/app/models/application.rbc +307 -61
  16. data/app/views/doorkeeper/authorizations/new.html.erb +17 -0
  17. data/app/views/doorkeeper/authorized_applications/index.html.erb +26 -0
  18. data/config/routes.rb +1 -0
  19. data/config/routes.rbc +48 -4
  20. data/lib/doorkeeper/config.rb +82 -22
  21. data/lib/doorkeeper/config.rbc +739 -295
  22. data/lib/doorkeeper/config/scope.rb +11 -0
  23. data/lib/doorkeeper/config/scopes.rb +57 -0
  24. data/lib/doorkeeper/config/scopes_builder.rb +18 -0
  25. data/lib/doorkeeper/doorkeeper_for.rb +96 -16
  26. data/lib/doorkeeper/oauth/access_token_request.rb +57 -18
  27. data/lib/doorkeeper/oauth/access_token_request.rbc +256 -67
  28. data/lib/doorkeeper/oauth/authorization_request.rb +31 -4
  29. data/lib/doorkeeper/oauth/authorization_request.rbc +230 -65
  30. data/lib/doorkeeper/version.rb +1 -1
  31. data/lib/doorkeeper/version.rbc +1 -1
  32. data/lib/generators/doorkeeper/templates/README +3 -0
  33. data/lib/generators/doorkeeper/templates/initializer.rb +13 -0
  34. data/lib/generators/doorkeeper/templates/migration.rb +4 -1
  35. metadata +35 -18
@@ -0,0 +1,11 @@
1
+ module Doorkeeper
2
+ class Scope
3
+ attr_reader :name, :default, :description
4
+
5
+ def initialize(name, options = {})
6
+ @name = name
7
+ @default = options[:default] || false
8
+ @description = options[:description]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,57 @@
1
+ module Doorkeeper
2
+ class Scopes
3
+ include Enumerable
4
+ REQUIRED_ELEMENT_METHOD = [:name, :default]
5
+
6
+ class IllegalElement < StandardError; end
7
+
8
+ delegate :each, :to => :@scopes
9
+
10
+ def initialize
11
+ @scopes = []
12
+ end
13
+
14
+ def [](name)
15
+ select do |scope|
16
+ scope.name.to_sym == name.to_sym
17
+ end.first
18
+ end
19
+
20
+ def exists? (scope)
21
+ self[scope].present?
22
+ end
23
+
24
+ def add (scope)
25
+ raise IllegalElement unless valid_element?(scope)
26
+ @scopes << scope
27
+ end
28
+
29
+ def all
30
+ @scopes
31
+ end
32
+
33
+ def defaults
34
+ select do |scope|
35
+ scope.default
36
+ end
37
+ end
38
+
39
+ def default_scope_string
40
+ defaults.map(&:name).join(" ")
41
+ end
42
+
43
+ def with_names(*names)
44
+ names = names.map(&:to_sym)
45
+ select do |scope|
46
+ names.include? scope.name.to_sym
47
+ end
48
+ end
49
+
50
+ private
51
+ def valid_element?(scope)
52
+ REQUIRED_ELEMENT_METHOD.all? do |method|
53
+ scope.respond_to? method
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,18 @@
1
+ module Doorkeeper
2
+ class Config
3
+ class ScopesBuilder
4
+ def initialize(&block)
5
+ @scopes = Doorkeeper::Scopes.new
6
+ instance_eval &block
7
+ end
8
+
9
+ def build
10
+ @scopes
11
+ end
12
+
13
+ def scope(name, options)
14
+ @scopes.add Doorkeeper::Scope.new(name, options)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,28 +1,108 @@
1
1
  module Doorkeeper
2
+ class InvalidSyntax < StandardError; end
3
+ class DoorkeeperFor
4
+ def initialize(options)
5
+ options ||= {}
6
+ raise InvalidSyntax unless options.is_a? Hash
7
+
8
+ options.each do |k, v|
9
+ self.send(k, v)
10
+ end
11
+ end
12
+
13
+
14
+ def validate_token(token)
15
+ return false unless token
16
+ token.accessible? and validate_token_scopes(token)
17
+ end
18
+
19
+ def filter_options
20
+ {}
21
+ end
22
+
23
+ private
24
+ def scopes(scopes)
25
+ @scopes = scopes
26
+ end
27
+
28
+ def validate_token_scopes(token)
29
+ return true if @scopes.blank?
30
+ token.scopes.any? { |scope| @scopes.include? scope}
31
+ end
32
+ end
33
+
34
+ class AllDoorkeeperFor < DoorkeeperFor
35
+ def filter_options
36
+ @except ? {:except => @except} : {}
37
+ end
38
+
39
+ private
40
+ def except(actions)
41
+ @except = actions
42
+ end
43
+ end
44
+
45
+ class SelectedDoorkeeperFor < DoorkeeperFor
46
+ def initialize(*args)
47
+ options = args.pop if args.last.is_a? Hash
48
+ only(args)
49
+ super(options)
50
+ end
51
+
52
+ def filter_options
53
+ {:only => @only}
54
+ end
55
+
56
+ private
57
+ def only(actions)
58
+ @only = actions
59
+ end
60
+ end
61
+
62
+ class DoorkeeperForBuilder
63
+ def self.create_doorkeeper_for(*args)
64
+ case args.first
65
+ when :all
66
+ AllDoorkeeperFor.new(args[1] || {})
67
+ when Hash
68
+ handle_hash(args.first)
69
+ when nil
70
+ raise InvalidSyntax
71
+ else
72
+ SelectedDoorkeeperFor.new(*args)
73
+ end
74
+ end
75
+
76
+ def self.handle_hash(hash)
77
+ if hash.has_key?(:only)
78
+ warn "DEPRECATED: :only option. Put the actions you want doorkeeper to take care of after doorkeeper_for eg: doorkeeper_for :index, :new"
79
+ args = [hash[:only], hash.except(:only)]
80
+ return create_doorkeeper_for(*args)
81
+ end
82
+
83
+ if hash.has_key?(:except)
84
+ warn "DEPRECATED: :except option. Use in connection with :all -> doorkeeper_for :all, :except => "
85
+ return create_doorkeeper_for(:all, hash)
86
+ end
87
+
88
+ raise InvalidSyntax
89
+ end
90
+ end
91
+
2
92
  module Controller
3
93
  module ClassMethods
4
- def doorkeeper_for(options)
5
- raise "You have to specify some option for doorkeeper_for method" unless options.present?
6
- options = nil if options == :all
7
- if options
8
- before_filter :doorkeeper_before_filter, options
9
- else
10
- before_filter :doorkeeper_before_filter
94
+ def doorkeeper_for(*args)
95
+ doorkeeper_for = DoorkeeperForBuilder.create_doorkeeper_for(*args)
96
+
97
+ before_filter doorkeeper_for.filter_options do
98
+ head :unauthorized unless doorkeeper_for.validate_token(doorkeeper_token)
11
99
  end
12
100
  end
13
101
  end
14
102
 
15
103
  def self.included(base)
16
104
  base.extend ClassMethods
17
- base.send(:private, :doorkeeper_before_filter, :doorkeeper_token, :doorkeeper_valid_token, :get_doorkeeper_token)
18
- end
19
-
20
- def doorkeeper_before_filter
21
- head :unauthorized unless doorkeeper_valid_token
22
- end
23
-
24
- def doorkeeper_valid_token
25
- doorkeeper_token and doorkeeper_token.accessible?
105
+ base.send(:private, :doorkeeper_token, :get_doorkeeper_token)
26
106
  end
27
107
 
28
108
  def doorkeeper_token
@@ -8,12 +8,14 @@ module Doorkeeper::OAuth
8
8
  :grant_type,
9
9
  :code,
10
10
  :redirect_uri,
11
+ :refresh_token,
11
12
  ]
12
13
 
13
- validate :attributes, :error => :invalid_request
14
- validate :client, :error => :invalid_client
15
- validate :grant, :error => :invalid_grant
16
- validate :grant_type, :error => :unsupported_grant_type
14
+ validate :attributes, :error => :invalid_request
15
+ validate :grant_type, :error => :unsupported_grant_type
16
+ validate :client, :error => :invalid_client
17
+ validate :grant, :error => :invalid_grant
18
+ validate :redirect_uri, :error => :invalid_grant
17
19
 
18
20
  attr_accessor *ATTRIBUTES
19
21
 
@@ -24,15 +26,19 @@ module Doorkeeper::OAuth
24
26
 
25
27
  def authorize
26
28
  if valid?
27
- revoke_grant
29
+ revoke_base_token
28
30
  create_access_token
29
31
  end
30
32
  end
31
33
 
32
34
  def authorization
33
- { 'access_token' => access_token,
34
- 'token_type' => token_type
35
+ auth = {
36
+ 'access_token' => access_token.token,
37
+ 'token_type' => token_type,
38
+ 'expires_in' => access_token.expires_in,
35
39
  }
40
+ auth.merge!({'refresh_token' => access_token.refresh_token}) if refresh_token_enabled?
41
+ auth
36
42
  end
37
43
 
38
44
  def valid?
@@ -40,7 +46,7 @@ module Doorkeeper::OAuth
40
46
  end
41
47
 
42
48
  def access_token
43
- @access_token.token
49
+ @access_token
44
50
  end
45
51
 
46
52
  def token_type
@@ -53,27 +59,51 @@ module Doorkeeper::OAuth
53
59
 
54
60
  private
55
61
 
56
- def grant
57
- @grant ||= AccessGrant.find_by_token(@code)
58
- end
59
-
60
- def revoke_grant
61
- grant.revoke
62
+ def revoke_base_token
63
+ base_token.revoke
62
64
  end
63
65
 
64
66
  def client
65
67
  @client ||= Application.find_by_uid_and_secret(@client_id, @client_secret)
66
68
  end
67
69
 
70
+ def base_token
71
+ @base_token ||= refresh_token? ? token_via_refresh_token : token_via_authorization_code
72
+ end
73
+
74
+ def token_via_authorization_code
75
+ AccessGrant.find_by_token(code)
76
+ end
77
+
78
+ def token_via_refresh_token
79
+ AccessToken.find_by_refresh_token(refresh_token)
80
+ end
81
+
68
82
  def create_access_token
69
83
  @access_token = AccessToken.create!({
70
84
  :application_id => client.id,
71
- :resource_owner_id => grant.resource_owner_id,
85
+ :resource_owner_id => base_token.resource_owner_id,
86
+ :scopes => base_token.scopes_string,
87
+ :expires_in => configuration.access_token_expires_in,
88
+ :use_refresh_token => refresh_token_enabled?
72
89
  })
73
90
  end
74
91
 
75
92
  def validate_attributes
76
- code.present? && grant_type.present? && redirect_uri.present?
93
+ return false unless grant_type.present?
94
+ if refresh_token_enabled? && refresh_token?
95
+ refresh_token.present?
96
+ else
97
+ code.present? && redirect_uri.present?
98
+ end
99
+ end
100
+
101
+ def refresh_token_enabled?
102
+ configuration.refresh_token_enabled?
103
+ end
104
+
105
+ def refresh_token?
106
+ grant_type == "refresh_token"
77
107
  end
78
108
 
79
109
  def validate_client
@@ -81,11 +111,20 @@ module Doorkeeper::OAuth
81
111
  end
82
112
 
83
113
  def validate_grant
84
- grant && grant.accessible? && grant.application_id == client.id && grant.redirect_uri == redirect_uri
114
+ return false unless base_token && base_token.application_id == client.id
115
+ refresh_token? ? !base_token.revoked? : base_token.accessible?
116
+ end
117
+
118
+ def validate_redirect_uri
119
+ refresh_token? ? true : base_token.redirect_uri == redirect_uri
85
120
  end
86
121
 
87
122
  def validate_grant_type
88
- grant_type == "authorization_code"
123
+ %w(authorization_code refresh_token).include? grant_type
124
+ end
125
+
126
+ def configuration
127
+ Doorkeeper.configuration
89
128
  end
90
129
  end
91
130
  end
@@ -130,7 +130,7 @@ x
130
130
  18
131
131
  AccessTokenRequest
132
132
  i
133
- 339
133
+ 367
134
134
  5
135
135
  66
136
136
  5
@@ -388,9 +388,9 @@ i
388
388
  15
389
389
  99
390
390
  7
391
- 18
392
- 7
393
391
  43
392
+ 7
393
+ 44
394
394
  65
395
395
  67
396
396
  49
@@ -402,7 +402,7 @@ i
402
402
  15
403
403
  99
404
404
  7
405
- 44
405
+ 18
406
406
  7
407
407
  45
408
408
  65
@@ -469,6 +469,34 @@ i
469
469
  49
470
470
  28
471
471
  4
472
+ 15
473
+ 99
474
+ 7
475
+ 54
476
+ 7
477
+ 55
478
+ 65
479
+ 67
480
+ 49
481
+ 27
482
+ 0
483
+ 49
484
+ 28
485
+ 4
486
+ 15
487
+ 99
488
+ 7
489
+ 56
490
+ 7
491
+ 57
492
+ 65
493
+ 67
494
+ 49
495
+ 27
496
+ 0
497
+ 49
498
+ 28
499
+ 4
472
500
  11
473
501
  I
474
502
  7
@@ -480,7 +508,7 @@ I
480
508
  0
481
509
  n
482
510
  p
483
- 54
511
+ 58
484
512
  x
485
513
  10
486
514
  Doorkeeper
@@ -739,19 +767,23 @@ x
739
767
  9
740
768
  authorize
741
769
  i
742
- 14
770
+ 18
743
771
  5
744
772
  47
745
773
  49
746
774
  0
747
775
  0
748
776
  9
749
- 12
777
+ 16
750
778
  5
751
779
  48
752
780
  1
781
+ 15
782
+ 5
783
+ 48
784
+ 2
753
785
  8
754
- 13
786
+ 17
755
787
  1
756
788
  11
757
789
  I
@@ -764,15 +796,18 @@ I
764
796
  0
765
797
  n
766
798
  p
767
- 2
799
+ 3
768
800
  x
769
801
  6
770
802
  valid?
771
803
  x
804
+ 12
805
+ revoke_grant
806
+ x
772
807
  19
773
808
  create_access_token
774
809
  p
775
- 7
810
+ 13
776
811
  I
777
812
  -1
778
813
  I
@@ -782,11 +817,23 @@ I
782
817
  I
783
818
  1a
784
819
  I
785
- d
820
+ 7
821
+ I
822
+ 1b
823
+ I
824
+ b
825
+ I
826
+ 1c
827
+ I
828
+ 10
829
+ I
830
+ 1a
831
+ I
832
+ 11
786
833
  I
787
834
  0
788
835
  I
789
- e
836
+ 12
790
837
  x
791
838
  84
792
839
  /Users/felipeelias/Applicake/doorkeeper/lib/doorkeeper/oauth/access_token_request.rb
@@ -871,19 +918,19 @@ p
871
918
  I
872
919
  -1
873
920
  I
874
- 1d
921
+ 20
875
922
  I
876
923
  0
877
924
  I
878
- 20
925
+ 23
879
926
  I
880
927
  8
881
928
  I
882
- 1e
929
+ 21
883
930
  I
884
931
  13
885
932
  I
886
- 1f
933
+ 22
887
934
  I
888
935
  1e
889
936
  x
@@ -933,11 +980,11 @@ p
933
980
  I
934
981
  -1
935
982
  I
936
- 23
983
+ 26
937
984
  I
938
985
  0
939
986
  I
940
- 24
987
+ 27
941
988
  I
942
989
  8
943
990
  x
@@ -985,11 +1032,11 @@ p
985
1032
  I
986
1033
  -1
987
1034
  I
988
- 27
1035
+ 2a
989
1036
  I
990
1037
  0
991
1038
  I
992
- 28
1039
+ 2b
993
1040
  I
994
1041
  6
995
1042
  x
@@ -1032,11 +1079,11 @@ p
1032
1079
  I
1033
1080
  -1
1034
1081
  I
1035
- 2b
1082
+ 2e
1036
1083
  I
1037
1084
  0
1038
1085
  I
1039
- 2c
1086
+ 2f
1040
1087
  I
1041
1088
  4
1042
1089
  x
@@ -1112,11 +1159,11 @@ p
1112
1159
  I
1113
1160
  -1
1114
1161
  I
1115
- 2f
1162
+ 32
1116
1163
  I
1117
1164
  0
1118
1165
  I
1119
- 30
1166
+ 33
1120
1167
  I
1121
1168
  16
1122
1169
  x
@@ -1182,11 +1229,11 @@ p
1182
1229
  I
1183
1230
  -1
1184
1231
  I
1185
- 35
1232
+ 38
1186
1233
  I
1187
1234
  0
1188
1235
  I
1189
- 36
1236
+ 39
1190
1237
  I
1191
1238
  11
1192
1239
  x
@@ -1194,6 +1241,59 @@ x
1194
1241
  /Users/felipeelias/Applicake/doorkeeper/lib/doorkeeper/oauth/access_token_request.rb
1195
1242
  p
1196
1243
  0
1244
+ x
1245
+ 12
1246
+ revoke_grant
1247
+ M
1248
+ 1
1249
+ n
1250
+ n
1251
+ x
1252
+ 12
1253
+ revoke_grant
1254
+ i
1255
+ 7
1256
+ 5
1257
+ 48
1258
+ 0
1259
+ 49
1260
+ 1
1261
+ 0
1262
+ 11
1263
+ I
1264
+ 1
1265
+ I
1266
+ 0
1267
+ I
1268
+ 0
1269
+ I
1270
+ 0
1271
+ n
1272
+ p
1273
+ 2
1274
+ x
1275
+ 5
1276
+ grant
1277
+ x
1278
+ 6
1279
+ revoke
1280
+ p
1281
+ 5
1282
+ I
1283
+ -1
1284
+ I
1285
+ 3c
1286
+ I
1287
+ 0
1288
+ I
1289
+ 3d
1290
+ I
1291
+ 7
1292
+ x
1293
+ 84
1294
+ /Users/felipeelias/Applicake/doorkeeper/lib/doorkeeper/oauth/access_token_request.rb
1295
+ p
1296
+ 0
1197
1297
  M
1198
1298
  1
1199
1299
  n
@@ -1254,11 +1354,11 @@ p
1254
1354
  I
1255
1355
  -1
1256
1356
  I
1257
- 39
1357
+ 40
1258
1358
  I
1259
1359
  0
1260
1360
  I
1261
- 3a
1361
+ 41
1262
1362
  I
1263
1363
  13
1264
1364
  x
@@ -1277,14 +1377,15 @@ x
1277
1377
  19
1278
1378
  create_access_token
1279
1379
  i
1280
- 42
1380
+ 56
1281
1381
  45
1282
1382
  0
1283
1383
  1
1284
1384
  44
1285
1385
  43
1286
1386
  2
1287
- 80
1387
+ 4
1388
+ 3
1288
1389
  49
1289
1390
  3
1290
1391
  1
@@ -1314,11 +1415,24 @@ i
1314
1415
  7
1315
1416
  2
1316
1417
  15
1317
- 49
1418
+ 13
1419
+ 7
1318
1420
  10
1421
+ 5
1422
+ 48
1423
+ 11
1424
+ 49
1425
+ 12
1426
+ 0
1427
+ 49
1428
+ 7
1429
+ 2
1430
+ 15
1431
+ 49
1432
+ 13
1319
1433
  1
1320
1434
  38
1321
- 11
1435
+ 14
1322
1436
  11
1323
1437
  I
1324
1438
  5
@@ -1330,7 +1444,7 @@ I
1330
1444
  0
1331
1445
  n
1332
1446
  p
1333
- 12
1447
+ 15
1334
1448
  x
1335
1449
  11
1336
1450
  AccessToken
@@ -1348,8 +1462,8 @@ x
1348
1462
  6
1349
1463
  client
1350
1464
  x
1351
- 3
1352
- uid
1465
+ 2
1466
+ id
1353
1467
  x
1354
1468
  3
1355
1469
  []=
@@ -1360,39 +1474,52 @@ x
1360
1474
  5
1361
1475
  grant
1362
1476
  x
1477
+ 10
1478
+ expires_in
1479
+ x
1480
+ 13
1481
+ configuration
1482
+ x
1483
+ 23
1484
+ access_token_expires_in
1485
+ x
1363
1486
  7
1364
1487
  create!
1365
1488
  x
1366
1489
  13
1367
1490
  @access_token
1368
1491
  p
1369
- 13
1492
+ 15
1370
1493
  I
1371
1494
  -1
1372
1495
  I
1373
- 3d
1496
+ 44
1374
1497
  I
1375
1498
  0
1376
1499
  I
1377
- 3e
1500
+ 45
1378
1501
  I
1379
1502
  3
1380
1503
  I
1381
- 41
1504
+ 49
1382
1505
  I
1383
- b
1506
+ c
1384
1507
  I
1385
- 3f
1508
+ 46
1386
1509
  I
1387
- 18
1510
+ 19
1388
1511
  I
1389
- 40
1512
+ 47
1390
1513
  I
1391
- 24
1514
+ 26
1392
1515
  I
1393
- 3e
1516
+ 48
1394
1517
  I
1395
- 2a
1518
+ 32
1519
+ I
1520
+ 45
1521
+ I
1522
+ 38
1396
1523
  x
1397
1524
  84
1398
1525
  /Users/felipeelias/Applicake/doorkeeper/lib/doorkeeper/oauth/access_token_request.rb
@@ -1465,11 +1592,11 @@ p
1465
1592
  I
1466
1593
  -1
1467
1594
  I
1468
- 44
1595
+ 4c
1469
1596
  I
1470
1597
  0
1471
1598
  I
1472
- 45
1599
+ 4d
1473
1600
  I
1474
1601
  1b
1475
1602
  x
@@ -1524,11 +1651,11 @@ p
1524
1651
  I
1525
1652
  -1
1526
1653
  I
1527
- 48
1654
+ 50
1528
1655
  I
1529
1656
  0
1530
1657
  I
1531
- 49
1658
+ 51
1532
1659
  I
1533
1660
  10
1534
1661
  x
@@ -1632,11 +1759,11 @@ p
1632
1759
  I
1633
1760
  -1
1634
1761
  I
1635
- 4c
1762
+ 54
1636
1763
  I
1637
1764
  0
1638
1765
  I
1639
- 4d
1766
+ 55
1640
1767
  I
1641
1768
  2f
1642
1769
  x
@@ -1690,11 +1817,11 @@ p
1690
1817
  I
1691
1818
  -1
1692
1819
  I
1693
- 50
1820
+ 58
1694
1821
  I
1695
1822
  0
1696
1823
  I
1697
- 51
1824
+ 59
1698
1825
  I
1699
1826
  9
1700
1827
  x
@@ -1702,8 +1829,62 @@ x
1702
1829
  /Users/felipeelias/Applicake/doorkeeper/lib/doorkeeper/oauth/access_token_request.rb
1703
1830
  p
1704
1831
  0
1832
+ x
1833
+ 13
1834
+ configuration
1835
+ M
1836
+ 1
1837
+ n
1838
+ n
1839
+ x
1840
+ 13
1841
+ configuration
1842
+ i
1843
+ 7
1844
+ 45
1845
+ 0
1846
+ 1
1847
+ 49
1848
+ 2
1849
+ 0
1850
+ 11
1851
+ I
1852
+ 1
1853
+ I
1854
+ 0
1855
+ I
1856
+ 0
1857
+ I
1858
+ 0
1859
+ n
1860
+ p
1861
+ 3
1862
+ x
1863
+ 10
1864
+ Doorkeeper
1865
+ n
1866
+ x
1867
+ 13
1868
+ configuration
1869
+ p
1870
+ 5
1871
+ I
1872
+ -1
1873
+ I
1874
+ 5c
1875
+ I
1876
+ 0
1877
+ I
1878
+ 5d
1879
+ I
1880
+ 7
1881
+ x
1882
+ 84
1883
+ /Users/felipeelias/Applicake/doorkeeper/lib/doorkeeper/oauth/access_token_request.rb
1884
+ p
1885
+ 0
1705
1886
  p
1706
- 55
1887
+ 59
1707
1888
  I
1708
1889
  2
1709
1890
  I
@@ -1763,39 +1944,39 @@ I
1763
1944
  I
1764
1945
  a7
1765
1946
  I
1766
- 1d
1947
+ 20
1767
1948
  I
1768
1949
  b5
1769
1950
  I
1770
- 23
1951
+ 26
1771
1952
  I
1772
1953
  c3
1773
1954
  I
1774
- 27
1955
+ 2a
1775
1956
  I
1776
1957
  d1
1777
1958
  I
1778
- 2b
1959
+ 2e
1779
1960
  I
1780
1961
  df
1781
1962
  I
1782
- 2f
1963
+ 32
1783
1964
  I
1784
1965
  ed
1785
1966
  I
1786
- 33
1967
+ 36
1787
1968
  I
1788
1969
  f1
1789
1970
  I
1790
- 35
1971
+ 38
1791
1972
  I
1792
1973
  ff
1793
1974
  I
1794
- 39
1975
+ 3c
1795
1976
  I
1796
1977
  10d
1797
1978
  I
1798
- 3d
1979
+ 40
1799
1980
  I
1800
1981
  11b
1801
1982
  I
@@ -1803,17 +1984,25 @@ I
1803
1984
  I
1804
1985
  129
1805
1986
  I
1806
- 48
1987
+ 4c
1807
1988
  I
1808
1989
  137
1809
1990
  I
1810
- 4c
1991
+ 50
1811
1992
  I
1812
1993
  145
1813
1994
  I
1814
- 50
1995
+ 54
1815
1996
  I
1816
1997
  153
1998
+ I
1999
+ 58
2000
+ I
2001
+ 161
2002
+ I
2003
+ 5c
2004
+ I
2005
+ 16f
1817
2006
  x
1818
2007
  84
1819
2008
  /Users/felipeelias/Applicake/doorkeeper/lib/doorkeeper/oauth/access_token_request.rb