tina4ruby 3.10.21 → 3.10.24
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 +4 -4
- data/lib/tina4/frond.rb +30 -15
- data/lib/tina4/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6bbf81019e88de5f456938818de88c5f8219dcb691d647c26d504f6aacdf229a
|
|
4
|
+
data.tar.gz: a0b70c415d26e8727cfec8337fc957a58cb4d4895565bc0c1922ef9ebd2383c8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a10cdebeca708e63aebaa1f75e8d18e1b77429560f42a0bedcec9247792c9ce7451d93a233f4b6c1bdd8865e7ce4bae3440ae33cded8974e8dbcf4cfac060e93
|
|
7
|
+
data.tar.gz: f613505809da1d5d5868e52a368f09a82e7f24905f5f51011b6747d4b45877e4151d5830f45a943764ba84f42d5b76aa40a47284038dafb8d40406164d748570
|
data/lib/tina4/frond.rb
CHANGED
|
@@ -13,6 +13,7 @@ require "cgi"
|
|
|
13
13
|
require "uri"
|
|
14
14
|
require "date"
|
|
15
15
|
require "time"
|
|
16
|
+
require "securerandom"
|
|
16
17
|
|
|
17
18
|
module Tina4
|
|
18
19
|
# Marker class for strings that should not be auto-escaped in Frond.
|
|
@@ -196,20 +197,14 @@ module Tina4
|
|
|
196
197
|
raise "Template not found: #{path}" unless File.exist?(path)
|
|
197
198
|
|
|
198
199
|
debug_mode = ENV.fetch("TINA4_DEBUG", "").downcase == "true"
|
|
199
|
-
cached = @compiled[template]
|
|
200
200
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
if cached[1] == mtime
|
|
206
|
-
return execute_cached(cached[0], context)
|
|
207
|
-
end
|
|
208
|
-
else
|
|
209
|
-
# Production: skip mtime check, cache is permanent
|
|
210
|
-
return execute_cached(cached[0], context)
|
|
211
|
-
end
|
|
201
|
+
unless debug_mode
|
|
202
|
+
# Production: use permanent cache (no filesystem checks)
|
|
203
|
+
cached = @compiled[template]
|
|
204
|
+
return execute_cached(cached[0], context) if cached
|
|
212
205
|
end
|
|
206
|
+
# Dev mode: skip cache entirely — always re-read and re-tokenize
|
|
207
|
+
# so edits to partials and extended base templates are detected
|
|
213
208
|
|
|
214
209
|
# Cache miss — load, tokenize, cache
|
|
215
210
|
source = File.read(path, encoding: "utf-8")
|
|
@@ -1839,6 +1834,8 @@ module Tina4
|
|
|
1839
1834
|
|
|
1840
1835
|
def register_builtin_globals
|
|
1841
1836
|
@globals["form_token"] = ->(descriptor = "") { Frond.generate_form_token(descriptor.to_s) }
|
|
1837
|
+
@globals["formTokenValue"] = ->(descriptor = "") { Frond.generate_form_token_value(descriptor.to_s) }
|
|
1838
|
+
@globals["form_token_value"] = ->(descriptor = "") { Frond.generate_form_token_value(descriptor.to_s) }
|
|
1842
1839
|
end
|
|
1843
1840
|
|
|
1844
1841
|
# Generate a JWT form token and return a hidden input element.
|
|
@@ -1857,11 +1854,19 @@ module Tina4
|
|
|
1857
1854
|
attr_accessor :form_token_session_id
|
|
1858
1855
|
end
|
|
1859
1856
|
|
|
1860
|
-
|
|
1857
|
+
# Generate a raw JWT form token string.
|
|
1858
|
+
#
|
|
1859
|
+
# @param descriptor [String] Optional string to enrich the token payload.
|
|
1860
|
+
# - Empty: payload is {"type" => "form"}
|
|
1861
|
+
# - "admin_panel": payload is {"type" => "form", "context" => "admin_panel"}
|
|
1862
|
+
# - "checkout|order_123": payload is {"type" => "form", "context" => "checkout", "ref" => "order_123"}
|
|
1863
|
+
#
|
|
1864
|
+
# @return [String] The raw JWT token string.
|
|
1865
|
+
def self.generate_form_jwt(descriptor = "")
|
|
1861
1866
|
require_relative "log"
|
|
1862
1867
|
require_relative "auth"
|
|
1863
1868
|
|
|
1864
|
-
payload = { "type" => "form" }
|
|
1869
|
+
payload = { "type" => "form", "nonce" => SecureRandom.hex(8) }
|
|
1865
1870
|
if descriptor && !descriptor.empty?
|
|
1866
1871
|
if descriptor.include?("|")
|
|
1867
1872
|
parts = descriptor.split("|", 2)
|
|
@@ -1878,8 +1883,18 @@ module Tina4
|
|
|
1878
1883
|
|
|
1879
1884
|
ttl_minutes = (ENV["TINA4_TOKEN_LIMIT"] || "60").to_i
|
|
1880
1885
|
expires_in = ttl_minutes * 60
|
|
1881
|
-
|
|
1886
|
+
Tina4::Auth.create_token(payload, expires_in: expires_in)
|
|
1887
|
+
end
|
|
1888
|
+
|
|
1889
|
+
def self.generate_form_token(descriptor = "")
|
|
1890
|
+
token = generate_form_jwt(descriptor)
|
|
1882
1891
|
Tina4::SafeString.new(%(<input type="hidden" name="formToken" value="#{CGI.escapeHTML(token)}">))
|
|
1883
1892
|
end
|
|
1893
|
+
|
|
1894
|
+
# Return just the raw JWT form token string (no <input> wrapper).
|
|
1895
|
+
# Registered as both formTokenValue and form_token_value template globals.
|
|
1896
|
+
def self.generate_form_token_value(descriptor = "")
|
|
1897
|
+
Tina4::SafeString.new(generate_form_jwt(descriptor))
|
|
1898
|
+
end
|
|
1884
1899
|
end
|
|
1885
1900
|
end
|
data/lib/tina4/version.rb
CHANGED