capsium 0.1.2 → 0.3.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.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +46 -7
  4. data/CHANGELOG.md +183 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE +21 -0
  7. data/README.adoc +496 -127
  8. data/Rakefile +8 -1
  9. data/bin/console +1 -1
  10. data/capsium.gemspec +12 -19
  11. data/exe/capsium +1 -1
  12. data/lib/capsium/cli/convert.rb +18 -0
  13. data/lib/capsium/cli/formatting.rb +27 -0
  14. data/lib/capsium/cli/package.rb +148 -0
  15. data/lib/capsium/cli/reactor.rb +33 -0
  16. data/lib/capsium/cli.rb +4 -96
  17. data/lib/capsium/converters/jekyll.rb +5 -7
  18. data/lib/capsium/converters.rb +7 -0
  19. data/lib/capsium/package/authentication.rb +38 -0
  20. data/lib/capsium/package/authentication_config.rb +78 -0
  21. data/lib/capsium/package/cipher.rb +197 -0
  22. data/lib/capsium/package/composition.rb +77 -0
  23. data/lib/capsium/package/dataset.rb +67 -34
  24. data/lib/capsium/package/dependency_resolver.rb +61 -0
  25. data/lib/capsium/package/encryption_config.rb +38 -0
  26. data/lib/capsium/package/manifest.rb +33 -22
  27. data/lib/capsium/package/manifest_config.rb +52 -7
  28. data/lib/capsium/package/merged_view.rb +168 -0
  29. data/lib/capsium/package/metadata.rb +4 -8
  30. data/lib/capsium/package/metadata_config.rb +97 -9
  31. data/lib/capsium/package/preparation.rb +81 -0
  32. data/lib/capsium/package/routes.rb +39 -41
  33. data/lib/capsium/package/routes_config.rb +174 -44
  34. data/lib/capsium/package/security.rb +140 -0
  35. data/lib/capsium/package/security_config.rb +60 -0
  36. data/lib/capsium/package/signer.rb +201 -0
  37. data/lib/capsium/package/storage.rb +20 -45
  38. data/lib/capsium/package/storage_config.rb +128 -3
  39. data/lib/capsium/package/store.rb +109 -0
  40. data/lib/capsium/package/testing/config_test.rb +70 -0
  41. data/lib/capsium/package/testing/context.rb +11 -0
  42. data/lib/capsium/package/testing/data_validation_test.rb +63 -0
  43. data/lib/capsium/package/testing/file_test.rb +45 -0
  44. data/lib/capsium/package/testing/report.rb +33 -0
  45. data/lib/capsium/package/testing/route_test.rb +64 -0
  46. data/lib/capsium/package/testing/test_case.rb +60 -0
  47. data/lib/capsium/package/testing/test_suite.rb +86 -0
  48. data/lib/capsium/package/testing.rb +20 -0
  49. data/lib/capsium/package/validator.rb +160 -0
  50. data/lib/capsium/package/verification.rb +32 -0
  51. data/lib/capsium/package/version.rb +204 -0
  52. data/lib/capsium/package.rb +92 -106
  53. data/lib/capsium/packager.rb +75 -6
  54. data/lib/capsium/reactor/authenticator.rb +180 -0
  55. data/lib/capsium/reactor/deploy.rb +71 -0
  56. data/lib/capsium/reactor/htpasswd.rb +154 -0
  57. data/lib/capsium/reactor/introspection.rb +91 -0
  58. data/lib/capsium/reactor/oauth2.rb +106 -0
  59. data/lib/capsium/reactor/serving.rb +75 -0
  60. data/lib/capsium/reactor/session.rb +82 -0
  61. data/lib/capsium/reactor.rb +93 -43
  62. data/lib/capsium/thor_ext.rb +1 -1
  63. data/lib/capsium/version.rb +1 -1
  64. data/lib/capsium.rb +7 -9
  65. data/sig/capsium/package/authentication.rbs +23 -0
  66. data/sig/capsium/package/authentication_config.rbs +71 -0
  67. data/sig/capsium/package/cipher.rbs +51 -0
  68. data/sig/capsium/package/composition.rbs +20 -0
  69. data/sig/capsium/package/dataset.rbs +28 -0
  70. data/sig/capsium/package/dependency_resolver.rbs +49 -0
  71. data/sig/capsium/package/encryption_config.rbs +35 -0
  72. data/sig/capsium/package/manifest.rbs +34 -0
  73. data/sig/capsium/package/manifest_config.rbs +38 -0
  74. data/sig/capsium/package/merged_view.rbs +46 -0
  75. data/sig/capsium/package/metadata.rbs +26 -0
  76. data/sig/capsium/package/metadata_config.rbs +49 -0
  77. data/sig/capsium/package/preparation.rbs +23 -0
  78. data/sig/capsium/package/routes.rbs +37 -0
  79. data/sig/capsium/package/routes_config.rbs +107 -0
  80. data/sig/capsium/package/security.rbs +72 -0
  81. data/sig/capsium/package/security_config.rbs +57 -0
  82. data/sig/capsium/package/signer.rbs +59 -0
  83. data/sig/capsium/package/storage.rbs +28 -0
  84. data/sig/capsium/package/storage_config.rbs +85 -0
  85. data/sig/capsium/package/store.rbs +37 -0
  86. data/sig/capsium/package/testing/config_test.rbs +21 -0
  87. data/sig/capsium/package/testing/context.rbs +14 -0
  88. data/sig/capsium/package/testing/data_validation_test.rbs +22 -0
  89. data/sig/capsium/package/testing/file_test.rbs +17 -0
  90. data/sig/capsium/package/testing/report.rbs +20 -0
  91. data/sig/capsium/package/testing/route_test.rbs +22 -0
  92. data/sig/capsium/package/testing/test_case.rbs +41 -0
  93. data/sig/capsium/package/testing/test_suite.rbs +20 -0
  94. data/sig/capsium/package/testing.rbs +7 -0
  95. data/sig/capsium/package/validator.rbs +29 -0
  96. data/sig/capsium/package/verification.rbs +24 -0
  97. data/sig/capsium/package/version.rbs +39 -0
  98. data/sig/capsium/package.rbs +61 -0
  99. data/sig/capsium/packager.rbs +32 -0
  100. data/sig/capsium/reactor/authenticator.rbs +40 -0
  101. data/sig/capsium/reactor/deploy.rbs +34 -0
  102. data/sig/capsium/reactor/htpasswd.rbs +36 -0
  103. data/sig/capsium/reactor/introspection.rbs +31 -0
  104. data/sig/capsium/reactor/oauth2.rbs +31 -0
  105. data/sig/capsium/reactor/serving.rbs +22 -0
  106. data/sig/capsium/reactor/session.rbs +36 -0
  107. data/sig/capsium/reactor.rbs +35 -0
  108. data/sig/capsium.rbs +3 -1
  109. metadata +108 -170
  110. data/lib/capsium/package/dataset_config.rb +0 -28
  111. data/lib/capsium/protector.rb +0 -103
