diode 1.3.1 → 1.3.2

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
2
  SHA256:
3
- metadata.gz: b48c0ef0d062a22a1a859065f2320cda02d13c861cc2dc96d5a0f6a44d070a56
4
- data.tar.gz: 6dba85d23da905543b0f2518c6a18ff7c31dce8741c6ca6126d92bc52719a239
3
+ metadata.gz: ea33eabe22d4cdc90c861901276c3c1f9f397d631c3aba3b9a541f1f87390189
4
+ data.tar.gz: 3d5616c2b0a342f229b49a3e7c27c77c4c255484c21876f2cdfadf7cbe7a4ffa
5
5
  SHA512:
6
- metadata.gz: '09facf23abbab77b23158dae5b70d66c4d3c58c2c67d82511f9fb10c4cf1e123836d5d767e5a3152e813b7ae75d0388fd63b8f0ab9b4a4317c78d0acfa8729ed'
7
- data.tar.gz: 70ebbbdea54c6dd15dcfe8af2234f1dd5a3364f6098c40be7ad33fa5ead7d31517557a07246acb65538dbaf8aa0bdf4680474e9078394611a51510855c4ea73c
6
+ metadata.gz: 8ccade8f6c924359da6ebe142220351b5462015bfee482399cd7e52fb09ef2349df610c6d2e149d9128a4f76af0fc56c8c14b1fcc1dc44337d456379c333b903
7
+ data.tar.gz: 31869f03329647cac6f4a5d7746d1801683105b538b5c98cfdb3bad0643153b39044f7611de323b84061e503b4f4ee2baacd959100821d5086fd181da318cec9
data/lib/diode/request.rb CHANGED
@@ -14,6 +14,9 @@ class RequestError < StandardError
14
14
  end
15
15
 
16
16
  class SecurityError < StandardError
17
+ def code()
18
+ 403
19
+ end
17
20
  end
18
21
 
19
22
  class Request
data/lib/diode/static.rb CHANGED
@@ -4,17 +4,26 @@ module Diode
4
4
 
5
5
  class Static
6
6
 
7
- def initialize(docRoot=".")
7
+ def initialize(docRoot=".", guardian=nil)
8
8
  @root = Pathname.new(Pathname.new(docRoot).cleanpath()).realpath()
9
9
  raise("Cannot serve static files from path #{@root}") unless @root.directory? and @root.readable?
10
+ @guardian = guardian
10
11
  end
11
12
 
12
13
  def serve(request)
13
- return Diode::Response.new(405, "Method not allowed", {"Content-type" => "text/plain"}) unless request.method == "GET"
14
+ return Diode::Response.standard(405) unless request.method == "GET"
15
+ unless guardian.nil?
16
+ securityResponse = guardian.call(request)
17
+ unless securityResponse.nil? or securityResponse == 200
18
+ return securityResponse if securityResponse.is_a?(Diode::Response)
19
+ return Diode::Response.standard(securityResponse) if [400,403,404,405].include?(securityResponse)
20
+ raise("result of guardian block must be a Diode::Response or one of 400,403,404,405 to deny or else nil to allow") # guardian should log details
21
+ end
22
+ end
14
23
  path = Pathname.new(request.path).cleanpath().to_s()
15
24
  filepath = Pathname.new(File.expand_path(@root.to_s() + path))
16
25
  filepath = Pathname.new(File.expand_path("index.html", filepath)) if filepath.directory?
17
- return Diode::Response.new(404, "<html><body>File not found</body></html>", {"Content-type" => "text/html"}) unless filepath.exist?
26
+ return Diode::Response.standard(404) unless filepath.exist?
18
27
  mimetype = @@mimetypes[filepath.extname[1..-1]] || "application/octet-stream"
19
28
  return Diode::Response.new(200, IO.read(filepath.to_s).b, {"Content-Type"=>mimetype, "Cache-Control" => "no-cache"})
20
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diode
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kjell Koda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-19 00:00:00.000000000 Z
11
+ date: 2024-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json