pco-url 2.0.0 → 2.1.0

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
- SHA1:
3
- metadata.gz: 5ad5229c15a12077f471c25fca3288c285b2c687
4
- data.tar.gz: aadeaab05a5ea105f5ad32d30fabbfd32c00cb6c
2
+ SHA256:
3
+ metadata.gz: 4731a995e9e8f3944ba316db910452830ba0a0606f0a9cc07db1a6a51ef7890c
4
+ data.tar.gz: 436e8ac79dcfe60f89d81676b5b2149269561510e827c90548f2d3c804dd5f1e
5
5
  SHA512:
6
- metadata.gz: 27e08f5cdc63de25d4cfcedfde96a4c8b06612adee3553c5d7ed43b5b37734ec70c609b9aaf1a3578f5b5d13769aa282460d4d8cb02af5ca49d16cf6c8b03053
7
- data.tar.gz: 6a055c9dbb973275dceb0e909e3abea22dc7513b8d633e8f97b1ee2cd3bc485040d973e64525f9d4e1f76087ffdaac372c2e40d219152cdda8c75ad51719aa28
6
+ metadata.gz: d587df8300f3b0ff06db697ee73a7c6375a6e1b29122cb67a0730691fb56da073d466fce254f76fee308c17500beeca68731179d02eb18510fbb3b7f265153e5
7
+ data.tar.gz: b1fc2d8431d4b6abe9b0b21ddef546c095de4b0afdb7d7e168dce643a168dc9bad1692739d3219326a641db467e9a11d6801d44e00c29d3f9d2cacb287267d3c
data/.gitignore CHANGED
@@ -12,3 +12,4 @@
12
12
  *.o
13
13
  *.a
14
14
  mkmf.log
15
+ log
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # v2.1.0 (2019-11-05)
2
+
3
+ * Feature: Add support in dev for any TLD [Tim Morgan]
4
+
5
+ # v2.0.2 (2019-01-21)
6
+
7
+ * Fix: Repair downcased encrypted params even better
8
+
9
+ # v2.0.1 (2013-01-21)
10
+
11
+ * Fix: Repair downcased encrypted params
12
+
1
13
  # v2.0.0 (2018-09-21)
2
14
 
3
15
  * Chore: inline URLcrypt for threadsafety
data/lib/pco/url.rb CHANGED
@@ -2,6 +2,7 @@ require_relative "url/version"
2
2
  require_relative "url/church_center"
3
3
  require_relative "url/get"
4
4
  require_relative "url/encryption"
5
+ require_relative "url/engine"
5
6
  require "uri"
6
7
 
7
8
  module PCO
@@ -85,7 +86,7 @@ module PCO
85
86
  when "production", "staging"
86
87
  "planningcenteronline.com"
87
88
  when "development", "test"
88
- "pco.test"
89
+ PCO::URL::Engine.domain || "pco.test"
89
90
  end
90
91
  end
91
92
 
@@ -75,7 +75,7 @@ module PCO
75
75
 
76
76
  def decrypt(data, key: @default_key)
77
77
  raise MissingKeyError, "default key or key: argument must be set" if key.nil?
78
- iv, encrypted = data.split("Z").map { |part| decode(part) }
78
+ iv, encrypted = case_corrected(data).split("Z").map { |part| decode(part) }
79
79
  raise DecryptError, "not a valid string to decrypt" unless iv && encrypted
80
80
  decrypter = cipher(:decrypt, key: key)
81
81
  decrypter.iv = iv
@@ -91,6 +91,11 @@ module PCO
91
91
 
92
92
  private
93
93
 