metadata CHANGED
@@ -1,17 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capsium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-06-12 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: cssminify
13
+ name: bcrypt
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - ">="
@@ -39,7 +38,7 @@ dependencies:
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0'
41
40
  - !ruby/object:Gem::Dependency
42
- name: htmlcompressor
41
+ name: json
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ">="
@@ -53,7 +52,7 @@ dependencies:
53
52
  - !ruby/object:Gem::Version
54
53
  version: '0'
55
54
  - !ruby/object:Gem::Dependency
56
- name: html-proofer
55
+ name: json-schema
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - ">="
@@ -67,7 +66,7 @@ dependencies:
67
66
  - !ruby/object:Gem::Version
68
67
  version: '0'
69
68
  - !ruby/object:Gem::Dependency
70
- name: jekyll
69
+ name: listen
71
70
  requirement: !ruby/object:Gem::Requirement
72
71
  requirements:
73
72
  - - ">="
@@ -81,47 +80,25 @@ dependencies:
81
80
  - !ruby/object:Gem::Version
82
81
  version: '0'
83
82
  - !ruby/object:Gem::Dependency
84
- name: json
83
+ name: lutaml-model
85
84
  requirement: !ruby/object:Gem::Requirement
86
85
  requirements:
87
86
  - - ">="
88
87
  - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: json-schema
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
88
+ version: '0.8'
89
+ - - "<"
102
90
  - !ruby/object:Gem::Version
103
- version: '0'
91
+ version: '1.0'
104
92
  type: :runtime
