charcoal 2.1.2 → 2.3.0
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.
- checksums.yaml +5 -5
- data/lib/charcoal/cross_origin.rb +6 -1
- data/lib/charcoal/cross_origin_controller.rb +8 -43
- data/lib/charcoal/utilities.rb +56 -0
- data/lib/charcoal/version.rb +1 -1
- metadata +13 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f1c9e686108450bbf02c66b8baab2a1f1d99c08584ce2859da903cd6bb374da2
|
4
|
+
data.tar.gz: f43f57c491c9e29bf94cd94e309bba934f004b1f94afab5fc01b63dcf673a26d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86d9cd403d5d0ad9870cfe01eae8c9e7d3cef14fdbc70a0a06e9d66d9bebbb0d4a96e1dae06a0acd6c937f15aaf48eb345b0e1df315351ef37045543330bdbec
|
7
|
+
data.tar.gz: db9bab1419a9d7c01a04e7af3a8df342b14a614fd336b3f7803147148cd67f4c209cf7d49f8806559e043e8b9acb9232cd59f74ea84f8ad5cbab6a3c375aaae1
|
@@ -42,7 +42,7 @@ module Charcoal
|
|
42
42
|
|
43
43
|
def set_cors_headers
|
44
44
|
headers["Access-Control-Allow-Origin"] = allowed_origin
|
45
|
-
headers["Access-Control-Allow-Credentials"] =
|
45
|
+
headers["Access-Control-Allow-Credentials"] = "true" if credentials_allowed?
|
46
46
|
headers["Access-Control-Expose-Headers"] = Charcoal.configuration["expose-headers"].join(",")
|
47
47
|
end
|
48
48
|
|
@@ -50,5 +50,10 @@ module Charcoal
|
|
50
50
|
value = Charcoal.configuration["allow-origin"]
|
51
51
|
value.respond_to?(:call) ? value.call(self) : value.to_s
|
52
52
|
end
|
53
|
+
|
54
|
+
def credentials_allowed?
|
55
|
+
value = Charcoal.configuration["credentials"]
|
56
|
+
value.respond_to?(:call) ? value.call(self) : value
|
57
|
+
end
|
53
58
|
end
|
54
59
|
end
|
@@ -1,13 +1,16 @@
|
|
1
1
|
# This controller handles CORS preflight requests
|
2
2
|
# See https://developer.mozilla.org/En/HTTP_access_control for documentation
|
3
3
|
|
4
|
-
require 'action_controller'
|
4
|
+
require 'action_controller/metal'
|
5
5
|
require 'active_support/version'
|
6
|
+
require 'charcoal/utilities'
|
6
7
|
|
7
|
-
class Charcoal::CrossOriginController < ActionController::
|
8
|
+
class Charcoal::CrossOriginController < ActionController::Metal
|
9
|
+
include AbstractController::Callbacks
|
10
|
+
include ActionController::Head
|
11
|
+
include ActionController::Instrumentation
|
8
12
|
include Charcoal::CrossOrigin
|
9
|
-
|
10
|
-
Routing = defined?(ActionDispatch) ? ActionDispatch::Routing : ActionController::Routing
|
13
|
+
include Charcoal::Utilities
|
11
14
|
|
12
15
|
allow_cors :all
|
13
16
|
if respond_to?(:skip_around_action)
|
@@ -31,44 +34,6 @@ class Charcoal::CrossOriginController < ActionController::Base
|
|
31
34
|
private
|
32
35
|
|
33
36
|
def allowed_methods
|
34
|
-
|
35
|
-
next if verb == :options
|
36
|
-
|
37
|
-
route = find_route(request.path, request.env.merge(:method => verb))
|
38
|
-
|
39
|
-
if route
|
40
|
-
controller = route[:controller].camelize
|
41
|
-
controller = "#{controller}Controller".constantize
|
42
|
-
|
43
|
-
action = route[:action] || params[:path].last.split(".").first
|
44
|
-
|
45
|
-
instance = controller.new
|
46
|
-
instance.request = request
|
47
|
-
instance.response = response
|
48
|
-
|
49
|
-
controller.respond_to?(:cors_allowed) && controller.cors_allowed?(instance, action)
|
50
|
-
else
|
51
|
-
false
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def find_route(path, env)
|
57
|
-
routes = [Rails.application.routes]
|
58
|
-
|
59
|
-
railties = Rails.application.railties
|
60
|
-
railties = railties.respond_to?(:all) ? railties.all : railties._all
|
61
|
-
routes += railties.select {|tie| tie.is_a?(Rails::Engine)}.map(&:routes)
|
62
|
-
|
63
|
-
routes.each do |route_set|
|
64
|
-
begin
|
65
|
-
return route_set.recognize_path(path, env)
|
66
|
-
rescue ActionController::RoutingError
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
nil
|
71
|
-
rescue ActionController::RoutingError
|
72
|
-
nil
|
37
|
+
allowed_methods_for?(:cors)
|
73
38
|
end
|
74
39
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'action_controller'
|
2
|
+
|
3
|
+
module Charcoal::Utilities
|
4
|
+
Routing = defined?(ActionDispatch) ? ActionDispatch::Routing : ActionController::Routing
|
5
|
+
|
6
|
+
def allowed_methods_for?(protocol)
|
7
|
+
@allowed_methods ||= {}
|
8
|
+
return @allowed_methods[protocol] if @allowed_methods[protocol]
|
9
|
+
@allowed_methods[protocol] = methods_allowed_for?(protocol)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def methods_allowed_for?(protocol)
|
15
|
+
Routing::HTTP_METHODS.select do |verb|
|
16
|
+
next if verb == :options
|
17
|
+
|
18
|
+
route = find_route(request.path, request.env.merge(:method => verb))
|
19
|
+
|
20
|
+
if route
|
21
|
+
controller = route[:controller].camelize
|
22
|
+
controller = "#{controller}Controller".constantize
|
23
|
+
|
24
|
+
action = route[:action] || params[:path].last.split(".").first
|
25
|
+
|
26
|
+
instance = controller.new
|
27
|
+
instance.request = request
|
28
|
+
instance.response = response
|
29
|
+
|
30
|
+
method_name = "#{protocol}_allowed"
|
31
|
+
controller.respond_to?(method_name.to_sym) && controller.send(method_name + '?', instance, action)
|
32
|
+
else
|
33
|
+
false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def find_route(path, env)
|
39
|
+
routes = [Rails.application.routes]
|
40
|
+
|
41
|
+
railties = Rails.application.railties
|
42
|
+
railties = railties.respond_to?(:all) ? railties.all : railties._all
|
43
|
+
routes += railties.select {|tie| tie.is_a?(Rails::Engine)}.map(&:routes)
|
44
|
+
|
45
|
+
routes.each do |route_set|
|
46
|
+
begin
|
47
|
+
return route_set.recognize_path(path, env)
|
48
|
+
rescue ActionController::RoutingError
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
nil
|
53
|
+
rescue ActionController::RoutingError
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
end
|
data/lib/charcoal/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: charcoal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Davidovitz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 3.2.21
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '6.1'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 3.2.21
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '6.1'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: actionpack
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
version: 3.2.21
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '6.1'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,7 +49,7 @@ dependencies:
|
|
49
49
|
version: 3.2.21
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
52
|
+
version: '6.1'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: rake
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,16 +96,16 @@ dependencies:
|
|
96
96
|
name: yard
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
|
-
- - "
|
99
|
+
- - ">="
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
101
|
+
version: 0.9.11
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
106
|
-
- - "
|
106
|
+
- - ">="
|
107
107
|
- !ruby/object:Gem::Version
|
108
|
-
version:
|
108
|
+
version: 0.9.11
|
109
109
|
- !ruby/object:Gem::Dependency
|
110
110
|
name: shoulda
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,34 +120,6 @@ dependencies:
|
|
120
120
|
- - "~>"
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: '3.0'
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
|
-
name: shoulda-context
|
125
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
-
requirements:
|
127
|
-
- - ">="
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
version: '0'
|
130
|
-
type: :development
|
131
|
-
prerelease: false
|
132
|
-
version_requirements: !ruby/object:Gem::Requirement
|
133
|
-
requirements:
|
134
|
-
- - ">="
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
version: '0'
|
137
|
-
- !ruby/object:Gem::Dependency
|
138
|
-
name: mocha
|
139
|
-
requirement: !ruby/object:Gem::Requirement
|
140
|
-
requirements:
|
141
|
-
- - ">="
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
version: '0'
|
144
|
-
type: :development
|
145
|
-
prerelease: false
|
146
|
-
version_requirements: !ruby/object:Gem::Requirement
|
147
|
-
requirements:
|
148
|
-
- - ">="
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: '0'
|
151
123
|
description: Helps you support JSONP and CORS in your Rails app
|
152
124
|
email: sdavidovitz@zendesk.com
|
153
125
|
executables: []
|
@@ -159,6 +131,7 @@ files:
|
|
159
131
|
- lib/charcoal/cross_origin.rb
|
160
132
|
- lib/charcoal/cross_origin_controller.rb
|
161
133
|
- lib/charcoal/jsonp.rb
|
134
|
+
- lib/charcoal/utilities.rb
|
162
135
|
- lib/charcoal/version.rb
|
163
136
|
homepage: https://github.com/zendesk/charcoal
|
164
137
|
licenses:
|
@@ -172,15 +145,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
145
|
requirements:
|
173
146
|
- - ">="
|
174
147
|
- !ruby/object:Gem::Version
|
175
|
-
version:
|
148
|
+
version: 2.4.0
|
176
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
150
|
requirements:
|
178
151
|
- - ">="
|
179
152
|
- !ruby/object:Gem::Version
|
180
153
|
version: '0'
|
181
154
|
requirements: []
|
182
|
-
|
183
|
-
rubygems_version: 2.6.11
|
155
|
+
rubygems_version: 3.1.4
|
184
156
|
signing_key:
|
185
157
|
specification_version: 4
|
186
158
|
summary: Cross-Origin helper for Rails
|