proxes 0.3.1 → 0.3.2
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/Gemfile.dev.lock +16 -19
- data/config.ru +5 -9
- data/lib/proxes/controllers/audit_logs.rb +1 -1
- data/lib/proxes/controllers/permissions.rb +1 -1
- data/lib/proxes/controllers/roles.rb +1 -1
- data/lib/proxes/controllers/users.rb +1 -1
- data/lib/proxes/forwarder.rb +40 -0
- data/lib/proxes/omniauth.rb +4 -0
- data/lib/proxes/policies/request/search_policy.rb +1 -1
- data/lib/proxes/policies/request/stats_policy.rb +1 -1
- data/lib/proxes/policies/request_policy.rb +2 -2
- data/lib/proxes/proxes.rb +0 -7
- data/lib/proxes/security.rb +0 -1
- data/lib/proxes/seed.rb +1 -1
- data/lib/proxes/version.rb +1 -1
- data/proxes.gemspec +0 -2
- data/public/js/bundle.js +1 -1
- data/views/layout.haml +1 -1
- metadata +4 -30
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d8ddd26a93e1cfb0468e7579d07f31b65763ba61
|
|
4
|
+
data.tar.gz: f7e3267ea6534ae304ece5be57826bb6ae3fa446
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b833d8d7dc5aae7b024f5ba3a78671e38cc7f60e1d0101d4d447d20bddeaebbd6b378619f6320d6908d7eb6c9ec825a81ae46aed687296d4426bc836bf34582a
|
|
7
|
+
data.tar.gz: e28229e229241ffe38770b4526d0feba9a9e7581520273d82acb6f9ffb0e770d96c3e73a4f00da26de60de0964ff99716931ddc256f27bb9f70df12098db44c3
|
data/Gemfile.dev.lock
CHANGED
|
@@ -9,7 +9,7 @@ GIT
|
|
|
9
9
|
PATH
|
|
10
10
|
remote: .
|
|
11
11
|
specs:
|
|
12
|
-
proxes (0.2
|
|
12
|
+
proxes (0.3.2)
|
|
13
13
|
bcrypt
|
|
14
14
|
elasticsearch
|
|
15
15
|
haml
|
|
@@ -18,7 +18,7 @@ PATH
|
|
|
18
18
|
omniauth-identity
|
|
19
19
|
pundit
|
|
20
20
|
rack-contrib
|
|
21
|
-
|
|
21
|
+
rake (~> 10.0)
|
|
22
22
|
sequel
|
|
23
23
|
sinatra
|
|
24
24
|
sinatra-contrib
|
|
@@ -44,12 +44,12 @@ GEM
|
|
|
44
44
|
database_cleaner (1.5.3)
|
|
45
45
|
diff-lcs (1.2.5)
|
|
46
46
|
docile (1.1.5)
|
|
47
|
-
elasticsearch (5.0.
|
|
48
|
-
elasticsearch-api (= 5.0.
|
|
49
|
-
elasticsearch-transport (= 5.0.
|
|
50
|
-
elasticsearch-api (5.0.
|
|
47
|
+
elasticsearch (5.0.3)
|
|
48
|
+
elasticsearch-api (= 5.0.3)
|
|
49
|
+
elasticsearch-transport (= 5.0.3)
|
|
50
|
+
elasticsearch-api (5.0.3)
|
|
51
51
|
multi_json
|
|
52
|
-
elasticsearch-transport (5.0.
|
|
52
|
+
elasticsearch-transport (5.0.3)
|
|
53
53
|
faraday
|
|
54
54
|
multi_json
|
|
55
55
|
factory_girl (4.8.0)
|
|
@@ -60,7 +60,7 @@ GEM
|
|
|
60
60
|
git-version-bump (0.15.1)
|
|
61
61
|
haml (4.0.7)
|
|
62
62
|
tilt
|
|
63
|
-
hashie (3.
|
|
63
|
+
hashie (3.5.5)
|
|
64
64
|
i18n (0.7.0)
|
|
65
65
|
json (2.0.2)
|
|
66
66
|
listen (3.1.5)
|
|
@@ -72,9 +72,9 @@ GEM
|
|
|
72
72
|
minitest (5.10.1)
|
|
73
73
|
multi_json (1.12.1)
|
|
74
74
|
multipart-post (2.0.0)
|
|
75
|
-
omniauth (1.
|
|
76
|
-
hashie (>=
|
|
77
|
-
rack (>= 1.
|
|
75
|
+
omniauth (1.6.1)
|
|
76
|
+
hashie (>= 3.4.6, < 3.6.0)
|
|
77
|
+
rack (>= 1.6.2, < 3)
|
|
78
78
|
omniauth-identity (1.1.1)
|
|
79
79
|
bcrypt-ruby (~> 3.0)
|
|
80
80
|
omniauth (~> 1.0)
|
|
@@ -93,8 +93,6 @@ GEM
|
|
|
93
93
|
rack (~> 1.4)
|
|
94
94
|
rack-protection (1.5.3)
|
|
95
95
|
rack
|
|
96
|
-
rack-proxy (0.6.0)
|
|
97
|
-
rack
|
|
98
96
|
rack-test (0.6.3)
|
|
99
97
|
rack (>= 1.0)
|
|
100
98
|
racksh (1.0.0)
|
|
@@ -118,13 +116,13 @@ GEM
|
|
|
118
116
|
rspec-support (~> 3.5.0)
|
|
119
117
|
rspec-support (3.5.0)
|
|
120
118
|
ruby_dep (1.5.0)
|
|
121
|
-
sequel (4.
|
|
119
|
+
sequel (4.44.0)
|
|
122
120
|
simplecov (0.12.0)
|
|
123
121
|
docile (~> 1.1.0)
|
|
124
122
|
json (>= 1.8, < 3)
|
|
125
123
|
simplecov-html (~> 0.10.0)
|
|
126
124
|
simplecov-html (0.10.0)
|
|
127
|
-
sinatra (1.4.
|
|
125
|
+
sinatra (1.4.8)
|
|
128
126
|
rack (~> 1.5)
|
|
129
127
|
rack-protection (~> 1.4)
|
|
130
128
|
tilt (>= 1.3, < 3)
|
|
@@ -140,10 +138,10 @@ GEM
|
|
|
140
138
|
slop (3.6.0)
|
|
141
139
|
sqlite3 (1.3.12)
|
|
142
140
|
thread_safe (0.3.5)
|
|
143
|
-
tilt (2.0.
|
|
141
|
+
tilt (2.0.7)
|
|
144
142
|
tzinfo (1.2.2)
|
|
145
143
|
thread_safe (~> 0.1)
|
|
146
|
-
wisper (
|
|
144
|
+
wisper (2.0.0)
|
|
147
145
|
|
|
148
146
|
PLATFORMS
|
|
149
147
|
ruby
|
|
@@ -156,11 +154,10 @@ DEPENDENCIES
|
|
|
156
154
|
pry-byebug
|
|
157
155
|
rack-test
|
|
158
156
|
racksh
|
|
159
|
-
rake (~> 10.0)
|
|
160
157
|
rerun!
|
|
161
158
|
rspec (~> 3.0)
|
|
162
159
|
simplecov
|
|
163
160
|
sqlite3
|
|
164
161
|
|
|
165
162
|
BUNDLED WITH
|
|
166
|
-
1.
|
|
163
|
+
1.14.6
|
data/config.ru
CHANGED
|
@@ -4,19 +4,13 @@ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
|
|
4
4
|
|
|
5
5
|
raise 'Unconfigured' unless ENV['ELASTICSEARCH_URL']
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
require 'proxes'
|
|
8
|
+
require 'proxes/omniauth'
|
|
9
9
|
use Rack::Session::Cookie,
|
|
10
10
|
key: '_ProxES_session',
|
|
11
11
|
#:secure=>!TEST_MODE, # Uncomment if only allowing https:// access
|
|
12
12
|
secret: File.read('.session_secret')
|
|
13
13
|
|
|
14
|
-
require 'proxes'
|
|
15
|
-
require 'omniauth'
|
|
16
|
-
require 'omniauth-identity'
|
|
17
|
-
require 'proxes/models/identity'
|
|
18
|
-
require 'proxes/controllers/auth_identity'
|
|
19
|
-
# OmniAuth.config.test_mode = true
|
|
20
14
|
use OmniAuth::Builder do
|
|
21
15
|
# The identity provider is used by the App.
|
|
22
16
|
provider :identity,
|
|
@@ -36,10 +30,12 @@ end
|
|
|
36
30
|
|
|
37
31
|
# Proxy all Elasticsearch requests
|
|
38
32
|
require 'proxes/security'
|
|
33
|
+
require 'proxes/forwarder'
|
|
39
34
|
map '/' do
|
|
40
35
|
# Security
|
|
41
36
|
use ProxES::Security, ProxES::Services::Logger.instance
|
|
37
|
+
use Rack::ContentLength
|
|
42
38
|
|
|
43
39
|
# Forward requests to ES
|
|
44
|
-
run
|
|
40
|
+
run ProxES::Forwarder.new(backend: ENV['ELASTICSEARCH_URL'])
|
|
45
41
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'net/http'
|
|
2
|
+
require 'rack'
|
|
3
|
+
|
|
4
|
+
module ProxES
|
|
5
|
+
# A lot of code in this comes from Rack::Proxy
|
|
6
|
+
class Forwarder
|
|
7
|
+
attr_reader :backend, :streaming
|
|
8
|
+
|
|
9
|
+
def initialize(opts= {})
|
|
10
|
+
@backend = URI(opts[:backend]) if opts[:backend]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def call(env)
|
|
14
|
+
source_request = Rack::Request.new(env)
|
|
15
|
+
full_path = source_request.fullpath == "" ? URI.parse(env['REQUEST_URI']).request_uri : source_request.fullpath
|
|
16
|
+
target_request = Net::HTTP.const_get(source_request.request_method.capitalize).new(full_path)
|
|
17
|
+
|
|
18
|
+
http = Net::HTTP.new(backend.host, backend.port)
|
|
19
|
+
target_response = http.request(target_request)
|
|
20
|
+
|
|
21
|
+
headers = (target_response.respond_to?(:headers) && target_response.headers) || self.class.normalize_headers(target_response.to_hash)
|
|
22
|
+
body = target_response.body || [""]
|
|
23
|
+
body = [body] unless body.respond_to?(:each)
|
|
24
|
+
|
|
25
|
+
# Not sure where this is coming from, but it causes timeouts on the client
|
|
26
|
+
headers.delete('transfer-encoding')
|
|
27
|
+
|
|
28
|
+
[target_response.code, headers, body]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class << self
|
|
32
|
+
def normalize_headers(headers)
|
|
33
|
+
mapped = headers.map do |k, v|
|
|
34
|
+
[k, if v.is_a? Array then v.join("\n") else v end]
|
|
35
|
+
end
|
|
36
|
+
Rack::Utils::HeaderHash.new Hash[mapped]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -4,7 +4,7 @@ module ProxES
|
|
|
4
4
|
class SearchPolicy < RequestPolicy
|
|
5
5
|
class Scope < RequestPolicy::Scope
|
|
6
6
|
def resolve
|
|
7
|
-
patterns =
|
|
7
|
+
patterns = Permission.where(verb: 'INDEX', role: user.roles).map do |permission|
|
|
8
8
|
permission.pattern.gsub(/\{user.(.*)\}/) { |match| user.send(Regexp.last_match[1].to_sym) }
|
|
9
9
|
end
|
|
10
10
|
filter scope.index, patterns
|
|
@@ -4,7 +4,7 @@ module ProxES
|
|
|
4
4
|
class StatsPolicy < RequestPolicy
|
|
5
5
|
class Scope < RequestPolicy::Scope
|
|
6
6
|
def resolve
|
|
7
|
-
patterns =
|
|
7
|
+
patterns = Permission.where(verb: 'INDEX', role: user.roles).map do |permission|
|
|
8
8
|
permission.pattern.gsub(/\{user.(.*)\}/) { |match| user.send(Regexp.last_match[1].to_sym) }
|
|
9
9
|
end
|
|
10
10
|
filter scope.index, patterns
|
|
@@ -20,13 +20,13 @@ module ProxES
|
|
|
20
20
|
return false if user.nil?
|
|
21
21
|
|
|
22
22
|
if record.indices?
|
|
23
|
-
patterns =
|
|
23
|
+
patterns = Permission.where(verb: 'INDEX', role: user.roles).map do |permission|
|
|
24
24
|
permission.pattern.gsub(/\{user.(.*)\}/) { |match| user.send(Regexp.last_match[1].to_sym) }
|
|
25
25
|
end
|
|
26
26
|
return filter(record.index, patterns).count.positive?
|
|
27
27
|
else
|
|
28
28
|
# Give me all the user's permissions that match the verb
|
|
29
|
-
|
|
29
|
+
Permission.where(verb: method_sym[0..-2].upcase, role: user.roles).each do |permission|
|
|
30
30
|
return true if record.path =~ %r{#{permission.pattern}}
|
|
31
31
|
end
|
|
32
32
|
end
|
data/lib/proxes/proxes.rb
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
require 'proxes'
|
|
3
|
-
require 'proxes/db'
|
|
4
|
-
require 'proxes/controllers/users'
|
|
5
|
-
require 'proxes/controllers/roles'
|
|
6
|
-
require 'proxes/controllers/permissions'
|
|
7
|
-
require 'proxes/controllers/audit_logs'
|
|
8
|
-
|
|
9
2
|
module ProxES
|
|
10
3
|
class ProxES
|
|
11
4
|
def self.migration_folder
|
data/lib/proxes/security.rb
CHANGED
data/lib/proxes/seed.rb
CHANGED
|
@@ -4,6 +4,6 @@ require 'proxes/models/permission'
|
|
|
4
4
|
|
|
5
5
|
ProxES::Role.find_or_create(name: 'user')
|
|
6
6
|
sa = ProxES::Role.find_or_create(name: 'super_admin')
|
|
7
|
-
%w(GET POST PUT DELETE HEAD OPTIONS).each do |verb|
|
|
7
|
+
%w(GET POST PUT DELETE HEAD OPTIONS INDEX).each do |verb|
|
|
8
8
|
ProxES::Permission.find_or_create(role: sa, verb: verb, pattern: '.*')
|
|
9
9
|
end
|
data/lib/proxes/version.rb
CHANGED
data/proxes.gemspec
CHANGED
|
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
spec.require_paths = ['lib']
|
|
22
22
|
|
|
23
23
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
|
24
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
|
25
24
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
26
25
|
spec.add_development_dependency 'racksh'
|
|
27
26
|
spec.add_development_dependency 'rack-test'
|
|
@@ -29,7 +28,6 @@ Gem::Specification.new do |spec|
|
|
|
29
28
|
spec.add_development_dependency 'factory_girl'
|
|
30
29
|
|
|
31
30
|
spec.add_dependency 'rake', '~> 10.0'
|
|
32
|
-
spec.add_dependency 'rack-proxy'
|
|
33
31
|
spec.add_dependency 'rack-contrib'
|
|
34
32
|
spec.add_dependency 'sinatra'
|
|
35
33
|
spec.add_dependency 'sinatra-flash'
|
data/public/js/bundle.js
CHANGED
|
@@ -28977,7 +28977,7 @@ var _reactProxesComponents2 = _interopRequireDefault(_reactProxesComponents);
|
|
|
28977
28977
|
|
|
28978
28978
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
28979
28979
|
|
|
28980
|
-
_reactDom2.default.render(_react2.default.createElement(_reactProxesComponents2.default, { pollInterval: '30000' }), document.getElementById('react-dashboard'));
|
|
28980
|
+
_reactDom2.default.render(_react2.default.createElement(_reactProxesComponents2.default, { pollInterval: '30000', elasticsearch_url: './' }), document.getElementById('react-dashboard'));
|
|
28981
28981
|
|
|
28982
28982
|
// ReactDOM.render(
|
|
28983
28983
|
// <Health store={new ESStore()}/>,
|
data/views/layout.haml
CHANGED
|
@@ -45,4 +45,4 @@
|
|
|
45
45
|
%script{ type: 'text/javascript', src: 'https://cdnjs.cloudflare.com/ajax/libs/metisMenu/2.5.2/metisMenu.min.js' }
|
|
46
46
|
%script{ type: 'text/javascript', src: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js' }
|
|
47
47
|
%script{ type: 'text/javascript', src: 'https://cdnjs.cloudflare.com/ajax/libs/react/15.4.1/react.min.js' }
|
|
48
|
-
%script{ type: 'text/javascript', src: '/js/bundle.js' }
|
|
48
|
+
%script{ type: 'text/javascript', src: '/_proxes/js/bundle.js' }
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: proxes
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jurgens du Toit
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-03-
|
|
11
|
+
date: 2017-03-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -24,20 +24,6 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '1.12'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: rake
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '10.0'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '10.0'
|
|
41
27
|
- !ruby/object:Gem::Dependency
|
|
42
28
|
name: rspec
|
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -122,20 +108,6 @@ dependencies:
|
|
|
122
108
|
- - "~>"
|
|
123
109
|
- !ruby/object:Gem::Version
|
|
124
110
|
version: '10.0'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: rack-proxy
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - ">="
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0'
|
|
132
|
-
type: :runtime
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - ">="
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0'
|
|
139
111
|
- !ruby/object:Gem::Dependency
|
|
140
112
|
name: rack-contrib
|
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -371,6 +343,7 @@ files:
|
|
|
371
343
|
- lib/proxes/controllers/roles.rb
|
|
372
344
|
- lib/proxes/controllers/users.rb
|
|
373
345
|
- lib/proxes/db.rb
|
|
346
|
+
- lib/proxes/forwarder.rb
|
|
374
347
|
- lib/proxes/helpers/authentication.rb
|
|
375
348
|
- lib/proxes/helpers/component.rb
|
|
376
349
|
- lib/proxes/helpers/indices.rb
|
|
@@ -385,6 +358,7 @@ files:
|
|
|
385
358
|
- lib/proxes/models/permission.rb
|
|
386
359
|
- lib/proxes/models/role.rb
|
|
387
360
|
- lib/proxes/models/user.rb
|
|
361
|
+
- lib/proxes/omniauth.rb
|
|
388
362
|
- lib/proxes/policies/application_policy.rb
|
|
389
363
|
- lib/proxes/policies/audit_log_policy.rb
|
|
390
364
|
- lib/proxes/policies/identity_policy.rb
|