repost 0.3.0 → 0.3.5

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: bc815d8628862bce90efaea620e728bbe5bc4361270012168bd91c3638c27dfd
4
- data.tar.gz: dd1647ded8a8b2ba1cd4e4e923a288d65ae8c02fd3c352743b55530f4ef53a7f
3
+ metadata.gz: a550b943057d547063df1b9a6775a89f112e997eb10dc892ad5288d6badc7d0a
4
+ data.tar.gz: '081133fd059196c4c7e071e183333400e0ecddeca66e0c39467f16d10f84e489'
5
5
  SHA512:
6
- metadata.gz: 0e090ab38d6712ce42ce7b58a856c26df4fd4f9c7234afe559239669a8c232bfeb0840e1e2148d51fcaa8ad76669a601d1484a704087cc6597b3278333a8ecbe
7
- data.tar.gz: af0311293b5ecdd4f995680880a046cb299a5e54b47dcbf516a5c6d2358ae662d4c919ce908f2a60ccc6b79199e4c074d3299a924aabf5bec414f9b01ae9c3f0
6
+ metadata.gz: 379a30beab17dc0516de3551d6922e2f66243bb02e53e1ec589f25dea58035d843ddb65257b8048fefddef217e64f833caa79207ab67defc649d5f8dc884b198
7
+ data.tar.gz: 42f022dee1b7c95109e26d158ac1166635d16adea63fe3e8a88703e5e5084064fc86852ece2889c0eb9c3fd86a27c805e19187f33bc3c1f8068af2a90abc24b5
@@ -1,7 +1,7 @@
1
1
  module Repost
2
2
  class Action
3
- def self.perform(*args)
4
- action = new(*args)
3
+ def self.perform(*args, **kw_args)
4
+ action = new(*args, **kw_args)
5
5
  action.perform
6
6
  end
7
7
  end
@@ -1,18 +1,22 @@
1
- if defined?(Rails)
2
- class ::ActionController::Base
3
- AUTO_TOKEN_OPTIONS = ['auto', :auto].freeze
1
+ if defined?(Rails) && defined?(ActiveSupport)
2
+ ActiveSupport.on_load(:action_controller) do
3
+ class ::ActionController::Base
4
4
 
5
- def repost(url, params: {}, options: {})
6
- authenticity_token = form_authenticity_token if AUTO_TOKEN_OPTIONS.include?(options[:authenticity_token])
7
- render html: Repost::Senpai.perform(
8
- url,
9
- params: params,
10
- options: options.merge({authenticity_token: authenticity_token}.compact)
11
- ).html_safe
12
- end
5
+ def repost(url, params: {}, options: {})
6
+ authenticity_token = form_authenticity_token if ['auto', :auto].include?(options[:authenticity_token])
7
+ render html: Repost::Senpai.perform(
8
+ url,
9
+ params: params,
10
+ options: options.merge({
11
+ authenticity_token: authenticity_token,
12
+ autosubmit_nonce: content_security_policy_nonce,
13
+ }.compact)
14
+ ).html_safe
15
+ end
13
16
 
14
- alias :redirect_post :repost
17
+ alias :redirect_post :repost
15
18
 
19
+ end
16
20
  end
17
21
  end
18
22
 
@@ -12,6 +12,7 @@ module Repost
12
12
  @charset = options.fetch(:charset, DEFAULT_CHARSET)
13
13
  @form_id = options.fetch(:form_id, generated_form_id)
14
14
  @autosubmit = options.fetch(:autosubmit, true)
15
+ @autosubmit_nonce = options.fetch(:autosubmit_nonce, nil)
15
16
  @section_classes = options.dig(:decor, :section, :classes)
16
17
  @section_html = options.dig(:decor, :section, :html)
17
18
  @submit_classes = options.dig(:decor, :submit, :classes)
@@ -31,7 +32,7 @@ module Repost
31
32
 
32
33
  attr_reader :url, :params, :options, :method, :form_id, :autosubmit,
33
34
  :section_classes, :section_html, :submit_classes,
34
- :submit_text, :authenticity_token, :charset
35
+ :submit_text, :authenticity_token, :charset, :autosubmit_nonce
35
36
 
36
37
  def form_head
37
38
  "<form id='#{form_id}' action='#{url}' method='#{method}' accept-charset='#{charset}'>"
@@ -39,12 +40,22 @@ module Repost
39
40
 
40
41
  def form_body
41
42
  inputs = params.map do |key, value|
42
- "<input type='hidden' name='#{key}' value='#{value}'>"
43
+ form_input(key, value)
43
44
  end
44
45
  inputs.unshift(csrf_token) if authenticity_token
45
46
  inputs.join
46
47
  end
47
48
 
49
+ def form_input(key, value)
50
+ if value.is_a?(Hash)
51
+ value.map do |inner_key, inner_value|
52
+ form_input("#{key}[#{inner_key}]", inner_value)
53
+ end.join
54
+ else
55
+ "<input type='hidden' name='#{key}' value='#{value}'>"
56
+ end
57
+ end
58
+
48
59
  def form_footer
49
60
  "</form>"
50
61
  end
@@ -71,7 +82,8 @@ module Repost
71
82
  end
72
83
 
73
84
  def auto_submit_script
74
- "<script>
85
+ nonce_attr = %Q( nonce="#{autosubmit_nonce}") if autosubmit_nonce
86
+ "<script#{nonce_attr}>
75
87
  document.getElementById('#{form_id}').submit();
76
88
  </script>"
77
89
  end
@@ -1,3 +1,3 @@
1
1
  module Repost
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repost
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - YaroslavO
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-07 00:00:00.000000000 Z
11
+ date: 2021-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
86
  - !ruby/object:Gem::Version
87
87
  version: '0'
88
88
  requirements: []
89
- rubygems_version: 3.0.1
89
+ rubygems_version: 3.0.8
90
90
  signing_key:
91
91
  specification_version: 4
92
92
  summary: Gem implements Redirect using POST method