pakyow-core 1.0.0.rc1 → 1.0.0.rc2

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: 6652c3a490f4119178a05144e2bb48e035748d5511453d30c645d8ef8ca2e648
4
- data.tar.gz: 6bcc4365fcb0dff053a82dfdd9284ed016c406a4106da652db8e878a57edbc17
3
+ metadata.gz: 80c64e0fbe8b4edcb3b10b4ac4cd640fbd4e4fb501108798f418cf0829289d50
4
+ data.tar.gz: ce5ebf0caebc91cbfd1c0c1463a9bcd9312fff947f1fef05aeec07df1833c486
5
5
  SHA512:
6
- metadata.gz: 89dfd288361faac6ccb96b94f48ba464208f609271b4e032279bb4450a42c45c4a6a946962627b0672b85fbd19f05bfba20cf3ec4d95eede722d2ffff40f871a
7
- data.tar.gz: bd861c99ce96392a1ed9f0870f53206f9a05e0842f8a6500746fac459dfb01ba18ee6690d6008ee633e0938ed3cac7e4a03d45c904591421f671ef9215ca08c1
6
+ metadata.gz: 9edb7dd91ee759baada1e3176644f9c7f409fce6f052f0dbe87dcdd7220ef946d22f90eb87add99a33ae5edfa0ed409e6104781fbf78fb8888b003a7c4fa27dc
7
+ data.tar.gz: bfe086b797fbf4501b7a549caffe0797949421e9a71eb04d243a7c44041ff05ef7f55c75db134ff9b25731f5fec174695db8dba4af8a56117b773d09c65c18d0
@@ -12,20 +12,28 @@ module Pakyow
12
12
 
13
13
  apply_extension do
14
14
  after "initialize" do
15
- session[:verifier_key] ||= Support::MessageVerifier.key
15
+ if app.config.session.enabled
16
+ session[:verifier_key] ||= Support::MessageVerifier.key
17
+ end
16
18
  end
17
19
  end
18
20
 
19
21
  def verifier
20
- unless instance_variable_defined?(:@verifier)
21
- @verifier = Support::MessageVerifier.new(verifier_key)
22
- end
22
+ if app.config.session.enabled
23
+ unless instance_variable_defined?(:@verifier)
24
+ @verifier = Support::MessageVerifier.new(verifier_key)
25
+ end
23
26
 
24
- @verifier
27
+ @verifier
28
+ else
29
+ nil
30
+ end
25
31
  end
26
32
 
27
33
  def verifier_key
28
- session[:verifier_key]
34
+ if app.config.session.enabled
35
+ session[:verifier_key]
36
+ end
29
37
  end
30
38
  end
31
39
  end
@@ -3,6 +3,7 @@
3
3
  require "base64"
4
4
 
5
5
  require "pakyow/support/indifferentize"
6
+ require "pakyow/support/message_verifier"
6
7
 
7
8
  require "pakyow/app/connection/session/abstract"
8
9
 
@@ -12,7 +13,7 @@ module Pakyow
12
13
  module Session
13
14
  class Cookie < Abstract
14
15
  def initialize(connection, options)
15
- if (cookie = connection.cookies[options.name]) && !cookie.is_a?(String)
16
+ if (cookie = connection.cookies[options.name]) && cookie.is_a?(Support::IndifferentHash)
16
17
  super(connection, options, Support::IndifferentHash.new(cookie[:value].to_h))
17
18
  connection.cookies[options.name][:value] = self
18
19
  else
@@ -35,14 +36,24 @@ module Pakyow
35
36
  end
36
37
 
37
38
  def to_s
38
- Base64.urlsafe_encode64(Marshal.dump(to_h))
39
+ Base64.urlsafe_encode64(
40
+ Pakyow.verifier.sign(
41
+ Marshal.dump(to_h)
42
+ )
43
+ )
39
44
  end
40
45
 
41
46
  private
42
47
 
43
48
  def deserialize(connection, options)
44
49
  if value = connection.cookies[options.name]
45
- Support::IndifferentHash.deep(Marshal.load(Base64.urlsafe_decode64(value)))
50
+ Support::IndifferentHash.deep(
51
+ Marshal.load(
52
+ Pakyow.verifier.verify(
53
+ Base64.urlsafe_decode64(value)
54
+ )
55
+ )
56
+ )
46
57
  else
47
58
  Support::IndifferentHash.new
48
59
  end
@@ -58,7 +58,7 @@ module Pakyow
58
58
  end
