redirectr 1.0.2 → 1.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39a819683a6431c465429c1c8cc26ca69025baf7de9733127ba09c3c871362ef
4
- data.tar.gz: e9367fbb4d37863273194b4704f32632689420b7c8118240557f6344290ee71a
3
+ metadata.gz: aab12433022382d5fc61e4964d815430d39cf08aec7b6bbc32672065fdf7d115
4
+ data.tar.gz: 54b286ec8bc69898564184f1d2488189b3523f0da279d8d61b0ac3cd7444176a
5
5
  SHA512:
6
- metadata.gz: 19cd53b6e4899399ef7a2f3e2a41c138e4b97fc7b981307d2c947422c2f1a739ec8fe39a4d6792597f040901110aad40fbf095622da45ccb245d6a90e577f3b2
7
- data.tar.gz: ec84882c583f6c1e2d585f44b489838009633bf2521847f5c3540bf4f8ef705499e97aaeec55ebef1c71143cf8cf92e021598ad5a40292a0381ea15b38bad606
6
+ metadata.gz: 96332b3a061883e9b49881d74d1a54475f2850f4b9952404c5bf7bc2e478fc698c3e0097b5ea2cc53075274632249f34d80e390b2692ff95936c309065c04eb1
7
+ data.tar.gz: 582e0f5a9a7175068924b6d5dec1d7ef2044b14b6c935861d35dc555302cfd461317425ea69e913fa92c46be903d185753e2f925fe2130247da156008c8cba25
data/README.md CHANGED
@@ -123,6 +123,9 @@ By default, Redirectr checks the protocol, hostname and port of the referrer aga
123
123
 
124
124
  Instead of using a URL in the referrer token, redirectr can act as an URL shortener that maps random tokens to URLs. This requires a storage_implementation to be defined:
125
125
 
126
+
127
+ require 'redirectr/referrer_token/active_record_storage'
128
+
126
129
  YourApp::Application.configure do
127
130
  config.x.redirectr.use_referrer_token = true
128
131
  config.x.redirectr.reuse_tokens = true # set to false to generate a new token for each and every link
@@ -145,13 +148,6 @@ Thanks so far to:
145
148
  * Falk Hoppe for Rails 2.3.x interoperability
146
149
  * Dimitar Haralanov for Rails 3.0.x interoperability
147
150
  * Raffael Schmid for spotting a typo in the gemspec description ;)
148
-
149
- ## Changelog
150
-
151
- * 1.0.0: Validate Redirect urls against whitelist; Allow Token instead of URL referrer param
152
- * 0.1.1: deprecate *_path methods; improve Rails 5 compatibility by removing `alias` in view helpers
153
- * 0.1.0: Use absolute URI instead of path in current_path method
154
- * 0.0.8: Use ActiveSupport::Concern (Thanks to Dimitar Haralanov)
155
- * 0.0.7: Add Rails 3.0 compatibility (Thanks to Falk Hoppe)
151
+ * Till Schulte-Coerne for removing implicit dependencies and cleaning up unused code
156
152
 
157
153
  Copyright (c) 2010 Willem van Kerkhof <wvk@consolving.de>, released under the MIT license
