From 447f51570ae069553cbdff3793733019cbd5e844 Mon Sep 17 00:00:00 2001 From: Yessiest Date: Sun, 15 Oct 2023 03:30:33 +0400 Subject: [PATCH] Added directory bouncing, status code handlers and pipelining --- examples/dirbounce.ru | 18 ++++++++ examples/errorpages.ru | 27 +++++++++++ examples/uploader/files/.bash_logout | 3 ++ examples/uploader/files/.bash_profile | 5 +++ examples/uploader/files/.bashrc | 10 +++++ examples/uploader/files/lab5.zip | Bin 0 -> 106918 bytes examples/uploader/form.ru | 27 +++++++++++ examples/uploader/index.rhtml | 31 +++++++++++++ examples/uploader/lib | 1 + examples/uploader/readme.txt | 1 + lib/landline/dsl/methods_path.rb | 20 +++++++++ lib/landline/path.rb | 62 +++++++++++++++++--------- lib/landline/probe/handler.rb | 4 +- lib/landline/template.rb | 2 + 14 files changed, 189 insertions(+), 22 deletions(-) create mode 100644 examples/dirbounce.ru create mode 100644 examples/errorpages.ru create mode 100644 examples/uploader/files/.bash_logout create mode 100644 examples/uploader/files/.bash_profile create mode 100644 examples/uploader/files/.bashrc create mode 100644 examples/uploader/files/lab5.zip create mode 100644 examples/uploader/form.ru create mode 100644 examples/uploader/index.rhtml create mode 120000 examples/uploader/lib create mode 100644 examples/uploader/readme.txt diff --git a/examples/dirbounce.ru b/examples/dirbounce.ru new file mode 100644 index 0000000..4e99a70 --- /dev/null +++ b/examples/dirbounce.ru @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/lib") +require 'landline' + +app = Landline::Server.new do + path "/hello" do + bounce + get "/world" do + "Hello world!" + end + end + get "/hello/user" do + "Hello user!" + end +end + +run app diff --git a/examples/errorpages.ru b/examples/errorpages.ru new file mode 100644 index 0000000..06d6fd9 --- /dev/null +++ b/examples/errorpages.ru @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/lib") +require 'landline' + +app = Landline::Server.new do + get "/hello" do + header "content-type", "text/plain" + "Hello World!" + end + get "/error" do + raise StandardError, "I raised an error! (and that's very sad)" + end + handle do |status, backtrace: nil| + page = ([Landline::Util::HTTP_STATUS[status]] + + (backtrace || [""])).join("\n") + [ + { + "content-length": page.bytesize, + "content-type": "text/plain" + }, + page + ] + end +end + +run app diff --git a/examples/uploader/files/.bash_logout b/examples/uploader/files/.bash_logout new file mode 100644 index 0000000..0e4e4f1 --- /dev/null +++ b/examples/uploader/files/.bash_logout @@ -0,0 +1,3 @@ +# +# ~/.bash_logout +# diff --git a/examples/uploader/files/.bash_profile b/examples/uploader/files/.bash_profile new file mode 100644 index 0000000..5545f00 --- /dev/null +++ b/examples/uploader/files/.bash_profile @@ -0,0 +1,5 @@ +# +# ~/.bash_profile +# + +[[ -f ~/.bashrc ]] && . ~/.bashrc diff --git a/examples/uploader/files/.bashrc b/examples/uploader/files/.bashrc new file mode 100644 index 0000000..dfa913b --- /dev/null +++ b/examples/uploader/files/.bashrc @@ -0,0 +1,10 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +# alias ls='ls --color=auto' +# alias grep='grep --color=auto' +# PS1='[\u@\h \W]\$ ' diff --git a/examples/uploader/files/lab5.zip b/examples/uploader/files/lab5.zip new file mode 100644 index 0000000000000000000000000000000000000000..80a731eb6a045fa84731b6bce15969988f779b22 GIT binary patch literal 106918 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⁡{@1lOPZ8eaIiPFFn{X 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 M3IGT#{I>x97be&To&W#< literal 0 HcmV?d00001 diff --git a/examples/uploader/form.ru b/examples/uploader/form.ru new file mode 100644 index 0000000..ac494d4 --- /dev/null +++ b/examples/uploader/form.ru @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/lib") +require 'landline' + +app = Landline::Server.new do + root ENV["PWD"] + index ["index.html"] + post "/" do + formdata = form if form? + files = {} + if formdata + formdata["form_files"].each do |file| + filename = file.filename.split("/").last + `mv #{file.tempfile.path} $PWD/files/#{filename}` + files[file.filename] = "#{filename}" + end + end + erubi(file("index.rhtml"), { formdata: files }).run + end + serve "/files/*" + get "/" do + erubi(file("index.rhtml")).run + end +end + +run app diff --git a/examples/uploader/index.rhtml b/examples/uploader/index.rhtml new file mode 100644 index 0000000..6abb370 --- /dev/null +++ b/examples/uploader/index.rhtml @@ -0,0 +1,31 @@ + + + + Form upload test + + + +

File uploader

+
+

Add files here:

+

+ + + +
+ <% if (defined? formdata) and formdata %> +
+
    + <% formdata.each do |key, part| %> +
  • <%= key %>: <%= part %>
  • + <% end %> +