59
59
 
60
60
  setting :http_only do
61
- Pakyow.config.cookies.http_only
61
+ true
62
62
  end
63
63
 
64
64
  setting :same_site do
@@ -25,8 +25,10 @@ module Pakyow
25
25
  {}
26
26
  end
27
27
  end
28
- rescue LoadError #=> error
29
- # TODO: raise an unknown session object error...
28
+ rescue LoadError => error
29
+ # TODO: Improve this with a specific "session object missing" error.
30
+ #
31
+ raise error
30
32
  end
31
33
  end
32
34
  end
data/lib/pakyow/cli.rb CHANGED
@@ -92,7 +92,13 @@ module Pakyow
92
92
  end
93
93
  end
94
94
 
95
- @options[:env] ||= ENV["APP_ENV"] || ENV["RACK_ENV"] || "development"
95
+ case @command
96
+ when "prototype"
97
+ @options.delete(:env)
98
+ else
99
+ @options[:env] ||= ENV["APP_ENV"] || ENV["RACK_ENV"] || "development"
100
+ end
101
+
96
102
  ENV["APP_ENV"] = ENV["RACK_ENV"] = @options[:env]
97
103
  end
98
104
 
@@ -115,7 +121,16 @@ module Pakyow
115
121
  end
116
122
 
117
123
  def setup_environment
118
- Pakyow.setup(env: @options[:env])
124
+ Pakyow.setup(env: environment_to_setup)
125
+ end
126
+
127
+ def environment_to_setup
128
+ case @command
129
+ when "prototype"
130
+ :prototype
131
+ else
132
+ @options[:env]
133
+ end
119
134
  end
120
135
 
121
136
  def load_tasks
@@ -16,6 +16,8 @@ module Pakyow
16
16
  setting :freeze_on_boot, true
17
17
  setting :exit_on_boot_failure, true
18
18
  setting :timezone, :utc
19
+ setting :secrets, ["pakyow"]
20
+
19
21
  setting :connection_class do
20
22
  require "pakyow/connection"
21
23
  Connection
@@ -41,6 +43,10 @@ module Pakyow
41
43
  setting :exit_on_boot_failure, false
42
44
  end
43
45
 
46
+ defaults :production do
47
+ setting :secrets, [ENV["SECRET"].to_s.strip]
48
+ end
49
+
44
50
  configurable :server do
45
51
  setting :host, "localhost"
46
52
  setting :port, 3000
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/support/extension"
4
+ require "pakyow/support/message_verifier"
5
+
6
+ module Pakyow
7
+ module Environment
8
+ module Behavior
9
+ module Verifier
10
+ extend Support::Extension
11
+
12
+ class_methods do
13
+ attr_reader :verifier
14
+ end
15
+
16
+ apply_extension do
17
+ before :boot do
18
+ config.secrets.reject! { |secret|
19
+ secret.nil? || secret.empty?
20
+ }
21
+
22
+ if config.secrets.any?
23
+ @verifier = Support::MessageVerifier.new(config.secrets[0])
24
+ else
25
+ raise "Pakyow will not boot without a secret configured in `Pakyow.config.secrets`"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -25,6 +25,7 @@ require "pakyow/environment/behavior/timezone"
25
25
  require "pakyow/environment/behavior/running"
26
26
  require "pakyow/environment/behavior/watching"
27
27
  require "pakyow/environment/behavior/restarting"
28
+ require "pakyow/environment/behavior/verifier"
28
29
 
29
30
  require "pakyow/environment/actions/dispatch"
30
31
  require "pakyow/environment/actions/input_parser"
@@ -112,6 +113,7 @@ module Pakyow
112
113
  include Environment::Behavior::Running
113
114
  include Environment::Behavior::Watching
114
115
  include Environment::Behavior::Restarting
116
+ include Environment::Behavior::Verifier
115
117
 
116
118
  include Support::Pipeline
117
119
  action Actions::Logger
@@ -9,15 +9,11 @@ gem "pakyow", github: "pakyow/pakyow", require: "pakyow/all"
9
9
  gem "pakyow", "~> <%= Pakyow::VERSION %>", require: "pakyow/all"
10
10
  <%- end -%>
11
11
 
12
- # Use the puma application server.
13
- #
14
- gem "puma"
15
-
16
12
  # Easily manage environment variables.
17
13
  #
18
14
  gem "dotenv"
19
15
 
20
- group :development do
16
+ group :development, :prototype do
21
17
  # Speed up project boot time.