@@ -0,0 +1,28 @@
1
+ module Redirectr
2
+ class ReferrerToken
3
+
4
+ # this is a stora implementation for activerecord-
5
+ class ActiveRecordStorage < ActiveRecord::Base
6
+ validates_presence_of :url, :token
7
+
8
+ self.table_name = :redirectr_referrer_tokens
9
+
10
+ class << self
11
+ def store(record)
12
+ self.find_or_create_by url: record.url, token: record.token
13
+ record.url
14
+ end
15
+
16
+ def fetch(token)
17
+ url = self.find_by(token: token)&.url
18
+ ReferrerToken(url) if url
19
+ end
20
+
21
+ def token_for_url(url)
22
+ self.find_by(url: url)&.token
23
+ end
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,26 @@
1
+ module Redirectr
2
+ class ReferrerToken
3
+
4
+ class GlobalVarStorage
5
+
6
+ def persisted?
7
+ false
8
+ end
9
+
10
+ class << self
11
+ def store(record)
12
+ $referrer_lookup[record.token] = record.url
13
+ end
14
+
15
+ def fetch(token)
16
+ ReferrerToken($referrer_lookup[token])
17
+ end
18
+
19
+ def token_for_url(url)
20
+ $referrer_lookup.key(url)
21
+ end
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,73 @@
1
+ require 'active_model'
2
+
3
+ module Redirectr
4
+ class ReferrerToken
5
+
6
+ extend ActiveModel::Naming
7
+
8
+ attr_reader :url, :token
9
+
10
+ def initialize(url, token=nil)
11
+ @url = url
12
+ @token = token
13
+
14
+ if Redirectr.config.use_referrer_token
15
+ if Redirectr.config.storage_implementation.nil?
16
+ raise "Missing storage implementation for referrer tokens! please define config.x.redirectr.storage_implementation"
17
+ end
18
+
19
+ if Redirectr.config.reuse_tokens
20
+ @token ||= Redirectr.config.storage_implementation.token_for_url(url)
21
+ end
22
+ @token ||= SecureRandom.hex(16)
23
+ elsif Redirectr.config.encrypt_referrer
24
+ @token ||= self.class.cryptr.encrypt_and_sign url
25
+ else
26
+ @token ||= url
27
+ end
28
+ end
29
+
30
+ def to_param
31
+ @token
32
+ end
33
+
34
+ def to_model
35
+ self
36
+ end
37
+
38
+ def to_s
39
+ @url
40
+ end
41
+
42
+ def persisted?
43
+ true
44
+ end
45
+
46
+ def save
47
+ if Redirectr.config.use_referrer_token
48
+ Redirectr.config.storage_implementation.store self
49
+ end
50
+ end
51
+
52
+ def self.from_param(param)
53
+ if Redirectr.config.encrypt_referrer
54
+ ReferrerToken.new self.class.cryptr.decrypt_and_verify param
55
+ elsif Redirectr.config.use_referrer_token
56
+ self.lookup(param)
57
+ else
58
+ ReferrerToken.new param
59
+ end
60
+ end
61
+
62
+ def self.lookup(token)
63
+ Redirectr.config.storage_implementation.fetch token
64
+ end
65
+
66
+ private
67
+
68
+ def self.cryptr
69
+ @cryptr ||= ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base)
70
+ end
71
+
72
+ end
73
+ end
@@ -1,3 +1,3 @@
1
1
  module Redirectr
2
- VERSION = '1.0.2'
2
+ VERSION = '1.0.3'
3
3
  end
data/lib/redirectr.rb CHANGED
@@ -1,6 +1,8 @@
1
- require 'redirectr/engine'
2
1
  require 'securerandom'
3
2
 
3
+ require 'redirectr/engine'
4
+ require 'redirectr/referrer_token'
5
+
4
6
  def ReferrerToken(url, token=nil)
5
7
  case url
6
8
  when Redirectr::ReferrerToken
@@ -30,120 +32,6 @@ module Redirectr
30
32
  Rails.configuration.x.redirectr
31
33
  end
32
34
 
33
- class ReferrerToken
34
- extend ActiveModel::Naming
35
-
36
- # this is a stora implementation for activerecord-
37
- class ActiveRecordStorage < ActiveRecord::Base
38
- validates_presence_of :url, :token
39
-
40
- self.table_name = :redirectr_referrer_tokens
41
-
42
- class << self
43
- def store(record)
44
- self.find_or_create_by url: record.url, token: record.token
45
- record.url
46
- end
47
-
48
- def fetch(token)
49
- url = self.find_by(token: token)&.url
50
- ReferrerToken(url) if url
51
- end
52
-
53
- def token_for_url(url)
54
- self.find_by(url: url)&.token
55
- end
56
- end
57
- end
58
-
59
- class GlobalVarStorage
60
- extend ActiveModel::Naming
61
-
62
- def persisted?
63
- false
64
- end
65
-
66
- class << self
67
- def store(record)
68
- $referrer_lookup[record.token] = record.url
69
- end
70
-
71
- def fetch(token)
72
- ReferrerToken($referrer_lookup[token])
73
- end
74
-
75
- def token_for_url(url)
76
- $referrer_lookup.key(url)
77
- end
78
- end
79
- end
80
-
81
- attr_reader :url, :token
82
-
83
- def initialize(url, token=nil)
84
- @url = url
85
- @token = token
86
-
87
- if Redirectr.config.use_referrer_token
88
- if Redirectr.config.storage_implementation.nil?
89
- raise "Missing storage implementation for referrer tokens! please define config.x.redirectr.storage_implementation"
90
- end
91
-
92
- if Redirectr.config.reuse_tokens
93
- @token ||= Redirectr.config.storage_implementation.token_for_url(url)
94
- end
95
- @token ||= SecureRandom.hex(16)
96
- elsif Redirectr.config.encrypt_referrer
97
- @token ||= self.class.cryptr.encrypt_and_sign url
98
- else
99
- @token ||= url
100
- end
101
- end
102
-
103
- def to_param
104
- @token
105
- end
106
-
107
- def to_model
108
- self
109
- end
110
-
111
- def to_s
112
- @url
113
- end
114
-
115
- def persisted?
116
- true
117
- end
118
-
119
- def save
120
- if Redirectr.config.use_referrer_token
121
- Redirectr.config.storage_implementation.store self
122
- end
123
- end
124
-
125
- def self.from_param(param)
126
- if Redirectr.config.encrypt_referrer
127
- ReferrerToken.new self.class.cryptr.decrypt_and_verify param
128
- elsif Redirectr.config.use_referrer_token
129
- self.lookup(param)
130
- else
131
- ReferrerToken.new param
132
- end
133
- end
134
-
135
- def self.lookup(token)
136
- Redirectr.config.storage_implementation.fetch token
137
- end
138
-
139
- private
140
-
141
- def self.cryptr
142
- @cryptr ||= ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base)
143
- end
144
- end
145
-
146
-
147
35
  module ControllerMethods
