pco-url 2.0.0 → 2.1.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 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