105
93
  prerelease: false
106
94
  version_requirements: !ruby/object:Gem::Requirement
107
95
  requirements:
108
96
  - - ">="
109
97
  - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: listen
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
98
+ version: '0.8'
99
+ - - "<"
123
100
  - !ruby/object:Gem::Version
124
- version: '0'
101
+ version: '1.0'
125
102
  - !ruby/object:Gem::Dependency
126
103
  name: marcel
127
104
  requirement: !ruby/object:Gem::Requirement
@@ -140,44 +117,22 @@ dependencies:
140
117
  name: rubyzip
141
118
  requirement: !ruby/object:Gem::Requirement
142
119
  requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 2.3.2
146
- type: :runtime
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
120
+ - - ">="
151
121
  - !ruby/object:Gem::Version
152
122
  version: 2.3.2
153
- - !ruby/object:Gem::Dependency
154
- name: scss_lint
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
123
+ - - "<"
158
124
  - !ruby/object:Gem::Version
159
- version: '0'
125
+ version: '4.0'
160
126
  type: :runtime
161
127
  prerelease: false
162
128
  version_requirements: !ruby/object:Gem::Requirement
163
129
  requirements:
164
130
  - - ">="
165
131
  - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: shale
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :runtime
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
132
+ version: 2.3.2
133
+ - - "<"
179
134
  - !ruby/object:Gem::Version
180
- version: '0'
135
+ version: '4.0'
181
136
  - !ruby/object:Gem::Dependency
182
137
  name: sqlite3
183
138
  requirement: !ruby/object:Gem::Requirement
@@ -206,20 +161,6 @@ dependencies:
206
161
  - - ">="
207
162
  - !ruby/object:Gem::Version
208
163
  version: '0'
209
- - !ruby/object:Gem::Dependency
210
- name: uglifier
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - ">="
214
- - !ruby/object:Gem::Version
215
- version: '0'
216
- type: :runtime
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - ">="
221
- - !ruby/object:Gem::Version
222
- version: '0'
223
164
  - !ruby/object:Gem::Dependency
224
165
  name: webrick
225
166
  requirement: !ruby/object:Gem::Requirement
@@ -248,91 +189,10 @@ dependencies:
248
189
  - - ">="
249
190
  - !ruby/object:Gem::Version
250
191
  version: '0'
251
- - !ruby/object:Gem::Dependency
252
- name: pry
253
- requirement: !ruby/object:Gem::Requirement
254
- requirements:
255
- - - ">="
256
- - !ruby/object:Gem::Version
257
- version: '0'
258
- type: :development
259
- prerelease: false
260
- version_requirements: !ruby/object:Gem::Requirement
261
- requirements:
262
- - - ">="
263
- - !ruby/object:Gem::Version
264
- version: '0'
265
- - !ruby/object:Gem::Dependency
266
- name: rack-test
267
- requirement: !ruby/object:Gem::Requirement
268
- requirements:
269
- - - ">="
270
- - !ruby/object:Gem::Version
271
- version: '0'
272
- type: :development
273
- prerelease: false
274
- version_requirements: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - ">="
277
- - !ruby/object:Gem::Version
278
- version: '0'
279
- - !ruby/object:Gem::Dependency
280
- name: rake
281
- requirement: !ruby/object:Gem::Requirement
282
- requirements:
283
- - - "~>"
284
- - !ruby/object:Gem::Version
285
- version: '13.0'
286
- type: :development
287
- prerelease: false
288
- version_requirements: !ruby/object:Gem::Requirement
289
- requirements:
290
- - - "~>"
291
- - !ruby/object:Gem::Version
292
- version: '13.0'
293
- - !ruby/object:Gem::Dependency
294
- name: rspec
295
- requirement: !ruby/object:Gem::Requirement
296
- requirements:
297
- - - "~>"
298
- - !ruby/object:Gem::Version
299
- version: '3.11'
300
- type: :development
301
- prerelease: false
302
- version_requirements: !ruby/object:Gem::Requirement
303
- requirements:
304
- - - "~>"
305
- - !ruby/object:Gem::Version
306
- version: '3.11'
307
- - !ruby/object:Gem::Dependency
308
- name: rubocop
309
- requirement: !ruby/object:Gem::Requirement
310
- requirements:
311
- - - "~>"
312
- - !ruby/object:Gem::Version
313
- version: '1.58'
314
- type: :development
315
- prerelease: false
316
- version_requirements: !ruby/object:Gem::Requirement
317
- requirements:
318
- - - "~>"
319
- - !ruby/object:Gem::Version
320
- version: '1.58'
321
- - !ruby/object:Gem::Dependency
322
- name: rubocop-performance
323
- requirement: !ruby/object:Gem::Requirement
324
- requirements:
325
- - - ">="
326
- - !ruby/object:Gem::Version
327
- version: '0'
328
- type: :development
329
- prerelease: false
330
- version_requirements: !ruby/object:Gem::Requirement
331
- requirements:
332
- - - ">="
333
- - !ruby/object:Gem::Version
334
- version: '0'
335
- description: Capsium
192
+ description: 'Capsium facilitates the creation, management and deployment of content
193
+ packages with ease. This gem provides a structured way to handle content, data,
194
+ and metadata for various applications: it packages them into .cap files and serves
195
+ them over HTTP.'
336
196
  email:
