gloo 3.5.0 → 3.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,6 +18,7 @@ module Gloo
18
18
  HTML_TYPE = 'text/html'.freeze
19
19
 
20
20
  attr_reader :code, :type, :data
21
+ attr_accessor :location
21
22
 
22
23
 
23
24
  # ---------------------------------------------------------------------
@@ -37,6 +38,7 @@ module Gloo
37
38
  @code = code
38
39
  @type = type
39
40
  @data = data
41
+ @location = nil
40
42
  end
41
43
 
42
44
 
@@ -71,6 +73,25 @@ module Gloo
71
73
  return Gloo::WebSvr::Response.new( engine, code, HTML_TYPE, data )
72
74
  end
73
75
 
76
+ #
77
+ # Helper to create a redirect response.
78
+ #
79
+ def self.redirect_response( engine, target )
80
+ code = Gloo::WebSvr::ResponseCode::FOUND
81
+ data = <<~TEXT
82
+ <head>
83
+ <html>
84
+ <body><a href="#{target}">target is here</a></body>
85
+ </html>
86
+ </head>
87
+ TEXT
88
+
89
+ response = Gloo::WebSvr::Response.new( engine, code, HTML_TYPE, data )
90
+ response.location = target
91
+
92
+ return response
93
+ end
94
+
74
95
 
75
96
  # ---------------------------------------------------------------------
76
97
  # Data Functions
@@ -97,6 +118,10 @@ module Gloo
97
118
 
98
119
  headers = { CONTENT_TYPE => @type }
99
120
 
121
+ if @location
122
+ headers[ 'Location' ] = @location
123
+ end
124
+
100
125
  session = @engine&.running_app&.obj&.session
101
126
  headers = session.add_session_for_response( headers ) if session
102
127
 
@@ -43,7 +43,7 @@ module Gloo
43
43
  TEMP_REDIRECT = 307.freeze
44
44
  CODE_307 = 'Temporary Redirect'.freeze
45
45
 
46
- PERM_REDIRECT = 307.freeze
46
+ PERM_REDIRECT = 308.freeze
47
47
  CODE_308 = 'Permanent Redirect'.freeze
48
48
 
49
49
  BAD_REQUEST = 400.freeze
@@ -41,6 +41,8 @@ module Gloo
41
41
  def page_for_route( path, method )
42
42
  @log.info "routing to #{path} for method #{method}"
43
43
  @method = method
44
+ route_params = nil
45
+ @id = nil
44
46
 
45
47
  detect_segments path
46
48
 
@@ -53,7 +55,7 @@ module Gloo
53
55
  if Gloo::WebSvr::Routing::ResourceRouter.is_implicit_create?( method, @route_segments.last )
54
56
  @route_segments << Gloo::WebSvr::Routing::ResourceRouter::POST_ROUTE
55
57
  page = find_route_segment( pages.children )
56
- return [ page, @id ] if page
58
+ return [ page, @id, route_params ] if page
57
59
 
58
60
  # We didn't find the page, so remove the last segment and try again
59
61
  # posting to the resource.
@@ -61,7 +63,13 @@ module Gloo
61
63
  end
62
64
 
63
65
  page = find_route_segment( pages.children )
64
- return [ page, @id ] if page
66
+
67
+ # Are there any remaining segments to be added as route parameters?
68
+ if @route_segments.count > 0
69
+ route_params = @route_segments
70
+ end
71
+
72
+ return [ page, @id, route_params ] if page
65
73
  end
66
74
 
67
75
  return nil
@@ -41,21 +41,25 @@ module Gloo
41
41
  # Add it to the session container.
42
42
  #
43
43
  def set_session_data_for_request( env )
44
- cookie_hash = Rack::Utils.parse_cookies( env )
45
-
46
- # Are we using sessions?
47
- if @server_obj.use_session?
48
- data = cookie_hash[ session_name ]
49
-
50
- if data
51
- data = decode_decrypt( data )
52
-
53
- data.each do |key, value|
54
- @server_obj.set_session_var( key, value )
44
+ begin
45
+ cookie_hash = Rack::Utils.parse_cookies( env )
46
+
47
+ # Are we using sessions?
48
+ if @server_obj.use_session?
49
+ data = cookie_hash[ session_name ]
50
+
51
+ if data
52
+ data = decode_decrypt( data )
53
+ return unless data
54
+
55
+ data.each do |key, value|
56
+ @server_obj.set_session_var( key, value )
57
+ end
55
58
  end
56
59
  end
60
+ rescue => e
61
+ @engine.log_exception e
57
62
  end
58
-
59
63
  end
60
64
 
61
65
 
@@ -110,6 +114,8 @@ module Gloo
110
114
  # Decode and decrypt the session data.
111
115
  #
112
116
  def decode_decrypt( data )
117
+ return nil unless data && key && iv
118
+
113
119
  data = Gloo::Objs::Cipher.decrypt( data, key, iv )
114
120
  return JSON.parse( data )
115
121
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gloo
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.0
4
+ version: 3.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Crane
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-10-18 00:00:00.000000000 Z
11
+ date: 2024-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -439,6 +439,11 @@ files:
439
439
  - lib/gloo/objs/cli/prompt.rb
440
440
  - lib/gloo/objs/cli/select.rb
441
441
  - lib/gloo/objs/ctrl/each.rb
442
+ - lib/gloo/objs/ctrl/each_child.rb
443
+ - lib/gloo/objs/ctrl/each_file.rb
444
+ - lib/gloo/objs/ctrl/each_line.rb
445
+ - lib/gloo/objs/ctrl/each_repo.rb
446
+ - lib/gloo/objs/ctrl/each_word.rb
442
447
  - lib/gloo/objs/ctrl/function.rb
443
448
  - lib/gloo/objs/ctrl/repeat.rb
444
449
  - lib/gloo/objs/data/markdown.rb
@@ -513,6 +518,7 @@ files:
513
518
  - lib/gloo/web_svr/embedded_renderer.rb
514
519
  - lib/gloo/web_svr/handler.rb
515
520
  - lib/gloo/web_svr/request.rb
521
+ - lib/gloo/web_svr/request_params.rb
516
522
  - lib/gloo/web_svr/response.rb
517
523
  - lib/gloo/web_svr/response_code.rb
518
524
  - lib/gloo/web_svr/routing/resource_router.rb
@@ -542,7 +548,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
542
548
  - !ruby/object:Gem::Version
543
549
  version: '0'
544
550
  requirements: []
545
- rubygems_version: 3.4.19
551
+ rubygems_version: 3.5.16
546
552
  signing_key:
547
553
  specification_version: 4
548
554
  summary: Gloo scripting language. A scripting language built on ruby.