the_garage 2.6.1 → 2.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22866c2b96913a0808dc58ee3c6616a1fa190bdd632d5cbcf23ba0781b5012fc
4
- data.tar.gz: c05332be7ec143fe6aec9b52d9e982be382e45db5c1433c67127a69c692add79
3
+ metadata.gz: b48c2510bfd1fe5926e9fdd4adac78374bb9ed83b46db0b9202e1b6028645974
4
+ data.tar.gz: 1d92f344d618e25f1eef2d7e7778edaa4f3e2a0e1f236a19d476b19a893fc012
5
5
  SHA512:
6
- metadata.gz: 9525bff41a05c514895634c65db08f5644b7c32e2e812f7935df9c7cb68b384d96e21e4bf8ccccc9dbc5561a85d889bd160ff679e9c5e2685a1b07f8c30ed874
7
- data.tar.gz: dd942e114ef1fe840e0a145a3530dbe924970012d66fa7198dacb0409cc1447f36b6111bbb14fdde71ddee5341d76c8a87f4944e8ab3e7a8957ed8513043014a
6
+ metadata.gz: 063d9f1cdf9744ec2fb4d18f6697e44f390bccc259a8c4ff36839992732e4578916ef1691949c8dc8f67872de161bd97e12c049dbd69b81fd5b5e599c8f4faae
7
+ data.tar.gz: e76b35e33c9332afbe6ff7b16ec6b96c23e41c9bd85605e58e2532729e4389ca6090599a32ad67c9e45d8e6c03fade453d8d3e861f87445be45ae30c0b5f53cb
data/README.md CHANGED
@@ -153,7 +153,7 @@ Then configure auth server strategy:
153
153
 
154
154
  The OAuth server must response a json with following structure.
155
155
 
156
- - `token`(string) - OAuth access token value.
156
+ - `token` (string, null) - OAuth access token value.
157
157
  - `token_type` (string) - OAuth access token value. i.e. `bearer` type.
158
158
  - `scope` (string) - OAuth scopes separated by spaces. i.e. `public read_user`.
159
159
  - `application_id` (integer) - OAuth application id of the access token.