+ <% end %> + + + + diff --git a/examples/uploader/lib b/examples/uploader/lib new file mode 120000 index 0000000..58677dd --- /dev/null +++ b/examples/uploader/lib @@ -0,0 +1 @@ +../../lib \ No newline at end of file diff --git a/examples/uploader/readme.txt b/examples/uploader/readme.txt new file mode 100644 index 0000000..e773bf8 --- /dev/null +++ b/examples/uploader/readme.txt @@ -0,0 +1 @@ +Example of handling forms in Landline diff --git a/lib/landline/dsl/methods_path.rb b/lib/landline/dsl/methods_path.rb index 46ca7d0..04c9449 100644 --- a/lib/landline/dsl/methods_path.rb +++ b/lib/landline/dsl/methods_path.rb @@ -5,6 +5,26 @@ module Landline module DSL # Common path methods module PathMethods + # Bounce request if no handler found instead of issuing 404 + def bounce + @origin.bounce = true + end + + # Create a status code handler on path. + # Recursively applies to all paths unless overridden. + # @param [Integer, nil] Specify a status code to handle + def handle(code = "default", &block) + @origin.properties["handle.#{code}"] = block + end + + # Insert a pass-through pipeline into request processing + # (i.e. for error handling purposes). + # Passed block should yield request (and return yielded data back). + # @param block [#call] block that yields request + def pipeline(&block) + @origin.pipeline = block + end + # Set path index # @param index [Array,String] def index(index) diff --git a/lib/landline/path.rb b/lib/landline/path.rb index 77358bd..bc2a9af 100644 --- a/lib/landline/path.rb +++ b/lib/landline/path.rb @@ -5,12 +5,16 @@ require_relative 'node' require_relative 'dsl/constructors_path' require_relative 'dsl/methods_path' require_relative 'dsl/methods_common' +require_relative 'dsl/methods_probe' +require_relative 'dsl/constructors_probe' require_relative 'util/lookup' module Landline # Execution context for filters and preprocessors. class ProcessorContext include Landline::DSL::CommonMethods + include Landline::DSL::ProbeMethods + include Landline::DSL::ProbeConstructors def initialize(path) @origin = path @@ -54,21 +58,11 @@ module Landline # @return [Boolean] true if further navigation will be done # @raise [UncaughtThrowError] by default throws :response if no matches found. def process(request) - return false unless run_filters(request) - - run_preprocessors(request) - enqueue_postprocessors(request) - @children.each do |x| - if (value = x.go(request)) - return value - end + if @pipeline + @pipeline.call(request) { |inner_req| process_wrapped(inner_req) } + else + process_wrapped(request) end - value = index(request) - return value if value - - _die(404) - rescue StandardError => e - _die(500, backtrace: [e.to_s] + e.backtrace) end # Add a preprocessor to the path. @@ -95,7 +89,9 @@ module Landline @filters.append(block) end - attr_reader :children, :properties + attr_reader :children, :properties, :request + + attr_accessor :bounce, :pipeline private @@ -123,6 +119,31 @@ module Landline request.postprocessors.append(*@postprocessors) end + # Method callback on successful request navigation. + # Finds the next appropriate path to go to. + # (inner pipeline-wrapped handler) + # @return [Boolean] true if further navigation will be done + # @raise [UncaughtThrowError] by default throws :response if no matches found. + def process_wrapped(request) + @request = request + return false unless run_filters(request) + + run_preprocessors(request) + enqueue_postprocessors(request) + @children.each do |x| + value = x.go(request) + return value if value + end + value = index(request) + return value if value + + @bounce ? false : _die(404) + rescue StandardError => e + _die(500, backtrace: [e.to_s] + e.backtrace) + ensure + @request = nil + end + # Try to perform indexing on the path if possible # @param request [Landline::Request] # @return [Boolean] true if indexing succeeded @@ -146,11 +167,12 @@ module Landline # @raise [UncaughtThrowError] throws :finish to stop processing def _die(errorcode, backtrace: nil) throw :finish, [errorcode].append( - *(@properties["handle.#{errorcode}"] or - @properties["handle.default"]).call( - errorcode, - backtrace: backtrace - ) + *@proccontext.instance_exec( + errorcode, + backtrace: backtrace, + &(@properties["handle.#{errorcode}"] or + @properties["handle.default"]) + ) ) end end diff --git a/lib/landline/probe/handler.rb b/lib/landline/probe/handler.rb index 660c0cb..b51b945 100644 --- a/lib/landline/probe/handler.rb +++ b/lib/landline/probe/handler.rb @@ -15,10 +15,10 @@ module Landline @context = Landline::ProbeContext.new(self) @response = nil end - + attr_accessor :response attr_reader :request - + # Method callback on successful request navigation. # Runs block supplied with object initialization. # Request's #splat and #param are passed to block. diff --git a/lib/landline/template.rb b/lib/landline/template.rb index 625311c..90a0b2b 100644 --- a/lib/landline/template.rb +++ b/lib/landline/template.rb @@ -88,6 +88,8 @@ module Landline # Import a template from within current template def import(filepath) + filepath = filepath.is_a? File ? filepath : File.open(filepath) + # @sg-ignore newtemp = self.class.new(filepath, {}, parent: @parent) newtemp.binding = @binding newtemp