restful-capabilities 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (20) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +111 -0
  3. data/bin/razorrisk-microservice-capabilities +57 -0
  4. data/lib/razor_risk/cassini/applications/microservices/restful/capabilities/app.rb +306 -0
  5. data/lib/razor_risk/cassini/applications/microservices/restful/capabilities/version.rb +43 -0
  6. data/lib/razor_risk/cassini/applications/microservices/restful/capabilities.rb +17 -0
  7. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/data_subject_get.rb +65 -0
  8. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/data_subjects_get.rb +59 -0
  9. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin.rb +159 -0
  10. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/group_get.rb +65 -0
  11. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/group_users_get.rb +65 -0
  12. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/groups_get.rb +59 -0
  13. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/subject_get.rb +65 -0
  14. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/subjects_get.rb +59 -0
  15. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/user_get.rb +65 -0
  16. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/users_get.rb +59 -0
  17. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities.rb +24 -0
  18. data/test/unit/adapters/tc_get_handler_mixin.rb +342 -0
  19. data/test/unit/microservice/tc_app.rb +765 -0
  20. metadata +254 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: '0048aed0a1361bc29257358338c880a851895a2f'
4
+ data.tar.gz: 7f048793a7117749901399150f84922718e7ec49
5
+ SHA512:
6
+ metadata.gz: 5893140789b1e154da19fdce0ab2057dc506515e66aa9c8f9a56b4b5a78ded55109d2ebed2cb38cf25dfac6113599270ccebbf2967454251e0c72237c9d15c0c
7
+ data.tar.gz: b540fddbd0a2c317bd250b3b8b7b27403a75278ec697270c08169a405a0aa2ac82e974dac47b272bf5a8f593f314c3da1800941a8a86a83182ca319c9c5a87c3
data/Rakefile ADDED
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # ######################################################################## #
5
+ #
6
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
7
+ #
8
+ # ######################################################################## #
9
+
10
+ $:.unshift File.join(File.dirname(__FILE__), 'lib')
11
+
12
+
13
+ # ##########################################################
14
+ # bundler
15
+
16
+ require 'rubygems'
17
+ require 'bundler/setup'
18
+
19
+
20
+ # ######################################################################## #
21
+ # requires
22
+
23
+ require 'razor_risk/razor/control/rake_helpers/diagnostic_tasks'
24
+ require 'razor_risk/razor/control/rake_helpers/gem_tasks'
25
+ require 'razor_risk/razor/control/rake_helpers/task_helpers'
26
+
27
+ require 'rake'
28
+ require 'rake/clean'
29
+
30
+
31
+ # ##########################################################
32
+ # includes
33
+
34
+ include ::RazorRisk::Razor::Control
35
+ include ::Pantheios
36
+
37
+
38
+ # ##########################################################
39
+ # Constants
40
+
41
+ Spec = ::Gem::Specification.load(Dir['*.gemspec'].first)
42
+ LogDir = 'log'
43
+ LogThresholds = [ :informational, :informational ]
44
+
45
+
46
+ # ##########################################################
47
+ # clean/clobber
48
+
49
+ Dir[
50
+ 'log',
51
+ 'doc',
52
+ 'test/reports',
53
+ ].each { |f| CLEAN << f }
54
+ Dir[
55
+ '.bundle',
56
+ 'vendor',
57
+ 'GEM_HOME',
58
+ '*.gem',
59
+ '*.zip',
60
+ ].each { |f| CLOBBER << f }
61
+
62
+
63
+ # ##########################################################
64
+ # Tasks
65
+
66
+ desc 'Run tests'
67
+ task :test => [ :'gem:unit_test' ]
68
+
69
+ desc 'Build zip'
70
+ task :build_zip, [ :path ] do |task, args|
71
+
72
+ trace ParamNames[ :task, :args ], task, args
73
+
74
+ `build_zip.cmd #{args[:path]}`
75
+ end
76
+
77
+ desc 'Build gem'
78
+ task :build_gem, [ :path ] => :'gem:build'
79
+
80
+ desc 'Builds the Razor EntityConnector Gem'
81
+ task :build, [ :path ] => [
82
+ :build_gem,
83
+ :build_zip,
84
+ ]
85
+
86
+ desc 'Push the gem to the gem server.'
87
+ task :deploy => :'gem:push'
88
+
89
+
90
+ # ##########################################################
91
+ # Hooks
92
+
93
+ task :default do
94
+ puts 'Run \'bundler exec rake --tasks\' to see available tasks'
95
+ end
96
+
97
+ task :first do
98
+ ::Rake::Task[:'diagnostics:init'].execute(
99
+ name: Spec.name,
100
+ version: Spec.version.to_s,
101
+ directory: LogDir,
102
+ thresholds: LogThresholds,
103
+ )
104
+ end
105
+
106
+ RakeHelpers::TaskHelpers.add_hooks
107
+
108
+
109
+ # ############################## end of file ############################# #
110
+
111
+
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # ######################################################################## #
5
+ #
6
+ # Main module/entry file for the Capabilities Microservice
7
+ #
8
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
9
+ #
10
+ # ######################################################################## #
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/diagnostics/zeroth_include'
16
+
17
+ require 'razor_risk/cassini/applications/microservices/restful/capabilities'
18
+ require 'razor_risk/cassini/main'
19
+
20
+ # Requires for compatibility check
21
+ require 'razor_risk/cassini/util/version_util'
22
+ require 'razor_risk/cassini/common/version'
23
+ require 'razor_risk/razor/connectivity/version'
24
+ require 'xqsr3/version'
25
+
26
+
27
+ # ##########################################################################
28
+ # includes
29
+
30
+ include ::RazorRisk::Cassini::Applications::Microservices::RESTful
31
+ include ::RazorRisk::Cassini::Util::VersionUtil
32
+
33
+
34
+ # ##########################################################################
35
+ # constants
36
+
37
+ PROGRAM_VERSION = Capabilities::VERSION
38
+
39
+
40
+ # ##########################################################################
41
+ # compatibility checks
42
+
43
+ check_version_compatibility ::RazorRisk::Cassini::Common, [ 0, 21 ], 'RazorRisk.Cassini.Common'
44
+ check_version_compatibility ::RazorRisk::Razor::Connectivity, [ 0, 11, 2 ], 'RazorRisk.Razor.Connectivity'
45
+ check_version_compatibility ::LibCLImate, '0.10'
46
+ check_version_compatibility ::Pantheios, '0.20'
47
+ check_version_compatibility ::Xqsr3::VERSION, '0.30'
48
+
49
+
50
+ # ##########################################################################
51
+ # main section
52
+
53
+ TheApp = Capabilities::CapabilitiesApp
54
+
55
+ # ############################## end of file ############################# #
56
+
57
+
@@ -0,0 +1,306 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Sinatra App for Capabilities microservice.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/route_verb_dispatcher'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities'
17
+ require 'razor_risk/cassini/applications/secured_microservice'
18
+
19
+ require 'pantheios'
20
+
21
+ require 'csv'
22
+ require 'json'
23
+
24
+
25
+ # ##########################################################################
26
+ # modules
27
+
28
+ module RazorRisk
29
+ module Cassini
30
+ module Applications
31
+ module Microservices
32
+ module RESTful
33
+ module Capabilities
34
+
35
+
36
+ # ##########################################################################
37
+ # includes
38
+
39
+ include ::RazorRisk::Cassini::Applications
40
+
41
+
42
+ # ##########################################################################
43
+ # application
44
+
45
+ # Sinatra Application for the Capabilities Microservice.
46
+ class CapabilitiesApp < SecuredMicroservice
47
+
48
+ include RouteVerbAdaptors::Capabilities
49
+ include RESTFramework::RouteVerbDispatch
50
+
51
+ include ::Pantheios
52
+
53
+ FULL_DESIGNATION = 'Capabilities'
54
+ SHORT_DESIGNATION = 'capabilities'
55
+ SERVICE_TYPE = :microservice
56
+ PROGRAM_FEATURES = {
57
+ has_web_server: true,
58
+ has_host_and_port: true,
59
+ has_razor_connectivity: true,
60
+ authentication: :with_credentials_algorithm,
61
+ copyright_year: 2019,
62
+ }
63
+ SUPPORTED_ROUTES = [
64
+ [ '/groups/?', :get, 'Get the capabilities of all groups.' ],
65
+ [ '/groups/:id/?', :get, 'Get the capabilities of a specified group.' ],
66
+ [ '/users/?', :get, 'Get the user specific capabilities of all users.' ],
67
+ [ '/users/:group_id/?', :get, 'Get the user specific capabilities of all users in a specific group.' ],
68
+ [ '/users/-/:id/?', :get, 'Get the user specific capabilities of a specific user.' ],
69
+ [ '/subjects/?', :get, 'Get all the capability subjects and their actions.' ],
70
+ [ '/subjects/:id/?', :get, 'Get the actions for a specific capability subject.' ],
71
+ [ '/data-subjects/?', :get, 'Get all the capability data subjects and their actions.', ],
72
+ [ '/data-subjects/:id/?', :get, 'Get all the capability data subjects and their actions.', ],
73
+ ]
74
+ HTTP_ACCEPTS = %w{
75
+ text/html
76
+ application/json
77
+ application/xml
78
+ text/xml
79
+ text/csv
80
+ text/plain
81
+ text/tab-separated-values
82
+ text/tsv
83
+ }
84
+
85
+
86
+ def self.on_init_service options
87
+
88
+ trace ParamNames[ :options ], options
89
+
90
+ raise ArgumentError.new(
91
+ 'missing keyword: razor_requester'
92
+ ) unless options.has_key? :razor_requester
93
+
94
+ request_options = options[:request_options] || {
95
+ validate: true
96
+ }
97
+
98
+ set :razor_requester, options[:razor_requester]
99
+ set :request_options, request_options
100
+ end
101
+
102
+ private
103
+ def sec
104
+ return '' if credentials.empty?
105
+ " (for #{credentials.join(':')})"
106
+ end
107
+ public
108
+
109
+
110
+ # ##########################################################
111
+ # routes
112
+
113
+ get '/groups/:id/?' do
114
+
115
+ trace ParamNames[ :request, :params ], request, params
116
+
117
+ dispatch GroupGet
118
+ end
119
+
120
+ get '/groups/?' do
121
+
122
+ trace ParamNames[ :request, :params ], request, params
123
+
124
+ dispatch GroupsGet
125
+ end
126
+
127
+ get '/users/-/:id/?' do
128
+
129
+ trace ParamNames[ :request, :params ], request, params
130
+
131
+ dispatch UserGet
132
+ end
133
+
134
+ get '/users/:group_id/?' do
135
+
136
+ trace ParamNames[ :request, :params ], request, params
137
+
138
+ dispatch GroupUsersGet
139
+ end
140
+
141
+ get '/users/?' do
142
+
143
+ trace ParamNames[ :request, :params ], request, params
144
+
145
+ dispatch UsersGet
146
+ end
147
+
148
+ get '/subjects/:id/?' do
149
+
150
+ trace ParamNames[ :request, :params ], request, params
151
+
152
+ dispatch SubjectGet
153
+ end
154
+
155
+ get '/subjects/?' do
156
+
157
+ trace ParamNames[ :request, :params ], request, params
158
+
159
+ dispatch SubjectsGet
160
+ end
161
+
162
+ get '/data-subjects/:id/?' do
163
+
164
+ trace ParamNames[ :request, :params ], request, params
165
+
166
+ dispatch DataSubjectGet
167
+ end
168
+
169
+ get '/data-subjects/?' do
170
+
171
+ trace ParamNames[ :request, :params ], request, params
172
+
173
+ dispatch DataSubjectsGet
174
+ end
175
+
176
+ get '/' do
177
+
178
+ HTTP_ACCEPTS.each do |accept_type|
179
+
180
+ if request.accept? accept_type
181
+
182
+ content_type accept_type
183
+
184
+ case accept_type
185
+ when 'application/json'
186
+ r = make_JSON_routes SUPPORTED_ROUTES
187
+ when 'application/xml', 'text/xml'
188
+ r = make_XML_routes SUPPORTED_ROUTES
189
+ when 'text/csv'
190
+ r = make_CSV_routes SUPPORTED_ROUTES
191
+ when 'text/html'
192
+ r = make_HTML_routes SUPPORTED_ROUTES
193
+ when 'text/plain'
194
+ r = make_Plain_routes SUPPORTED_ROUTES
195
+ when 'text/tsv', 'text/tab-separated-values'
196
+ r = make_TSV_routes SUPPORTED_ROUTES
197
+ else
198
+ log :violation, "unrecognised accept type '#{accept_type}'"
199
+ halt(
200
+ 500,
201
+ {},
202
+ 'internal server failure'
203
+ )
204
+ end
205
+
206
+ return r
207
+ end
208
+ end
209
+
210
+ halt(
211
+ 406,
212
+ {},
213
+ "supports only the Accept types #{HTTP_ACCEPTS.map do |t|
214
+ %Q<'#{t}'>
215
+ end.join(', ')}"
216
+ )
217
+ end
218
+
219
+ define_catch_all_handlers
220
+
221
+
222
+ # ##########################################################
223
+ # routes helpers
224
+
225
+ def make_CSV_routes routes
226
+ CSV.generate do |csv|
227
+ routes.each do |ar|
228
+ csv << ar
229
+ end
230
+ end
231
+ end
232
+
233
+ def make_HTML_routes routes, **options
234
+ routes = routes.map do |ar|
235
+ <<END_OF_tr
236
+ <tr>
237
+ <td>#{ar[0]}</td>
238
+ <td>#{ar[1]}</td>
239
+ <td>#{ar[2]}</td>
240
+ </tr>
241
+ END_OF_tr
242
+ end
243
+
244
+ <<END_OF_html
245
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.we.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
246
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
247
+ <head>
248
+ <title>Razor Risk Web Service API - Internal Microservice - Capabilities</title>
249
+ <meta name="revisit-after" content="24 hours" />
250
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
251
+ </head>
252
+ <body>
253
+ <h1>Routes</h1>
254
+ <table>
255
+ <tr>
256
+ <th>Route</th>
257
+ <th>Verb</th>
258
+ <th>Description</th>
259
+ </tr>
260
+ #{routes.map { |r| r.chomp("\n") }.join("\n")}
261
+ </table>
262
+ </body>
263
+ </html>
264
+ END_OF_html
265
+ end
266
+
267
+ def make_JSON_routes routes, **options
268
+ r = {
269
+ 'routes' => []
270
+ }
271
+ r['routes'] = SUPPORTED_ROUTES.map { |ar| { route: ar[0], verb: ar[1].to_s.upcase, description: ar[2] } }
272
+ r.to_json
273
+ end
274
+
275
+ def make_Plain_routes routes
276
+ make_TSV_routes routes
277
+ end
278
+
279
+ def make_TSV_routes routes
280
+ routes.map { |ar| "#{ar[0]}\t#{ar[1]}\t#{ar[2]}\n" }
281
+ end
282
+
283
+ def make_XML_routes routes
284
+ <<END_OF_xml
285
+ <?xml version="1.0">
286
+ <routes>#{routes.map { |ar| %Q{ <route route="#{ar[0]}" verb="#{ar[1].to_s.upcase}" description="#{ar[2]}"/>}}.join(%Q{\n})}
287
+ </routes>
288
+ END_OF_xml
289
+ end
290
+
291
+ end # class App
292
+
293
+
294
+ # ##########################################################################
295
+ # modules
296
+
297
+ end # module Capabilities
298
+ end # module RESTful
299
+ end # module Microservices
300
+ end # module Applications
301
+ end # module Cassini
302
+ end # module RazorRisk
303
+
304
+ # ############################## end of file ############################# #
305
+
306
+
@@ -0,0 +1,43 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Version for RazorRisk.Cassini.Microservices.RESTful.Capabilities library
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+ module RazorRisk
12
+ module Cassini
13
+ module Applications
14
+ module Microservices
15
+ module RESTful
16
+
17
+ module Capabilities
18
+
19
+ # Current version of the
20
+ # RazorRisk.Cassini.Microservices.RESTful.Capabilites library
21
+ VERSION = '0.0.2'
22
+
23
+ private
24
+ VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i }
25
+ public
26
+ VERSION_MAJOR = VERSION_PARTS_[0]
27
+ VERSION_MINOR = VERSION_PARTS_[1]
28
+ VERSION_PATCH = VERSION_PARTS_[2]
29
+ VERSION_COMMIT = VERSION_PARTS_[3] || 0
30
+
31
+ # The description of the framework
32
+ DESCRIPTION = "Razor Risk's Cassini Web-framework's Capabilities RESTful microservice"
33
+ end # module Capabilities
34
+
35
+ end # module RESTful
36
+ end # module Microservices
37
+ end # module Applications
38
+ end # module Cassini
39
+ end # module RazorRisk
40
+
41
+ # ############################## end of file ############################# #
42
+
43
+
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ # ##########################################################################
4
+ #
5
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
6
+ #
7
+ # ##########################################################################
8
+
9
+ # ##########################################################
10
+ # requires
11
+
12
+ require 'razor_risk/cassini/applications/microservices/restful/capabilities/app'
13
+ require 'razor_risk/cassini/applications/microservices/restful/capabilities/version'
14
+
15
+ # ############################## end of file ############################# #
16
+
17
+
@@ -0,0 +1,65 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Capabilities microservice's GET group.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin'
17
+
18
+ require 'pantheios'
19
+
20
+ # ##########################################################################
21
+ # module
22
+
23
+ module RazorRisk
24
+ module Cassini
25
+ module Applications
26
+ module RouteVerbAdaptors
27
+ module Capabilities
28
+
29
+
30
+ # ##########################################################################
31
+ # DataSubjectGet
32
+
33
+ class DataSubjectGet < RESTFramework::VerbHandler
34
+
35
+ include GetHandlerMixin
36
+
37
+ ROUTE_VARIABLES = %w{
38
+ id
39
+ }
40
+
41
+ def handle env, params, request, response
42
+
43
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
44
+
45
+ id = params['id']
46
+
47
+ super do |ec|
48
+ ec.get_data_subject id, indicate_result_by: :qualified_result
49
+ end
50
+ end
51
+ end # class DataSubjectGet
52
+
53
+
54
+ # ##########################################################################
55
+ # module
56
+
57
+ end # module Capabilities
58
+ end # module RouteVerbAdaptors
59
+ end # module Applications
60
+ end # module Cassini
61
+ end # module RazorRisk
62
+
63
+ # ############################## end of file ############################# #
64
+
65
+
@@ -0,0 +1,59 @@
1
+ # encoding: UTF-8
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Adaptor for Capabilities microservice's GET users.
6
+ #
7
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
8
+ #
9
+ # ######################################################################## #
10
+
11
+
12
+ # ##########################################################################
13
+ # requires
14
+
15
+ require 'razor_risk/cassini/applications/rest_framework/verb_handler'
16
+ require 'razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin'
17
+
18
+ require 'pantheios'
19
+
20
+ # ##########################################################################
21
+ # module
22
+
23
+ module RazorRisk
24
+ module Cassini
25
+ module Applications
26
+ module RouteVerbAdaptors
27
+ module Capabilities
28
+
29
+
30
+ # ##########################################################################
31
+ # DataSubjectsGet
32
+
33
+ class DataSubjectsGet < RESTFramework::VerbHandler
34
+
35
+ include GetHandlerMixin
36
+
37
+ def handle env, params, request, response
38
+
39
+ trace ParamNames[ :env, :params, :request, :response ], env, params, request, response
40
+
41
+ super do |ec|
42
+ ec.get_data_subjects indicate_result_by: :qualified_result
43
+ end
44
+ end
45
+ end # class DataSubjectsGet
46
+
47
+
48
+ # ##########################################################################
49
+ # module
50
+
51
+ end # module Capabilities
52
+ end # module RouteVerbAdaptors
53
+ end # module Applications
54
+ end # module Cassini
55
+ end # module RazorRisk
56
+
57
+ # ############################## end of file ############################# #
58
+
59
+