restful-capabilities 0.0.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.
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
+