337
197
  - open.source@ribose.com
338
198
  executables:
@@ -345,8 +205,10 @@ files:
345
205
  - ".gitignore"
346
206
  - ".rspec"
347
207
  - ".rubocop.yml"
208
+ - CHANGELOG.md
348
209
  - CODE_OF_CONDUCT.md
349
210
  - Gemfile
211
+ - LICENSE
350
212
  - README.adoc
351
213
  - Rakefile
352
214
  - bin/console
@@ -355,24 +217,101 @@ files:
355
217
  - exe/capsium
356
218
  - lib/capsium.rb
357
219
  - lib/capsium/cli.rb
220
+ - lib/capsium/cli/convert.rb
221
+ - lib/capsium/cli/formatting.rb
222
+ - lib/capsium/cli/package.rb
223
+ - lib/capsium/cli/reactor.rb
224
+ - lib/capsium/converters.rb
358
225
  - lib/capsium/converters/jekyll.rb
359
226
  - lib/capsium/package.rb
227
+ - lib/capsium/package/authentication.rb
228
+ - lib/capsium/package/authentication_config.rb
229
+ - lib/capsium/package/cipher.rb
230
+ - lib/capsium/package/composition.rb
360
231
  - lib/capsium/package/dataset.rb
361
- - lib/capsium/package/dataset_config.rb
232
+ - lib/capsium/package/dependency_resolver.rb
233
+ - lib/capsium/package/encryption_config.rb
362
234
  - lib/capsium/package/manifest.rb
363
235
  - lib/capsium/package/manifest_config.rb
236
+ - lib/capsium/package/merged_view.rb
364
237
  - lib/capsium/package/metadata.rb
365
238
  - lib/capsium/package/metadata_config.rb
239
+ - lib/capsium/package/preparation.rb
366
240
  - lib/capsium/package/routes.rb
367
241
  - lib/capsium/package/routes_config.rb
242
+ - lib/capsium/package/security.rb
243
+ - lib/capsium/package/security_config.rb
244
+ - lib/capsium/package/signer.rb
368
245
  - lib/capsium/package/storage.rb
369
246
  - lib/capsium/package/storage_config.rb
247
+ - lib/capsium/package/store.rb
248
+ - lib/capsium/package/testing.rb
249
+ - lib/capsium/package/testing/config_test.rb
250
+ - lib/capsium/package/testing/context.rb
251
+ - lib/capsium/package/testing/data_validation_test.rb
252
+ - lib/capsium/package/testing/file_test.rb
253
+ - lib/capsium/package/testing/report.rb
254
+ - lib/capsium/package/testing/route_test.rb
255
+ - lib/capsium/package/testing/test_case.rb
256
+ - lib/capsium/package/testing/test_suite.rb
257
+ - lib/capsium/package/validator.rb
258
+ - lib/capsium/package/verification.rb
259
+ - lib/capsium/package/version.rb
370
260
  - lib/capsium/packager.rb
371
- - lib/capsium/protector.rb
372
261
  - lib/capsium/reactor.rb
