file_sv 0.1.4 → 0.1.5

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: 7207368213637f9e6b91164ea82a398553db87e01743a0a191d5328635e91b84
4
- data.tar.gz: 70f93031650207bc4df46cbee90ecea4da58c0b2ade43db384a76e034db58cf2
3
+ metadata.gz: bb4214e64bca77866967b848fb88c40eabe0a999d03e1ba88e47500662314b44
4
+ data.tar.gz: de2aa37269d3fc2d22904a1535a2d8e6308f011baae82fd352ee853def74f4d4
5
5
  SHA512:
6
- metadata.gz: 5402cb767636ad98243cab0adae1008a6e9683abdffc3d98a52de3987e9042eae1b703a3394d41213e8bd6591c59b17fef2afd8bc7facd4609d5ed8755a0666c
7
- data.tar.gz: d95d5443fccb5db6e05892c403667c77e216296edad1e5dd37688b4d15bf5e23f61c88175496f60ca98d06bbd68de3fc0c497120d58a93e7c64e71f8623f1bb9
6
+ metadata.gz: 72685470cd73d2f13d6e0d5894980d7603787204bcd5d454f339f81d105f96f0276b9d32026e3485e02abeb9001fcfe25648d64686fa804c0f57fc5a9df3ec0d
7
+ data.tar.gz: 786f78f51f7c02605b235c4306b972f67c33cd31c537a1af0ec41b363f5b8c340baee5648f40a3ae9006dc3561783d8dab6086d4412e4844da0515ff5d6175d8
data/exe/file_sv CHANGED
@@ -12,10 +12,12 @@ class Exe < Thor
12
12
  ServiceLoader.create_plan_for folder
13
13
  end
14
14
 
15
+ option :crt, default: nil, banner: "HTTPS CRT"
16
+ option :key, default: nil, banner: "HTTPS key"
15
17
  desc "serve folder", "Serve virtual service based on folder"
16
18
  def serve(folder)
17
19
  plan folder
18
- ServiceLoader.serve_plan
20
+ ServiceLoader.serve_plan options
19
21
  end
20
22
 
21
23
  desc "inspect folder", "Inspect details of what's served at folder"
@@ -7,6 +7,8 @@ class GlobalSettings
7
7
  @empty_body_status = 204
8
8
 
9
9
  @ignore_files = "{*.md,Dockerfile,.*}"
10
+
11
+ @https = false
10
12
  class << self
11
13
  # @return [String] Default REST method when none specified by filename
12
14
  attr_accessor :default_method
@@ -14,6 +16,12 @@ class GlobalSettings
14
16
  attr_accessor :empty_body_status
15
17
  # @return [Array] Expression representing files to ignore
16
18
  attr_accessor :ignore_files
19
+ # @return [Boolean] Whether to serve https using self signed certificate
20
+ attr_accessor :https
21
+ # @return [String] Path to HTTPS cert
22
+ attr_accessor :cert
23
+ # @return [String] Path to HTTPS key
24
+ attr_accessor :key
17
25
  end
18
26
  end
19
27
 
@@ -17,7 +17,7 @@ class PlannedEndpoint
17
17
  attr_accessor :status_code
18
18
 
19
19
  # @return [Array]
20
- HTTP_METHODS = %w[get post patch delete options].freeze
20
+ HTTP_METHODS = %w[get put post patch delete options].freeze
21
21
 
22
22
  # Represent a new endpoint
23
23
  def initialize(path)
@@ -19,9 +19,11 @@ module ServiceLoader
19
19
  end
20
20
 
21
21
  # Serve plan
22
- def serve_plan
22
+ def serve_plan(thor_options)
23
23
  require "sinatra"
24
24
  require_relative "virtual_server"
25
+ GlobalSettings.key = thor_options[:key] if thor_options[:key]
26
+ GlobalSettings.cert = thor_options[:crt] if thor_options[:crt]
25
27
  VirtualServer.run!
26
28
  end
27
29
  end
@@ -15,7 +15,7 @@ class SvPlan
15
15
  def create(folder)
16
16
  self.serving_folder = folder
17
17
  puts "Creating service based on files in #{folder}"
18
- file_list = Dir.glob("#{folder}/**/*.*") - Dir.glob(GlobalSettings.ignore_files)
18
+ file_list = Dir.glob("#{folder}/**/*.*") - Dir.glob("#{folder}/#{GlobalSettings.ignore_files}")
19
19
  file_list.each { |file| process_file file }
20
20
  end
21
21
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FileSv
4
- VERSION = "0.1.4"
4
+ VERSION = "0.1.5"
5
5
  end
@@ -3,6 +3,8 @@
3
3
  require "webrick"
4
4
  require "sinatra"
5
5
  require "docdsl"
6
+ require "webrick/https"
7
+ require "openssl"
6
8
 
7
9
  # Virtual server hosting virtual service defined through files
8
10
  class VirtualServer < Sinatra::Base
@@ -11,6 +13,41 @@ class VirtualServer < Sinatra::Base
11
13
 
12
14
  register Sinatra::DocDsl
13
15
 
16
+ if GlobalSettings.https
17
+ def self.own_certs(webrick_options)
18
+ puts "Using cert from #{GlobalSettings.cert}"
19
+ cert = OpenSSL::X509::Certificate.new File.read GlobalSettings.cert
20
+ pkey = OpenSSL::PKey::RSA.new File.read GlobalSettings.key
21
+ webrick_options[:SSLCertificate] = cert
22
+ webrick_options[:SSLPrivateKey] = pkey
23
+ webrick_options
24
+ end
25
+
26
+ def self.determine_certs(webrick_options)
27
+ if GlobalSettings.key && GlobalSettings.cert
28
+ webrick_options = own_certs webrick_options
29
+ else
30
+ puts "Using self signed cert"
31
+ webrick_options[:ServerName] = "localhost"
32
+ webrick_options[:SSLCertName] = "/CN=localhost"
33
+ end
34
+ webrick_options
35
+ end
36
+
37
+ # Run as https with self signed cert
38
+ def self.run!
39
+ logger = WEBrick::Log.new(nil, WEBrick::BasicLog::WARN)
40
+ webrick_options = { Port: port, SSLEnable: true, Logger: logger }
41
+ webrick_options = determine_certs webrick_options
42
+ # TODO: Following run does not work on Ruby 3
43
+ Rack::Handler::WEBrick.run(self, webrick_options) do |server|
44
+ %i[INT TERM].each { |sig| trap(sig) { server.stop } }
45
+ server.threaded = settings.threaded if server.respond_to? :threaded=
46
+ set :running, true
47
+ end
48
+ end
49
+ end
50
+
14
51
  page do
15
52
  title "File SV"
16
53
  header "Service virtualization created from #{Dir.pwd}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file_sv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Garratt
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
- rubygems_version: 3.2.3
127
+ rubygems_version: 3.1.4
128
128
  signing_key:
129
129
  specification_version: 4
130
130
  summary: REST service virtualisation through file structure.