22
18
  #
23
19
  gem "bootsnap", require: false
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html>
2
- <html>
2
+ <html ui="navigable">
3
3
  <head>
4
4
  <title>
5
5
  <%= @human_project_name %>
@@ -26,7 +26,9 @@ module Pakyow
26
26
  prefix: @plugin.class.mount_path
27
27
  },
28
28
  processor: Presenter::ProcessorCaller.new(
29
- @plugin.parent.state(:processor)
29
+ @plugin.parent.state(:processor).map { |processor|
30
+ processor.new(@plugin.parent)
31
+ }
30
32
  )
31
33
  ).tap do |plugin_templates|
32
34
  if app_templates = @plugin.parent.state(:templates).find { |templates| templates.name == :default }
data/lib/pakyow/task.rb CHANGED
@@ -293,6 +293,8 @@ module Pakyow
293
293
  arguments: @__arguments,
294
294
  options: CLI::GLOBAL_OPTIONS.select { |key, _|
295
295
  key == :env || args[1].to_a.include?(key)
296
+ }.reject { |key, _|
297
+ key == :env && args[0] == :prototype
296
298
  }.merge(@__options),
297
299
  flags: @__flags,
298
300
  task_args: args,
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- desc "Boot the environment"
3
+ desc "Boot the project"
4
4
  option :host, "The host the server runs on (default: #{Pakyow.config.server.host})"
5
5
  option :port, "The port the server runs on (default: #{Pakyow.config.server.port})"
6
6
  flag :standalone, "Disable automatic reloading of changes"
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc "Boot the prototype"
4
+ option :host, "The host the server runs on (default: #{Pakyow.config.server.host})"
5
+ option :port, "The port the server runs on (default: #{Pakyow.config.server.port})"
6
+ task :prototype, [:host, :port] do |_, args|
7
+ if host = args[:host]
8
+ Pakyow.config.server.host = host
9
+ end
10
+
11
+ if port = args[:port]
12
+ Pakyow.config.server.port = port
13
+ end
14
+
15
+ if args[:standalone]
16
+ Pakyow.config.server.proxy = false
17
+ end
18
+
19
+ Pakyow.run
20
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pakyow-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc1
4
+ version: 1.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Powell
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: commands
11
11
  cert_chain: []
12
- date: 2019-07-03 00:00:00.000000000 Z
12
+ date: 2019-07-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pakyow-support
@@ -17,42 +17,42 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 1.0.0.rc1
20
+ version: 1.0.0.rc2
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 1.0.0.rc1
27
+ version: 1.0.0.rc2
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: async
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '1.17'
34
+ version: '1.19'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '1.17'
41
+ version: '1.19'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: async-http
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 0.43.1
48
+ version: 0.46.3
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 0.43.1
55
+ version: 0.46.3
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: async-io
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -87,28 +87,28 @@ dependencies:
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '1.3'
90
+ version: '1.4'
91
91
  type: :runtime
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: '1.3'
97
+ version: '1.4'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: dry-types
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: '1.0'
104
+ version: '1.1'
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: '1.0'
111
+ version: '1.1'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: filewatcher
114
114
  requirement: !ruby/object:Gem::Requirement
@@ -247,6 +247,7 @@ files:
247
247
  - lib/pakyow/environment/behavior/running.rb
248
248
  - lib/pakyow/environment/behavior/silencing.rb
249
249
  - lib/pakyow/environment/behavior/timezone.rb
250
+ - lib/pakyow/environment/behavior/verifier.rb
250
251
  - lib/pakyow/environment/behavior/watching.rb
251
252
  - lib/pakyow/error.rb
252
253
  - lib/pakyow/errors.rb
@@ -306,6 +307,7 @@ files:
306
307
  - lib/pakyow/tasks/info/endpoints.rake
307
308
  - lib/pakyow/tasks/irb.rake
308
309
  - lib/pakyow/tasks/prelaunch.rake
310
+ - lib/pakyow/tasks/prototype.rake
309
311
  - lib/pakyow/types.rb
310
312
  - lib/pakyow/validations.rb
311
313
  - lib/pakyow/validations/acceptance.rb
@@ -334,8 +336,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
336
  - !ruby/object:Gem::Version
335
337
  version: 1.3.1
336
338
  requirements: []
337
- rubyforge_project:
338
- rubygems_version: 2.7.6
339
+ rubygems_version: 3.0.3
339
340
  signing_key:
340
341
  specification_version: 4
341
342
  summary: Pakyow Core