262
+ - lib/capsium/reactor/authenticator.rb
263
+ - lib/capsium/reactor/deploy.rb
264
+ - lib/capsium/reactor/htpasswd.rb
265
+ - lib/capsium/reactor/introspection.rb
266
+ - lib/capsium/reactor/oauth2.rb
267
+ - lib/capsium/reactor/serving.rb
268
+ - lib/capsium/reactor/session.rb
373
269
  - lib/capsium/thor_ext.rb
374
270
  - lib/capsium/version.rb
375
271
  - sig/capsium.rbs
272
+ - sig/capsium/package.rbs
273
+ - sig/capsium/package/authentication.rbs
274
+ - sig/capsium/package/authentication_config.rbs
275
+ - sig/capsium/package/cipher.rbs
276
+ - sig/capsium/package/composition.rbs
277
+ - sig/capsium/package/dataset.rbs
278
+ - sig/capsium/package/dependency_resolver.rbs
279
+ - sig/capsium/package/encryption_config.rbs
280
+ - sig/capsium/package/manifest.rbs
281
+ - sig/capsium/package/manifest_config.rbs
282
+ - sig/capsium/package/merged_view.rbs
283
+ - sig/capsium/package/metadata.rbs
284
+ - sig/capsium/package/metadata_config.rbs
285
+ - sig/capsium/package/preparation.rbs
286
+ - sig/capsium/package/routes.rbs
287
+ - sig/capsium/package/routes_config.rbs
288
+ - sig/capsium/package/security.rbs
289
+ - sig/capsium/package/security_config.rbs
290
+ - sig/capsium/package/signer.rbs
291
+ - sig/capsium/package/storage.rbs
292
+ - sig/capsium/package/storage_config.rbs
293
+ - sig/capsium/package/store.rbs
294
+ - sig/capsium/package/testing.rbs
295
+ - sig/capsium/package/testing/config_test.rbs
296
+ - sig/capsium/package/testing/context.rbs
297
+ - sig/capsium/package/testing/data_validation_test.rbs
298
+ - sig/capsium/package/testing/file_test.rbs
299
+ - sig/capsium/package/testing/report.rbs
300
+ - sig/capsium/package/testing/route_test.rbs
301
+ - sig/capsium/package/testing/test_case.rbs
302
+ - sig/capsium/package/testing/test_suite.rbs
303
+ - sig/capsium/package/validator.rbs
304
+ - sig/capsium/package/verification.rbs
305
+ - sig/capsium/package/version.rbs
306
+ - sig/capsium/packager.rbs
307
+ - sig/capsium/reactor.rbs
308
+ - sig/capsium/reactor/authenticator.rbs
309
+ - sig/capsium/reactor/deploy.rbs
310
+ - sig/capsium/reactor/htpasswd.rbs
311
+ - sig/capsium/reactor/introspection.rbs
312
+ - sig/capsium/reactor/oauth2.rbs
313
+ - sig/capsium/reactor/serving.rbs
314
+ - sig/capsium/reactor/session.rbs
376
315
  homepage: https://github.com/capsiums/capsium
377
316
  licenses:
378
317
  - MIT
@@ -380,7 +319,7 @@ metadata:
380
319
  homepage_uri: https://github.com/capsiums/capsium
381
320
  source_code_uri: https://github.com/capsiums/capsium
382
321
  changelog_uri: https://github.com/capsiums/capsium/releases
383
- post_install_message:
322
+ rubygems_mfa_required: 'true'
384
323
  rdoc_options: []
385
324
  require_paths:
386
325
  - lib
@@ -388,15 +327,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
388
327
  requirements:
389
328
  - - ">="
390
329
  - !ruby/object:Gem::Version
391
- version: 2.7.0
330
+ version: 3.2.0
392
331
  required_rubygems_version: !ruby/object:Gem::Requirement
393
332
  requirements:
394
333
  - - ">="
395
334
  - !ruby/object:Gem::Version
396
335
  version: '0'
397
336
  requirements: []
398
- rubygems_version: 3.5.11
399
- signing_key:
337
+ rubygems_version: 4.0.16
400
338
  specification_version: 4
401
- summary: Capsium
339
+ summary: Packager and reactor for Capsium packages (.cap)
402
340
  test_files: []