@@ -0,0 +1,103 @@
1
+ jQuery(function(){
2
+ $(".get-oauth-token").colorbox({
3
+ transition: "none",
4
+ href: "#oauth-dialog",
5
+ inline: true
6
+ });
7
+
8
+ $(".modal-close").click(function(ev) {
9
+ $.colorbox.close();
10
+ ev.preventDefault();
11
+ });
12
+
13
+ var addNewParamField = function(container) {
14
+ const nextId = "parameter-" + $('.parameter', container).length;
15
+ const copy = $('.template .parameter').clone().attr('id', nextId);
16
+ $('.close-field', copy).click(ev => $('#' + nextId).detach());
17
+ $('.add-field', copy).click(ev => addNewParamField(container));
18
+ copy.show().appendTo(container);
19
+ };
20
+
21
+ const buildData = function(container) {
22
+ const data = {};
23
+ $('.parameter', container).each(function(index) {
24
+ const name = $('.name', this).val();
25
+ const value = $('.value', this).val();
26
+ return data[name] = value;
27
+ });
28
+ return data;
29
+ };
30
+
31
+ $('.console #method').change(function(ev) {
32
+ if (($(this).val() === 'POST') || ($(this).val() === 'PUT')) {
33
+ if ($('.parameters .parameter').length === 0) {
34
+ addNewParamField($('.parameters'));
35
+ }
36
+ } else {
37
+ $('.parameters').empty();
38
+ }
39
+ });
40
+
41
+ const buildHyperlinks = function(json) {
42
+ const html = $('<div/>').text(json).html().replace(/"href": "(\/.*?)"/g, "\"href\": \"<a>$1</a>\"");
43
+ const dom = $(`<div>${html}</div>`);
44
+ $('a', dom).each(function(i) {
45
+ return $(this).attr('href', `${location.pathname}?location=${encodeURIComponent($(this).text())}&method=GET`);
46
+ });
47
+ return dom.html();
48
+ };
49
+
50
+ $('.console .send-request').click(function(ev) {
51
+ $('#api-headers').text('');
52
+ $('#api-response').text('');
53
+
54
+ console.log(buildData($('.parameters')));
55
+ $.ajax({
56
+ type: $('#method').val(),
57
+ url: $('#base').val() + $('#location').val(),
58
+ headers: {'Authorization': 'Bearer ' + $('#access_token').val()},
59
+ cache: false,
60
+ data: buildData($('.parameters')),
61
+ dataType: 'json',
62
+ complete() {
63
+ const queryString = $.param({'location': $('#location').val(), 'method': $('#method').val()});
64
+ const newFullpath = `${location.pathname}?${queryString}`;
65
+ history.pushState('', '', newFullpath);
66
+ $("#oauth-dialog #return_to").val(newFullpath);
67
+ },
68
+ success(data, textStatus, xhr) {
69
+ $('#api-headers').text(`${xhr.status} ${xhr.statusText}\n` + xhr.getAllResponseHeaders());
70
+ $('#api-response').html(buildHyperlinks(JSON.stringify(data, undefined, 2)));
71
+ },
72
+ error(xhr, textStatus, error) {
73
+ $('#api-headers').text(`${xhr.status} ${xhr.statusText}\n` + xhr.getAllResponseHeaders());
74
+ $('#api-response').text(xhr.responseText);
75
+ }
76
+ });
77
+ ev.preventDefault();
78
+ });
79
+
80
+ if (($('.console #token').val() !== '') && ($('.console #location').val() !== '') && ($('.console #method').val() === 'GET')) {
81
+ $('.send-request').click();
82
+ }
83
+
84
+ if ($('.oauth-callback-redirect').size() > 0) {
85
+ const token = window.location.hash.match(/\#access_token=(\w+)/)[1];
86
+ if (token) {
87
+ $('#access_token').val(token);
88
+ $('form.oauth-callback-redirect').submit();
89
+ }
90
+ }
91
+
92
+ $('#oauth-dialog .token-scope-check-all').click(function(ev) {
93
+ $('.token-scope-checkbox').prop('checked', this.checked);
94
+ });
95
+
96
+ return $('#oauth-dialog .token-scope-checkbox').click(function(ev) {
97
+ if ($('.token-scope-checkbox:not(:checked)').length === 0) {
98
+ $('.token-scope-check-all').prop('checked', true);
99
+ } else if (!this.checked) {
100
+ $('.token-scope-check-all').prop('checked', false);
101
+ }
102
+ });
103
+ });
@@ -86,7 +86,7 @@ class Garage::Docs::ResourcesController < Garage::ApplicationController
86
86
  def require_console_application
87
87
  @app = console_application
88
88
  if @app[:uid].blank? || @app[:secret].blank?
89
- render(text: 'Configuration for console application is missing.', status: :forbidden)
89
+ render(plain: 'Configuration for console application is missing.', status: :forbidden)
90
90
  end
91
91
  end
92
92
 
@@ -1,7 +1,6 @@
1
1
  require "rails"
2
2
  require "haml"
3
- require "sass-rails"
4
- require "coffee-rails"
3
+ require "sassc-rails"
5
4
  require "redcarpet"
6
5
 
7
6
  require "garage/docs/anchor_building"
@@ -228,7 +228,12 @@ module Garage
228
228
  end
229
229
 
230
230
  def location
231
- { action: :show, id: @resource.id } if @resource.try(:respond_to?, :id)
231
+ if @resource.try(:respond_to?, :id)
232
+ hash = { action: :show, id: @resource.id }
233
+ url_for(hash)
234
+ hash
235
+ end
236
+ rescue ActionController::UrlGenerationError
232
237
  end
233
238
  end
234
239
  end
@@ -1,7 +1,8 @@
1
1
  module Garage
2
2
  module Strategy
3
3
  class AccessToken
4
- attr_reader :scope, :token, :token_type, :raw_response
4
+ attr_accessor :token
5
+ attr_reader :scope, :token_type, :raw_response
5
6
 
6
7
  def initialize(attrs)
7
8
  @raw_response = attrs
@@ -58,10 +58,8 @@ module Garage
58
58
 
59
59
  def fetch
60
60
  if has_any_valid_credentials?
61
- if has_cacheable_credentials?
62
- fetch_with_cache
63
- else
64
- fetch_without_cache
61
+ fetch_access_token&.tap do |access_token|
62
+ access_token.token ||= token_string
65
63
  end
66
64
  else
67
65
  nil
@@ -144,6 +142,14 @@ module Garage
144
142
  @bearer_token ||= @request.authorization.try {|o| o.slice(/\ABearer\s+(.+)\z/, 1) }
145
143
  end
146
144
 
145
+ def fetch_access_token
146
+ if has_cacheable_credentials?
147
+ fetch_with_cache
148
+ else
149
+ fetch_without_cache
150
+ end
151
+ end
152
+
147
153
  def fetch_with_cache
148
154
  Cache.with_cache("garage_gem/token_cache/#{Garage::VERSION}/#{bearer_token}") do
149
155
  fetch_without_cache
@@ -162,6 +168,12 @@ module Garage
162
168
  end
163
169
  end
164
170
  end
171
+
172
+ def token_string
173
+ bearer_token.presence ||
174
+ @request.params[:access_token].presence ||
175
+ @request.params[:bearer_token].presence
176
+ end
165
177
  end
166
178
 
167
179
  class Response
@@ -1,3 +1,3 @@
1
1
  module Garage
2
- VERSION = '2.6.1'
2
+ VERSION = '2.8.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: the_garage
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1
4
+ version: 2.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tatsuhiko Miyagawa
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-14 00:00:00.000000000 Z
11
+ date: 2022-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.0
19
+ version: 4.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 4.0.0
26
+ version: 4.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rack-accept-default
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -123,21 +123,7 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: sass-rails
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: coffee-rails
126
+ name: sassc-rails
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - ">="
@@ -164,20 +150,6 @@ dependencies:
164
150
  - - ">="
165
151
  - !ruby/object:Gem::Version
166
152
  version: 2.0.0
167
- - !ruby/object:Gem::Dependency
168
- name: appraisal
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
153
  description: Garage extends your RESTful, Hypermedia APIs as a Platform
182
154
  email:
183
155
  - miyagawa@bulknews.net
@@ -189,7 +161,7 @@ files:
189
161
  - README.md
190
162
  - Rakefile
191
163
  - app/assets/javascripts/garage/application.js
192
- - app/assets/javascripts/garage/docs/console.js.coffee
164
+ - app/assets/javascripts/garage/docs/console.js
193
165
  - app/assets/javascripts/garage/docs/jquery.colorbox.js
194
166
  - app/assets/stylesheets/garage/application.css
195
167
  - app/assets/stylesheets/garage/colorbox.scss
@@ -255,7 +227,7 @@ homepage: https://github.com/cookpad/garage
255
227
  licenses:
256
228
  - MIT
257
229
  metadata: {}
258
- post_install_message:
230
+ post_install_message:
259
231
  rdoc_options: []
260
232
  require_paths:
261
233
  - lib
@@ -271,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
243
  version: '0'
272
244
  requirements: []
273
245
  rubygems_version: 3.1.4
274
- signing_key:
246
+ signing_key:
275
247
  specification_version: 4
276
248
  summary: Garage Platform Engine
277
249
  test_files: []
@@ -1,84 +0,0 @@
1
- jQuery ()->
2
- $(".get-oauth-token").colorbox(
3
- transition: "none"
4
- href: "#oauth-dialog"
5
- inline: true
6
- )
7
-
8
- $(".modal-close").click (ev) ->
9
- $.colorbox.close()
10
- ev.preventDefault()
11
-
12
- addNewParamField = (container) ->
13
- nextId = "parameter-" + $('.parameter', container).length
14
- copy = $('.template .parameter').clone().attr('id', nextId)
15
- $('.close-field', copy).click (ev) ->
16
- $('#' + nextId).detach()
17
- $('.add-field', copy).click (ev) ->
18
- addNewParamField(container)
19
- copy.show().appendTo(container)
20
-
21
- buildData = (container) ->
22
- data = {}
23
- $('.parameter', container).each (index) ->
24
- name = $('.name', this).val()
25
- value = $('.value', this).val()
26
- data[name] = value
27
- data
28
-
29
- $('.console #method').change (ev) ->
30
- if $(this).val() == 'POST' or $(this).val() == 'PUT'
31
- if $('.parameters .parameter').length == 0
32
- addNewParamField($('.parameters'))
33
- else
34
- $('.parameters').empty()
35
-
36
- buildHyperlinks = (json) ->
37
- html = $('<div/>').text(json).html().replace /"href": "(\/.*?)"/g, "\"href\": \"<a>$1</a>\""
38
- dom = $("<div>#{html}</div>")
39
- $('a', dom).each (i) ->
40
- $(this).attr('href', "#{location.pathname}?location=#{encodeURIComponent($(this).text())}&method=GET")
41
- dom.html()
42
-
43
- $('.console .send-request').click (ev) ->
44
- $('#api-headers').text ''
45
- $('#api-response').text ''
46
-
47
- console.log buildData($('.parameters'))
48
- $.ajax
49
- type: $('#method').val(),
50
- url: $('#base').val() + $('#location').val(),
51
- headers: {'Authorization': 'Bearer ' + $('#access_token').val()},
52
- cache: false,
53
- data: buildData($('.parameters')),
54
- dataType: 'json',
55
- complete: ->
56
- queryString = $.param({'location': $('#location').val(), 'method': $('#method').val()})
57
- newFullpath = "#{location.pathname}?#{queryString}"
58
- history.pushState('', '', newFullpath)
59
- $("#oauth-dialog #return_to").val(newFullpath)
60
- success: (data, textStatus, xhr) ->
61
- $('#api-headers').text("#{xhr.status} #{xhr.statusText}\n" + xhr.getAllResponseHeaders())
62
- $('#api-response').html buildHyperlinks(JSON.stringify(data, undefined, 2))
63
- error: (xhr, textStatus, error) ->
64
- $('#api-headers').text("#{xhr.status} #{xhr.statusText}\n" + xhr.getAllResponseHeaders())
65
- $('#api-response').text xhr.responseText
66
- ev.preventDefault()
67
-
68
- if $('.console #token').val() != '' && $('.console #location').val() != '' && $('.console #method').val() == 'GET'
69
- $('.send-request').click()
70
-
71
- if $('.oauth-callback-redirect').size() > 0
72
- token = window.location.hash.match(/\#access_token=(\w+)/)[1]
73
- if token
74
- $('#access_token').val(token)
75
- $('form.oauth-callback-redirect').submit()
76
-
77
- $('#oauth-dialog .token-scope-check-all').click (ev) ->
78
- $('.token-scope-checkbox').prop('checked', this.checked)
79
-
80
- $('#oauth-dialog .token-scope-checkbox').click (ev) ->
81
- if $('.token-scope-checkbox:not(:checked)').length == 0
82
- $('.token-scope-check-all').prop('checked', true)
83
- else if not this.checked
84
- $('.token-scope-check-all').prop('checked', false)