file_sv 0.1.4 → 0.1.5

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: 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.