@@ -1,28 +0,0 @@
1
- require "shale"
2
-
3
- module Capsium
4
- class Package
5
- class DatasetConfig < Shale::Mapper
6
- attribute :name, Shale::Type::String
7
- attribute :source, Shale::Type::String
8
- attribute :format, Shale::Type::String
9
- attribute :schema, Shale::Type::String
10
-
11
- def to_dataset(data_path)
12
- Dataset.new(config: self,
13
- data_path: File.join(
14
- File.dirname(data_path), source
15
- ))
16
- end
17
-
18
- def self.from_dataset(dataset)
19
- new(
20
- name: dataset.config.name,
21
- source: dataset.config.source,
22
- format: dataset.config.format,
23
- schema: dataset.config.schema,
24
- )
25
- end
26
- end
27
- end
28
- end
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # lib/capsium/protector.rb
4
- require "openssl"
5
- require "base64"
6
- require "json"
7
-
8
- module Capsium
9
- class Protector
10
- def initialize(package, encryption_metadata = nil,
11
- digital_signature_metadata = nil)
12
- @package = package
13
- @encryption_metadata = encryption_metadata
14
- @digital_signature_metadata = digital_signature_metadata
15
- end
16
-
17
- def apply_encryption_and_sign
18
- encrypted_file = apply_encryption if @encryption_metadata
19
- sign_package(encrypted_file) if @digital_signature_metadata
20
- end
21
-
22
- def verify_signature
23
- signature_data = JSON.parse(File.read(signature_file_path))
24
- public_key = OpenSSL::PKey::RSA.new(File.read(public_key_path))
25
- digest = OpenSSL::Digest.new(signature_data["algorithm"])
26
- data = combined_data
27
- signature = Base64.decode64(signature_data["signature"])
28
-
29
- public_key.verify(digest, signature, data)
30
- end
31
-
32
- private
33
-
34
- def apply_encryption
35
- encryption = @encryption_metadata
36
- data = File.read(File.join(@package.path,
37
- Package::ENCRYPTED_PACKAGING_FILE))
38
- cipher = OpenSSL::Cipher.new(encryption[:algorithm])
39
- cipher.encrypt
40
- key = cipher.random_key
41
- iv = cipher.random_iv
42
-
43
- encrypted_data = cipher.update(data) + cipher.final
44
- encrypted_file = File.join(@package.path, "#{@package.name}.enc")
45
-
46
- File.open(encrypted_file, "wb") do |f|
47
- f.write(iv)
48
- f.write(encrypted_data)
49
- end
50
-
51
- save_encryption_key(key, encryption[:keyManagement])
52
- encrypted_file
53
- end
54
-
55
- def save_encryption_key(key, key_management)
56
- case key_management
57
- when "secure"
58
- # Implement secure key storage mechanism
59
- File.write(File.join(@package.path, "encryption_key.secure"),
60
- Base64.encode64(key))
61
- else
62
- raise "Unknown key management strategy: #{key_management}"
63
- end
64
- end
65
-
66
- def sign_package(encrypted_file)
67
- key = OpenSSL::PKey::RSA.new(@digital_signature_metadata[:keyLength])
68
- data = combined_data(encrypted_file)
69
- digest = OpenSSL::Digest.new(@digital_signature_metadata[:algorithm])
70
- signature_data = key.sign(digest, data)
71
-
72
- signature_json = {
73
- algorithm: @digital_signature_metadata[:algorithm],
74
- certificateType: @digital_signature_metadata[:certificateType],
75
- signature: Base64.encode64(signature_data),
76
- }
77
-
78
- File.write(signature_file_path, JSON.pretty_generate(signature_json))
79
- File.write(public_key_path, key.public_key.to_pem)
80
- end
81
-
82
- def combined_data(encrypted_file = nil)
83
- metadata_content = File.read(File.join(@package.path,
84
- Package::METADATA_FILE))
85
- signature_content = File.read(signature_file_path).sub(
86
- /"signature": ".*"/, '"signature": ""'
87
- )
88
- package_enc_content = File.read(encrypted_file || File.join(
89
- @package.path, "#{@package.name}.enc"
90
- ))
91
-
92
- metadata_content + signature_content + package_enc_content
93
- end
94
-
95
- def signature_file_path
96
- File.join(@package.path, @digital_signature_metadata[:signatureFile])
97
- end
98
-
99
- def public_key_path
100
- File.join(@package.path, "public_key.pem")
101
- end
102
- end
103
- end