94
+ def case_corrected(data)
95
+ return data unless data[26] == "z"
96
+ data.tr("a", "A").sub(/\A([#{TABLE}]{26})z/, '\1Z')
97
+ end
98
+
94
99
  def chunks(str, size)
95
100
  result = []
96
101
  bytes = str.bytes
@@ -0,0 +1,19 @@
1
+ require_relative "./engine/domain_middleware"
2
+
3
+ module PCO
4
+ class URL
5
+ class Engine < Rails::Engine
6
+ def self.domain
7
+ Thread.current[:pco_url_domain]
8
+ end
9
+
10
+ def self.domain=(d)
11
+ Thread.current[:pco_url_domain] = d
12
+ end
13
+
14
+ initializer "pco_url.add_middleware" do |app|
15
+ app.middleware.use PCO::URL::Engine::DomainMiddleware if Rails.env.development? || Rails.env.test?
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ module PCO
2
+ class URL
3
+ class Engine < Rails::Engine
4
+ class DomainMiddleware
5
+ def initialize(app)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ PCO::URL::Engine.domain = env["SERVER_NAME"].downcase.match(/[a-z0-9-]+\.[a-z]+$/).to_s
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,5 +1,5 @@
1
1
  module PCO
2
2
  class URL
3
- VERSION = "2.0.0".freeze
3
+ VERSION = "2.1.0".freeze
4
4
  end
5
5
  end
data/pco-url.gemspec CHANGED
@@ -18,7 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_development_dependency "bundler", "~> 1.7"
21
+ spec.add_development_dependency "rails", "~> 5.0"
21
22
  spec.add_development_dependency "rake", "~> 10.0"
22
23
  spec.add_development_dependency "rspec", ">= 3.0.0", "< 4"
24
+ spec.add_development_dependency "rspec-rails", "~> 3.9.0"
23
25
  spec.add_development_dependency "rubocop", "0.54.0"
24
26
  end
@@ -0,0 +1,22 @@
1
+ require_relative "./boot"
2
+ require "action_controller/railtie"
3
+
4
+ require 'pco/url'
5
+
6
+ module Dummy
7
+ class Application < Rails::Application
8
+ config.eager_load = false
9
+ end
10
+ end
11
+
12
+ Dummy::Application.initialize!
13
+
14
+ class TestsController < ActionController::Base
15
+ def show
16
+ render plain: PCO::URL.people
17
+ end
18
+ end
19
+
20
+ Rails.application.routes.draw do
21
+ resource :test
22
+ end
@@ -0,0 +1,5 @@
1
+ gemfile = File.expand_path('../../../../Gemfile', __FILE__)
2
+ ENV['BUNDLE_GEMFILE'] = gemfile
3
+ require 'bundler'
4
+ Bundler.setup
5
+ $LOAD_PATH.unshift(File.expand_path('../../../../lib', __FILE__))
@@ -30,6 +30,16 @@ describe PCO::URL::Encryption do
30
30
 
31
31
  expect(described_class.decrypt(encrypted)).to eq("Horseman")
32
32
  end
33
+
34
+ context "when the encrypted string gets downcased for some dumb reason" do
35
+ it "decrypts correctly" do
36
+ described_class.default_key = TEST_DEFAULT_KEY
37
+ encrypted = described_class.encrypt("Butterscotch").downcase
38
+ decrypted = described_class.decrypt(encrypted)
39
+
40
+ expect(decrypted).to eq("Butterscotch")
41
+ end
42
+ end
33
43
  end
34
44
 
35
45
  context "when no default key is set" do
@@ -0,0 +1,57 @@
1
+ require "spec_helper"
2
+
3
+ describe PCO::URL::Engine::DomainMiddleware, type: :request do
4
+ context "in development mode" do
5
+ before do
6
+ ENV["DEPLOY_ENV"] = Rails.env = "development"
7
+ end
8
+
9
+ it "sets the generated URL domain to be the same as the host" do
10
+ host! "accounts.pco.test"
11
+ get "/test"
12
+ expect(response.body).to eq("http://people.pco.test")
13
+ host! "accounts.pco.codes"
14
+ get "/test"
15
+ expect(response.body).to eq("http://people.pco.codes")
16
+ end
17
+ end
18
+
19
+ context "in test mode" do
20
+ before do
21
+ ENV["DEPLOY_ENV"] = Rails.env = "test"
22
+ end
23
+
24
+ it "sets the generated URL domain to be the same as the host" do
25
+ host! "accounts.pco.test"
26
+ get "/test"
27
+ expect(response.body).to eq("http://people.pco.test")
28
+ host! "accounts.pco.codes"
29
+ get "/test"
30
+ expect(response.body).to eq("http://people.pco.codes")
31
+ end
32
+ end
33
+
34
+ context "in staging mode" do
35
+ before do
36
+ ENV["DEPLOY_ENV"] = Rails.env = "staging"
37
+ end
38
+
39
+ it "does not change the domain based on host" do
40
+ host! "accounts.pco.test"
41
+ get "/test"
42
+ expect(response.body).to eq("https://people-staging.planningcenteronline.com")
43
+ end
44
+ end
45
+
46
+ context "in production mode" do
47
+ before do
48
+ ENV["DEPLOY_ENV"] = Rails.env = "production"
49
+ end
50
+
51
+ it "does not change the domain based on host" do
52
+ host! "accounts.pco.test"
53
+ get "/test"
54
+ expect(response.body).to eq("https://people.planningcenteronline.com")
55
+ end
56
+ end
57
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,8 @@
1
+ require "rails"
2
+ require File.expand_path("dummy/config/application", __dir__)
3
+
1
4
  require "rspec"
5
+ require "rspec/rails"
2
6
  require "pco/url"
3
7
 
4
8
  RSpec.configure do |config|
@@ -11,9 +15,3 @@ RSpec.configure do |config|
11
15
  PCO::URL::Encryption.remove_instance_variable(:@default_key)
12
16
  end
13
17
  end
14
-
15
- class Rails
16
- class << self
17
- attr_accessor :env
18
- end
19
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pco-url
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Miller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-24 00:00:00.000000000 Z
11
+ date: 2019-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,6 +72,20 @@ dependencies:
58
72
  - - "<"
59
73
  - !ruby/object:Gem::Version
60
74
  version: '4'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec-rails
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 3.9.0
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 3.9.0
61
89
  - !ruby/object:Gem::Dependency
62
90
  name: rubocop
63
91
  requirement: !ruby/object:Gem::Requirement
@@ -92,13 +120,18 @@ files:
92
120
  - lib/pco/url.rb
93
121
  - lib/pco/url/church_center.rb
94
122
  - lib/pco/url/encryption.rb
123
+ - lib/pco/url/engine.rb
124
+ - lib/pco/url/engine/domain_middleware.rb
95
125
  - lib/pco/url/get.rb
96
126
  - lib/pco/url/version.rb
97
127
  - pco-url.gemspec
98
128
  - spec/.rubocop.yml
129
+ - spec/dummy/config/application.rb
130
+ - spec/dummy/config/boot.rb
99
131
  - spec/pco/url/church_center_spec.rb
100
132
  - spec/pco/url/encryption_spec.rb
101
133
  - spec/pco_url_spec.rb
134
+ - spec/requests/dev_domain_spec.rb
102
135
  - spec/spec_helper.rb
103
136
  homepage: https://github.com/ministrycentered/pco-url
104
137
  licenses:
@@ -119,14 +152,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
152
  - !ruby/object:Gem::Version
120
153
  version: '0'
121
154
  requirements: []
122
- rubyforge_project:
123
- rubygems_version: 2.5.2.3
155
+ rubygems_version: 3.0.6
124
156
  signing_key:
125
157
  specification_version: 4
126
158
  summary: Generate URLs for PCO apps in all environments
127
159
  test_files:
128
160
  - spec/.rubocop.yml
161
+ - spec/dummy/config/application.rb
162
+ - spec/dummy/config/boot.rb
129
163
  - spec/pco/url/church_center_spec.rb
130
164
  - spec/pco/url/encryption_spec.rb
131
165
  - spec/pco_url_spec.rb
166
+ - spec/requests/dev_domain_spec.rb
132
167
  - spec/spec_helper.rb