eucalypt 0.4.2 → 0.5.0
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/eucalypt.gemspec +1 -0
- data/lib/eucalypt/blog/namespaces/blog/cli/blog.rb +3 -3
- data/lib/eucalypt/core/helpers/maintenance.rb +19 -1
- data/lib/eucalypt/core/helpers/static.rb +15 -0
- data/lib/eucalypt/core/templates/eucalypt/app/controllers/application_controller.rb +4 -0
- data/lib/eucalypt/core/templates/eucalypt/app.rb +5 -13
- data/lib/eucalypt/core/templates/eucalypt/config/{asset_pipeline.rb → assets.rb} +0 -0
- data/lib/eucalypt/exceptions.rb +12 -0
- data/lib/eucalypt/load.rb +8 -0
- data/lib/eucalypt/version.rb +1 -1
- data/lib/eucalypt/whitelist.rb +70 -0
- data/lib/eucalypt.rb +6 -1
- metadata +21 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6fa3d16ea8245275cf420eb8ab1dc852e4c0da5f6416f53f09c6636372747806
|
4
|
+
data.tar.gz: f7e333eec6111947870dc43454517259d0ec06a42419d56b7c10022493c16e1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00b29405bdef2c7f706f5b906cabdbd6a74b663c1a911e0b2fd82ee06dfdd28f9d489ba33609116505e907097d29b4a846f135c911f3057de1bda2675491d387
|
7
|
+
data.tar.gz: 678144c567da5a0fa49019f8a9ca50f5921ae8ddca2693c2e9455a58060ed15a9847e031a4d62ffa479ed00f30ffc806489e79e100836eff6c9894a14e67c7f7
|
data/eucalypt.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_runtime_dependency "string-builder", "~> 2.3"
|
28
28
|
spec.add_runtime_dependency "activesupport", "~> 5.2"
|
29
29
|
spec.add_runtime_dependency "activerecord", "~> 5.2"
|
30
|
+
spec.add_runtime_dependency "bcrypt", "~> 3.1"
|
30
31
|
spec.add_runtime_dependency "front_matter_parser", "0.2.0"
|
31
32
|
spec.add_runtime_dependency "thor", "~> 0.20"
|
32
33
|
spec.add_runtime_dependency "sinatra", "~> 2.0", ">= 2.0.4"
|
@@ -32,14 +32,14 @@ module Eucalypt
|
|
32
32
|
generator.controller(route: options[:route])
|
33
33
|
generator.views
|
34
34
|
|
35
|
-
|
35
|
+
assets_file = File.join(directory, 'config', 'assets.rb')
|
36
36
|
|
37
|
-
File.open(
|
37
|
+
File.open(assets_file) do |f|
|
38
38
|
return if f.read.include? "assets.append_path Eucalypt.path 'app', 'assets', 'blog'"
|
39
39
|
end
|
40
40
|
|
41
41
|
insert_into_file(
|
42
|
-
|
42
|
+
assets_file,
|
43
43
|
" assets.append_path Eucalypt.path 'app', 'assets', 'blog'\n",
|
44
44
|
after: "set :assets, Sprockets::Environment.new\n"
|
45
45
|
)
|
@@ -1,4 +1,22 @@
|
|
1
1
|
require 'sinatra'
|
2
|
+
require 'bcrypt'
|
2
3
|
class ApplicationController < Sinatra::Base
|
3
|
-
|
4
|
+
if settings.methods(false).include?(:maintenance)
|
5
|
+
if settings.maintenance
|
6
|
+
define_singleton_method(:maintenance) do |&block|
|
7
|
+
get '*', &block
|
8
|
+
post '*', &block
|
9
|
+
put '*', &block
|
10
|
+
patch '*', &block
|
11
|
+
delete '*', &block
|
12
|
+
options '*', &block
|
13
|
+
link '*', &block
|
14
|
+
unlink '*', &block
|
15
|
+
end
|
16
|
+
else
|
17
|
+
define_singleton_method(:maintenance) {|&block| get "/#{BCrypt::Password.create(?1)}", &block}
|
18
|
+
end
|
19
|
+
else
|
20
|
+
define_singleton_method(:maintenance) {|&block| get "/#{BCrypt::Password.create(?1)}", &block}
|
21
|
+
end
|
4
22
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
class ApplicationController < Sinatra::Base
|
3
|
+
def static(uri, *args)
|
4
|
+
if env['HTTP_VERSION'] == 'HTTP/1.1' and env["REQUEST_METHOD"] != 'GET'
|
5
|
+
status 303
|
6
|
+
else
|
7
|
+
status 302
|
8
|
+
end
|
9
|
+
|
10
|
+
# According to RFC 2616 section 14.30, "the field value consists of a
|
11
|
+
# single absolute URI"
|
12
|
+
response['Location'] = uri(uri.to_s, settings.absolute_redirects?, settings.prefixed_redirects?)
|
13
|
+
halt(*args)
|
14
|
+
end
|
15
|
+
end
|
@@ -5,15 +5,9 @@ Bundler.require :default, settings.environment
|
|
5
5
|
Eucalypt.set_root __dir__
|
6
6
|
|
7
7
|
class ApplicationController < Sinatra::Base
|
8
|
-
# Set server
|
9
|
-
set :server, %w[thin webrick]
|
10
|
-
|
11
8
|
# Set core application file
|
12
9
|
set :app_file, __FILE__
|
13
10
|
|
14
|
-
# Set application root directory
|
15
|
-
set :root, Eucalypt.root
|
16
|
-
|
17
11
|
# Set public folder for static files
|
18
12
|
set :public_folder, Eucalypt.path('app', 'static')
|
19
13
|
|
@@ -27,16 +21,14 @@ class ApplicationController < Sinatra::Base
|
|
27
21
|
# Set default ERB template
|
28
22
|
set :erb, layout: :'layouts/main'
|
29
23
|
|
24
|
+
# Set IP whitelist
|
25
|
+
set :whitelist, Eucalypt::Whitelist.new(Eucalypt.path 'config', 'whitelist')
|
26
|
+
|
30
27
|
# Toggle maintenance mode
|
31
28
|
disable :maintenance
|
32
|
-
require 'eucalypt/core/helpers/maintenance'
|
33
29
|
|
34
30
|
# Set Hanami HTML and asset helpers
|
35
31
|
helpers Hanami::Helpers, Hanami::Assets::Helpers
|
36
|
-
end
|
37
32
|
|
38
|
-
|
39
|
-
|
40
|
-
Eucalypt.require 'app', 'helpers', '{application_helper.rb}'
|
41
|
-
Eucalypt.require 'app', 'controllers', 'application_controller.rb'
|
42
|
-
Eucalypt.require 'app', '{models,policies,helpers,controllers}', '*.rb'
|
33
|
+
require 'eucalypt/load'
|
34
|
+
end
|
File without changes
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Eucalypt
|
2
|
+
class NotWhitelistedError < Exception
|
3
|
+
def initialize(ip)
|
4
|
+
super "IP address #{ip} not whitelisted"
|
5
|
+
end
|
6
|
+
end
|
7
|
+
class InvalidSettingTypeError < Exception
|
8
|
+
def initialize(setting, actual, classes)
|
9
|
+
super "!\nInvalid type for setting :#{setting}, got:\n\t#{actual},\nmust be one of:\n\t#{classes}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Eucalypt.require 'config', '*.rb'
|
2
|
+
Eucalypt.require 'config', 'initializers', '*.rb'
|
3
|
+
|
4
|
+
require 'eucalypt/core/helpers/maintenance'
|
5
|
+
|
6
|
+
Eucalypt.require 'app', 'helpers', '{application_helper.rb}'
|
7
|
+
Eucalypt.require 'app', 'controllers', 'application_controller.rb'
|
8
|
+
Eucalypt.require 'app', '{models,policies,helpers,controllers}', '*.rb'
|
data/lib/eucalypt/version.rb
CHANGED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
require 'bcrypt'
|
3
|
+
require_relative 'exceptions'
|
4
|
+
module Eucalypt
|
5
|
+
class Whitelist
|
6
|
+
def initialize(file)
|
7
|
+
@file = file
|
8
|
+
File.new(file, "a").close
|
9
|
+
add '::1', '127.0.0.1', '0.0.0.0'
|
10
|
+
end
|
11
|
+
|
12
|
+
def add(*to_add)
|
13
|
+
to_add.flatten.each do |ip|
|
14
|
+
next if include? ip
|
15
|
+
File.open(@file, 'a+') do |f|
|
16
|
+
lines = File.readlines(@file)
|
17
|
+
if lines.empty? || lines.all? {|line| line == "\n"}
|
18
|
+
File.open(@file, 'w') do |f1|
|
19
|
+
f1.write "#{BCrypt::Password.create(ip)}\n"
|
20
|
+
end
|
21
|
+
else
|
22
|
+
prefix = f.read.last == "\n" ? '' : "\n"
|
23
|
+
f.puts prefix + BCrypt::Password.create(ip)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def remove(*to_remove)
|
30
|
+
whitelist = []
|
31
|
+
hashed = File.readlines(@file).select{|ip| /\$.*/.match ip}.map(&:strip)
|
32
|
+
|
33
|
+
hashed.each do |ip|
|
34
|
+
if to_remove.flatten.any? {|request| BCrypt::Password.new(ip) == request}
|
35
|
+
next
|
36
|
+
else
|
37
|
+
whitelist << ip unless whitelist.include?(ip)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
File.open(@file, 'w') {|f| f.write whitelist*("\n")<<"\n"}
|
42
|
+
end
|
43
|
+
|
44
|
+
def ips()
|
45
|
+
File.readlines(@file).map(&:strip).
|
46
|
+
select{|ip| /\$.*/.match ip}.
|
47
|
+
map {|ip| BCrypt::Password.new ip}
|
48
|
+
end
|
49
|
+
|
50
|
+
def include?(ip)
|
51
|
+
ips.any? {|whitelisted| whitelisted == ip}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class ApplicationController < Sinatra::Base
|
57
|
+
helpers do
|
58
|
+
def whitelisted?
|
59
|
+
case settings.whitelist
|
60
|
+
when Eucalypt::Whitelist then settings.whitelist.include?(request.ip)
|
61
|
+
when FalseClass then true
|
62
|
+
else raise Eucalypt::InvalidSettingTypeError.new(:whitelist, settings.whitelist.class, %w[FalseClass Eucalypt::Whitelist])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def ip_check()
|
67
|
+
raise Eucalypt::NotWhitelistedError.new(request.ip) unless whitelisted?
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/eucalypt.rb
CHANGED
@@ -12,5 +12,10 @@ require 'eucalypt/root'
|
|
12
12
|
require 'eucalypt/list'
|
13
13
|
require 'eucalypt/core/helpers/manifest'
|
14
14
|
require 'eucalypt/core/helpers/partial'
|
15
|
+
require 'eucalypt/whitelist'
|
16
|
+
require 'eucalypt/core/helpers/static'
|
15
17
|
|
16
|
-
Eucalypt::CLI.extend Eucalypt::List
|
18
|
+
Eucalypt::CLI.extend Eucalypt::List
|
19
|
+
|
20
|
+
class ApplicationController < Sinatra::Base; end
|
21
|
+
def app() ApplicationController end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eucalypt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edwin Onuonga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '5.2'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: bcrypt
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.1'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '3.1'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: front_matter_parser
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -237,6 +251,7 @@ files:
|
|
237
251
|
- lib/eucalypt/core/helpers/maintenance.rb
|
238
252
|
- lib/eucalypt/core/helpers/manifest.rb
|
239
253
|
- lib/eucalypt/core/helpers/partial.rb
|
254
|
+
- lib/eucalypt/core/helpers/static.rb
|
240
255
|
- lib/eucalypt/core/templates/Gemfile.tt
|
241
256
|
- lib/eucalypt/core/templates/eucalypt/.gitignore
|
242
257
|
- lib/eucalypt/core/templates/eucalypt/.travis.yml
|
@@ -257,7 +272,7 @@ files:
|
|
257
272
|
- lib/eucalypt/core/templates/eucalypt/app/views/layouts/main.erb
|
258
273
|
- lib/eucalypt/core/templates/eucalypt/app/views/partials/.empty_directory
|
259
274
|
- lib/eucalypt/core/templates/eucalypt/config.ru
|
260
|
-
- lib/eucalypt/core/templates/eucalypt/config/
|
275
|
+
- lib/eucalypt/core/templates/eucalypt/config/assets.rb
|
261
276
|
- lib/eucalypt/core/templates/eucalypt/config/database.yml
|
262
277
|
- lib/eucalypt/core/templates/eucalypt/config/initializers/.empty_directory
|
263
278
|
- lib/eucalypt/core/templates/eucalypt/config/logging.rb
|
@@ -273,6 +288,7 @@ files:
|
|
273
288
|
- lib/eucalypt/destroy/namespaces/destroy/cli/destroy-scaffold.rb
|
274
289
|
- lib/eucalypt/destroy/namespaces/destroy/cli/destroy.rb
|
275
290
|
- lib/eucalypt/errors.rb
|
291
|
+
- lib/eucalypt/exceptions.rb
|
276
292
|
- lib/eucalypt/generate/.gitkeep
|
277
293
|
- lib/eucalypt/generate/namespaces/generate-controller/cli/generate-controller.rb
|
278
294
|
- lib/eucalypt/generate/namespaces/generate-controller/generators/controller.rb
|
@@ -298,6 +314,7 @@ files:
|
|
298
314
|
- lib/eucalypt/helpers/migration.rb
|
299
315
|
- lib/eucalypt/helpers/numeric.rb
|
300
316
|
- lib/eucalypt/list.rb
|
317
|
+
- lib/eucalypt/load.rb
|
301
318
|
- lib/eucalypt/migration/helpers.rb
|
302
319
|
- lib/eucalypt/migration/migration_base.tt
|
303
320
|
- lib/eucalypt/migration/namespaces/migration-add/cli/add-column.rb
|
@@ -354,6 +371,7 @@ files:
|
|
354
371
|
- lib/eucalypt/security/namespaces/security/cli/security.rb
|
355
372
|
- lib/eucalypt/static.rb
|
356
373
|
- lib/eucalypt/version.rb
|
374
|
+
- lib/eucalypt/whitelist.rb
|
357
375
|
homepage: https://eucalypt.gitbook.io/eucalypt
|
358
376
|
licenses:
|
359
377
|
- MIT
|