148
36
  extend ActiveSupport::Concern
149
37
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redirectr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Kerkhof
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-13 00:00:00.000000000 Z
11
+ date: 2023-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -49,25 +49,21 @@ files:
49
49
  - MIT-LICENSE
50
50
  - README.md
51
51
  - Rakefile
52
- - app/assets/config/redirectr_manifest.js
53
- - app/assets/javascripts/redirectr/application.js
54
- - app/assets/stylesheets/redirectr/application.css
55
- - app/controllers/redirectr/application_controller.rb
56
52
  - app/helpers/redirectr/application_helper.rb
57
- - app/jobs/redirectr/application_job.rb
58
- - app/models/redirectr/application_record.rb
59
- - app/views/layouts/redirectr/application.html.erb
60
53
  - config/routes.rb
61
54
  - db/migrate/20201120110532_create_redirectr_referrer_tokens.rb
62
55
  - lib/redirectr.rb
63
56
  - lib/redirectr/engine.rb
57
+ - lib/redirectr/referrer_token.rb
58
+ - lib/redirectr/referrer_token/active_record_storage.rb
59
+ - lib/redirectr/referrer_token/global_var_storage.rb
64
60
  - lib/redirectr/version.rb
65
61
  - lib/tasks/redirectr_tasks.rake
66
62
  homepage: http://github.com/wvk/redirectr
67
63
  licenses:
68
64
  - MIT
69
65
  metadata: {}
70
- post_install_message:
66
+ post_install_message:
71
67
  rdoc_options: []
72
68
  require_paths:
73
69
  - lib
@@ -82,8 +78,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
78
  - !ruby/object:Gem::Version
83
79
  version: '0'
84
80
  requirements: []
85
- rubygems_version: 3.2.27
86
- signing_key:
81
+ rubygems_version: 3.3.15
82
+ signing_key:
87
83
  specification_version: 4
88
84
  summary: Rails referrer-URL handling done right
89
85
  test_files: []
@@ -1,2 +0,0 @@
1
- //= link_directory ../javascripts/redirectr .js
2
- //= link_directory ../stylesheets/redirectr .css
@@ -1,13 +0,0 @@
1
- // This is a manifest file that'll be compiled into application.js, which will include all the files
2
- // listed below.
3
- //
4
- // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
- // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
- //
7
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
- // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
- //
10
- // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
- // about supported directives.
12
- //
13
- //= require_tree .
@@ -1,15 +0,0 @@
1
- /*
2
- * This is a manifest file that'll be compiled into application.css, which will include all the files
3
- * listed below.
4
- *
5
- * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
- * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
- *
8
- * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
- * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
- * files in this directory. Styles in this file should be added after the last require_* statement.
11
- * It is generally better to create a new file per style scope.
12
- *
13
- *= require_tree .
14
- *= require_self
15
- */
@@ -1,5 +0,0 @@
1
- module Redirectr
2
- class ApplicationController < ActionController::Base
3
- protect_from_forgery with: :exception
4
- end
5
- end
@@ -1,4 +0,0 @@
1
- module Redirectr
2
- class ApplicationJob < ActiveJob::Base
3
- end
4
- end
@@ -1,5 +0,0 @@
1
- module Redirectr
2
- class ApplicationRecord < ActiveRecord::Base
3
- self.abstract_class = true
4
- end
5
- end
@@ -1,16 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Redirectr</title>
5
- <%= csrf_meta_tags %>
6
- <%= csp_meta_tag %>
7
-
8
- <%= stylesheet_link_tag "redirectr/application", media: "all" %>
9
- <%= javascript_include_tag "redirectr/application" %>
10
- </head>
11
- <body>
12
-
13
- <%= yield %>
14
-
15
- </body>
16
- </html>