capsium 0.1.1 → 0.2.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/.github/workflows/rake.yml +1 -4
- data/.github/workflows/release.yml +1 -2
- data/.gitignore +1 -0
- data/.rubocop.yml +34 -3
- data/CHANGELOG.md +58 -0
- data/Gemfile +4 -4
- data/LICENSE +21 -0
- data/README.adoc +177 -135
- data/Rakefile +8 -1
- data/bin/console +1 -1
- data/capsium.gemspec +16 -23
- data/exe/capsium +1 -1
- data/lib/capsium/cli/convert.rb +18 -0
- data/lib/capsium/cli/package.rb +86 -0
- data/lib/capsium/cli/reactor.rb +25 -0
- data/lib/capsium/cli.rb +5 -79
- data/lib/capsium/converters/jekyll.rb +62 -31
- data/lib/capsium/converters.rb +7 -0
- data/lib/capsium/package/dataset.rb +76 -56
- data/lib/capsium/package/manifest.rb +41 -50
- data/lib/capsium/package/manifest_config.rb +64 -0
- data/lib/capsium/package/metadata.rb +11 -29
- data/lib/capsium/package/metadata_config.rb +105 -0
- data/lib/capsium/package/routes.rb +51 -111
- data/lib/capsium/package/routes_config.rb +150 -0
- data/lib/capsium/package/security.rb +123 -0
- data/lib/capsium/package/security_config.rb +60 -0
- data/lib/capsium/package/storage.rb +26 -26
- data/lib/capsium/package/storage_config.rb +106 -0
- data/lib/capsium/package/validator.rb +149 -0
- data/lib/capsium/package.rb +84 -70
- data/lib/capsium/packager.rb +60 -62
- data/lib/capsium/reactor/introspection.rb +88 -0
- data/lib/capsium/reactor.rb +108 -36
- data/lib/capsium/version.rb +1 -1
- data/lib/capsium.rb +7 -9
- data/sig/capsium/package/dataset.rbs +28 -0
- data/sig/capsium/package/manifest.rbs +34 -0
- data/sig/capsium/package/manifest_config.rbs +38 -0
- data/sig/capsium/package/metadata.rbs +26 -0
- data/sig/capsium/package/metadata_config.rbs +49 -0
- data/sig/capsium/package/routes.rbs +37 -0
- data/sig/capsium/package/routes_config.rbs +74 -0
- data/sig/capsium/package/security.rbs +65 -0
- data/sig/capsium/package/security_config.rbs +57 -0
- data/sig/capsium/package/storage.rbs +28 -0
- data/sig/capsium/package/storage_config.rbs +61 -0
- data/sig/capsium/package/validator.rbs +29 -0
- data/sig/capsium/package.rbs +53 -0
- data/sig/capsium/packager.rbs +23 -0
- data/sig/capsium/reactor/introspection.rbs +31 -0
- data/sig/capsium/reactor.rbs +30 -0
- data/sig/capsium.rbs +3 -1
- metadata +63 -146
- data/images/005df7415a331c466ad2d9a42efdd212b6f42fe50b5fd3b3174c86c706f58244.png +0 -0
- data/images/0374025b3af99b8a473282c8cbbf9fcd29573cf41e586982f328f86c0690f43d.png +0 -0
- data/images/0bb4da785be40ef58e219470ebccb979325928b75453dc46bac23c6ee8a7a7cb.png +0 -0
- data/images/6aa294dccc81af594aacbe804e7ddffdc17eacc28357338108aea5d021d831ff.png +0 -0
- data/images/72dd3fbf3f4b475e27a0e7fb8137c475c32c41f8d222bcf62d6a9ccf102d9532.png +0 -0
- data/images/8772b6961d169738d7b0fa0b669b06fc2f40632d4c62586c7634fc17b93182a3.png +0 -0
- data/images/a998d842405933d45723606ff3f70162ec95b4ef30db25464a366184fd08fb9b.png +0 -0
- data/images/aa8980547e8c003d33273ab4d80e62da7f317bd7581b293c06d67f5331f24f31.png +0 -0
- data/images/bb78a872b539e0e9b2d80dee58acbb688f3f2727b324a5bf8bf417a69d94a166.png +0 -0
- data/images/c48fc83b17725d85fbb64d971196ebfccd8c5c757fe6aa5845303f6e315879b6.png +0 -0
- data/images/f08ef07308d08119ac2124bb7428c8bef17ef1ca70045696604d6e83015a9b91.png +0 -0
- data/images/f7514206111b695647eae9adfcf498ba3e0ff83ecfe25f3fc3ed8e9f04c5c726-1.png +0 -0
- data/images/f7514206111b695647eae9adfcf498ba3e0ff83ecfe25f3fc3ed8e9f04c5c726.png +0 -0
- data/lib/capsium/protector.rb +0 -95
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Capsium
|
|
2
|
+
# Rack-free WEBrick reactor: serves the package routes plus the
|
|
3
|
+
# Monitoring HTTP API (ARCHITECTURE.md section 7) and reloads the
|
|
4
|
+
# package on filesystem changes.
|
|
5
|
+
class Reactor
|
|
6
|
+
DEFAULT_PORT: Integer
|
|
7
|
+
DEFAULT_CACHE_CONTROL: String
|
|
8
|
+
|
|
9
|
+
attr_reader package: Package
|
|
10
|
+
attr_reader package_path: String
|
|
11
|
+
attr_reader routes: Package::Routes
|
|
12
|
+
attr_reader port: Integer
|
|
13
|
+
attr_reader cache_control: String?
|
|
14
|
+
attr_reader server: untyped
|
|
15
|
+
attr_reader server_thread: Thread?
|
|
16
|
+
attr_reader introspection: Introspection
|
|
17
|
+
|
|
18
|
+
def initialize: (package: Package | String package, ?port: Integer port,
|
|
19
|
+
?cache_control: String? cache_control,
|
|
20
|
+
?do_not_listen: bool do_not_listen) -> void
|
|
21
|
+
|
|
22
|
+
def serve: () -> untyped
|
|
23
|
+
|
|
24
|
+
def handle_request: (untyped request, untyped response) -> untyped
|
|
25
|
+
|
|
26
|
+
def mount_routes: () -> void
|
|
27
|
+
|
|
28
|
+
def restart_server: () -> Thread
|
|
29
|
+
end
|
|
30
|
+
end
|
data/sig/capsium.rbs
CHANGED
metadata
CHANGED
|
@@ -1,29 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: capsium
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: cssminify
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
27
12
|
- !ruby/object:Gem::Dependency
|
|
28
13
|
name: csv
|
|
29
14
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -39,7 +24,7 @@ dependencies:
|
|
|
39
24
|
- !ruby/object:Gem::Version
|
|
40
25
|
version: '0'
|
|
41
26
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
27
|
+
name: json
|
|
43
28
|
requirement: !ruby/object:Gem::Requirement
|
|
44
29
|
requirements:
|
|
45
30
|
- - ">="
|
|
@@ -53,7 +38,7 @@ dependencies:
|
|
|
53
38
|
- !ruby/object:Gem::Version
|
|
54
39
|
version: '0'
|
|
55
40
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
41
|
+
name: json-schema
|
|
57
42
|
requirement: !ruby/object:Gem::Requirement
|
|
58
43
|
requirements:
|
|
59
44
|
- - ">="
|
|
@@ -67,7 +52,7 @@ dependencies:
|
|
|
67
52
|
- !ruby/object:Gem::Version
|
|
68
53
|
version: '0'
|
|
69
54
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
55
|
+
name: listen
|
|
71
56
|
requirement: !ruby/object:Gem::Requirement
|
|
72
57
|
requirements:
|
|
73
58
|
- - ">="
|
|
@@ -81,19 +66,25 @@ dependencies:
|
|
|
81
66
|
- !ruby/object:Gem::Version
|
|
82
67
|
version: '0'
|
|
83
68
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
69
|
+
name: lutaml-model
|
|
85
70
|
requirement: !ruby/object:Gem::Requirement
|
|
86
71
|
requirements:
|
|
87
72
|
- - ">="
|
|
88
73
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0'
|
|
74
|
+
version: '0.8'
|
|
75
|
+
- - "<"
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '1.0'
|
|
90
78
|
type: :runtime
|
|
91
79
|
prerelease: false
|
|
92
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
81
|
requirements:
|
|
94
82
|
- - ">="
|
|
95
83
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0'
|
|
84
|
+
version: '0.8'
|
|
85
|
+
- - "<"
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: '1.0'
|
|
97
88
|
- !ruby/object:Gem::Dependency
|
|
98
89
|
name: marcel
|
|
99
90
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -112,44 +103,22 @@ dependencies:
|
|
|
112
103
|
name: rubyzip
|
|
113
104
|
requirement: !ruby/object:Gem::Requirement
|
|
114
105
|
requirements:
|
|
115
|
-
- - "
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: 2.3.2
|
|
118
|
-
type: :runtime
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
106
|
+
- - ">="
|
|
123
107
|
- !ruby/object:Gem::Version
|
|
124
108
|
version: 2.3.2
|
|
125
|
-
-
|
|
126
|
-
name: scss_lint
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - ">="
|
|
109
|
+
- - "<"
|
|
130
110
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0'
|
|
111
|
+
version: '4.0'
|
|
132
112
|
type: :runtime
|
|
133
113
|
prerelease: false
|
|
134
114
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
115
|
requirements:
|
|
136
116
|
- - ">="
|
|
137
117
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
139
|
-
-
|
|
140
|
-
name: shale
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - ">="
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: '0'
|
|
146
|
-
type: :runtime
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - ">="
|
|
118
|
+
version: 2.3.2
|
|
119
|
+
- - "<"
|
|
151
120
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '0'
|
|
121
|
+
version: '4.0'
|
|
153
122
|
- !ruby/object:Gem::Dependency
|
|
154
123
|
name: sqlite3
|
|
155
124
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -178,20 +147,6 @@ dependencies:
|
|
|
178
147
|
- - ">="
|
|
179
148
|
- !ruby/object:Gem::Version
|
|
180
149
|
version: '0'
|
|
181
|
-
- !ruby/object:Gem::Dependency
|
|
182
|
-
name: uglifier
|
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
|
184
|
-
requirements:
|
|
185
|
-
- - ">="
|
|
186
|
-
- !ruby/object:Gem::Version
|
|
187
|
-
version: '0'
|
|
188
|
-
type: :runtime
|
|
189
|
-
prerelease: false
|
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
-
requirements:
|
|
192
|
-
- - ">="
|
|
193
|
-
- !ruby/object:Gem::Version
|
|
194
|
-
version: '0'
|
|
195
150
|
- !ruby/object:Gem::Dependency
|
|
196
151
|
name: webrick
|
|
197
152
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -220,65 +175,12 @@ dependencies:
|
|
|
220
175
|
- - ">="
|
|
221
176
|
- !ruby/object:Gem::Version
|
|
222
177
|
version: '0'
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
- - "~>"
|
|
228
|
-
- !ruby/object:Gem::Version
|
|
229
|
-
version: 0.12.2
|
|
230
|
-
type: :development
|
|
231
|
-
prerelease: false
|
|
232
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
233
|
-
requirements:
|
|
234
|
-
- - "~>"
|
|
235
|
-
- !ruby/object:Gem::Version
|
|
236
|
-
version: 0.12.2
|
|
237
|
-
- !ruby/object:Gem::Dependency
|
|
238
|
-
name: rake
|
|
239
|
-
requirement: !ruby/object:Gem::Requirement
|
|
240
|
-
requirements:
|
|
241
|
-
- - "~>"
|
|
242
|
-
- !ruby/object:Gem::Version
|
|
243
|
-
version: '13.0'
|
|
244
|
-
type: :development
|
|
245
|
-
prerelease: false
|
|
246
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
247
|
-
requirements:
|
|
248
|
-
- - "~>"
|
|
249
|
-
- !ruby/object:Gem::Version
|
|
250
|
-
version: '13.0'
|
|
251
|
-
- !ruby/object:Gem::Dependency
|
|
252
|
-
name: rspec
|
|
253
|
-
requirement: !ruby/object:Gem::Requirement
|
|
254
|
-
requirements:
|
|
255
|
-
- - "~>"
|
|
256
|
-
- !ruby/object:Gem::Version
|
|
257
|
-
version: '3.11'
|
|
258
|
-
type: :development
|
|
259
|
-
prerelease: false
|
|
260
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
261
|
-
requirements:
|
|
262
|
-
- - "~>"
|
|
263
|
-
- !ruby/object:Gem::Version
|
|
264
|
-
version: '3.11'
|
|
265
|
-
- !ruby/object:Gem::Dependency
|
|
266
|
-
name: rubocop
|
|
267
|
-
requirement: !ruby/object:Gem::Requirement
|
|
268
|
-
requirements:
|
|
269
|
-
- - "~>"
|
|
270
|
-
- !ruby/object:Gem::Version
|
|
271
|
-
version: '1.58'
|
|
272
|
-
type: :development
|
|
273
|
-
prerelease: false
|
|
274
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
275
|
-
requirements:
|
|
276
|
-
- - "~>"
|
|
277
|
-
- !ruby/object:Gem::Version
|
|
278
|
-
version: '1.58'
|
|
279
|
-
description: Capsium
|
|
178
|
+
description: 'Capsium facilitates the creation, management and deployment of content
|
|
179
|
+
packages with ease. This gem provides a structured way to handle content, data,
|
|
180
|
+
and metadata for various applications: it packages them into .cap files and serves
|
|
181
|
+
them over HTTP.'
|
|
280
182
|
email:
|
|
281
|
-
- open.source@ribose.com
|
|
183
|
+
- open.source@ribose.com
|
|
282
184
|
executables:
|
|
283
185
|
- capsium
|
|
284
186
|
extensions: []
|
|
@@ -289,50 +191,66 @@ files:
|
|
|
289
191
|
- ".gitignore"
|
|
290
192
|
- ".rspec"
|
|
291
193
|
- ".rubocop.yml"
|
|
194
|
+
- CHANGELOG.md
|
|
292
195
|
- CODE_OF_CONDUCT.md
|
|
293
196
|
- Gemfile
|
|
197
|
+
- LICENSE
|
|
294
198
|
- README.adoc
|
|
295
199
|
- Rakefile
|
|
296
200
|
- bin/console
|
|
297
201
|
- bin/setup
|
|
298
202
|
- capsium.gemspec
|
|
299
203
|
- exe/capsium
|
|
300
|
-
- images/005df7415a331c466ad2d9a42efdd212b6f42fe50b5fd3b3174c86c706f58244.png
|
|
301
|
-
- images/0374025b3af99b8a473282c8cbbf9fcd29573cf41e586982f328f86c0690f43d.png
|
|
302
|
-
- images/0bb4da785be40ef58e219470ebccb979325928b75453dc46bac23c6ee8a7a7cb.png
|
|
303
|
-
- images/6aa294dccc81af594aacbe804e7ddffdc17eacc28357338108aea5d021d831ff.png
|
|
304
|
-
- images/72dd3fbf3f4b475e27a0e7fb8137c475c32c41f8d222bcf62d6a9ccf102d9532.png
|
|
305
|
-
- images/8772b6961d169738d7b0fa0b669b06fc2f40632d4c62586c7634fc17b93182a3.png
|
|
306
|
-
- images/a998d842405933d45723606ff3f70162ec95b4ef30db25464a366184fd08fb9b.png
|
|
307
|
-
- images/aa8980547e8c003d33273ab4d80e62da7f317bd7581b293c06d67f5331f24f31.png
|
|
308
|
-
- images/bb78a872b539e0e9b2d80dee58acbb688f3f2727b324a5bf8bf417a69d94a166.png
|
|
309
|
-
- images/c48fc83b17725d85fbb64d971196ebfccd8c5c757fe6aa5845303f6e315879b6.png
|
|
310
|
-
- images/f08ef07308d08119ac2124bb7428c8bef17ef1ca70045696604d6e83015a9b91.png
|
|
311
|
-
- images/f7514206111b695647eae9adfcf498ba3e0ff83ecfe25f3fc3ed8e9f04c5c726-1.png
|
|
312
|
-
- images/f7514206111b695647eae9adfcf498ba3e0ff83ecfe25f3fc3ed8e9f04c5c726.png
|
|
313
204
|
- lib/capsium.rb
|
|
314
205
|
- lib/capsium/cli.rb
|
|
206
|
+
- lib/capsium/cli/convert.rb
|
|
207
|
+
- lib/capsium/cli/package.rb
|
|
208
|
+
- lib/capsium/cli/reactor.rb
|
|
209
|
+
- lib/capsium/converters.rb
|
|
315
210
|
- lib/capsium/converters/jekyll.rb
|
|
316
211
|
- lib/capsium/package.rb
|
|
317
212
|
- lib/capsium/package/dataset.rb
|
|
318
213
|
- lib/capsium/package/manifest.rb
|
|
214
|
+
- lib/capsium/package/manifest_config.rb
|
|
319
215
|
- lib/capsium/package/metadata.rb
|
|
216
|
+
- lib/capsium/package/metadata_config.rb
|
|
320
217
|
- lib/capsium/package/routes.rb
|
|
218
|
+
- lib/capsium/package/routes_config.rb
|
|
219
|
+
- lib/capsium/package/security.rb
|
|
220
|
+
- lib/capsium/package/security_config.rb
|
|
321
221
|
- lib/capsium/package/storage.rb
|
|
222
|
+
- lib/capsium/package/storage_config.rb
|
|
223
|
+
- lib/capsium/package/validator.rb
|
|
322
224
|
- lib/capsium/packager.rb
|
|
323
|
-
- lib/capsium/protector.rb
|
|
324
225
|
- lib/capsium/reactor.rb
|
|
226
|
+
- lib/capsium/reactor/introspection.rb
|
|
325
227
|
- lib/capsium/thor_ext.rb
|
|
326
228
|
- lib/capsium/version.rb
|
|
327
229
|
- sig/capsium.rbs
|
|
328
|
-
|
|
230
|
+
- sig/capsium/package.rbs
|
|
231
|
+
- sig/capsium/package/dataset.rbs
|
|
232
|
+
- sig/capsium/package/manifest.rbs
|
|
233
|
+
- sig/capsium/package/manifest_config.rbs
|
|
234
|
+
- sig/capsium/package/metadata.rbs
|
|
235
|
+
- sig/capsium/package/metadata_config.rbs
|
|
236
|
+
- sig/capsium/package/routes.rbs
|
|
237
|
+
- sig/capsium/package/routes_config.rbs
|
|
238
|
+
- sig/capsium/package/security.rbs
|
|
239
|
+
- sig/capsium/package/security_config.rbs
|
|
240
|
+
- sig/capsium/package/storage.rbs
|
|
241
|
+
- sig/capsium/package/storage_config.rbs
|
|
242
|
+
- sig/capsium/package/validator.rbs
|
|
243
|
+
- sig/capsium/packager.rbs
|
|
244
|
+
- sig/capsium/reactor.rbs
|
|
245
|
+
- sig/capsium/reactor/introspection.rbs
|
|
246
|
+
homepage: https://github.com/capsiums/capsium
|
|
329
247
|
licenses:
|
|
330
248
|
- MIT
|
|
331
249
|
metadata:
|
|
332
|
-
homepage_uri: https://github.com/
|
|
333
|
-
source_code_uri: https://github.com/
|
|
334
|
-
changelog_uri: https://github.com/
|
|
335
|
-
|
|
250
|
+
homepage_uri: https://github.com/capsiums/capsium
|
|
251
|
+
source_code_uri: https://github.com/capsiums/capsium
|
|
252
|
+
changelog_uri: https://github.com/capsiums/capsium/releases
|
|
253
|
+
rubygems_mfa_required: 'true'
|
|
336
254
|
rdoc_options: []
|
|
337
255
|
require_paths:
|
|
338
256
|
- lib
|
|
@@ -340,15 +258,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
340
258
|
requirements:
|
|
341
259
|
- - ">="
|
|
342
260
|
- !ruby/object:Gem::Version
|
|
343
|
-
version: 2.
|
|
261
|
+
version: 3.2.0
|
|
344
262
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
345
263
|
requirements:
|
|
346
264
|
- - ">="
|
|
347
265
|
- !ruby/object:Gem::Version
|
|
348
266
|
version: '0'
|
|
349
267
|
requirements: []
|
|
350
|
-
rubygems_version:
|
|
351
|
-
signing_key:
|
|
268
|
+
rubygems_version: 4.0.16
|
|
352
269
|
specification_version: 4
|
|
353
|
-
summary: Capsium
|
|
270
|
+
summary: Packager and reactor for Capsium packages (.cap)
|
|
354
271
|
test_files: []
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/lib/capsium/protector.rb
DELETED
|
@@ -1,95 +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, digital_signature_metadata = nil)
|
|
11
|
-
@package = package
|
|
12
|
-
@encryption_metadata = encryption_metadata
|
|
13
|
-
@digital_signature_metadata = digital_signature_metadata
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def apply_encryption_and_sign
|
|
17
|
-
encrypted_file = apply_encryption if @encryption_metadata
|
|
18
|
-
sign_package(encrypted_file) if @digital_signature_metadata
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def verify_signature
|
|
22
|
-
signature_data = JSON.parse(File.read(signature_file_path))
|
|
23
|
-
public_key = OpenSSL::PKey::RSA.new(File.read(public_key_path))
|
|
24
|
-
digest = OpenSSL::Digest.new(signature_data["algorithm"])
|
|
25
|
-
data = combined_data
|
|
26
|
-
signature = Base64.decode64(signature_data["signature"])
|
|
27
|
-
|
|
28
|
-
public_key.verify(digest, signature, data)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
private
|
|
32
|
-
|
|
33
|
-
def apply_encryption
|
|
34
|
-
encryption = @encryption_metadata
|
|
35
|
-
data = File.read(File.join(@package.path, Package::ENCRYPTED_PACKAGING_FILE))
|
|
36
|
-
cipher = OpenSSL::Cipher.new(encryption[:algorithm])
|
|
37
|
-
cipher.encrypt
|
|
38
|
-
key = cipher.random_key
|
|
39
|
-
iv = cipher.random_iv
|
|
40
|
-
|
|
41
|
-
encrypted_data = cipher.update(data) + cipher.final
|
|
42
|
-
encrypted_file = File.join(@package.path, "#{@package.name}.enc")
|
|
43
|
-
|
|
44
|
-
File.open(encrypted_file, "wb") do |f|
|
|
45
|
-
f.write(iv)
|
|
46
|
-
f.write(encrypted_data)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
save_encryption_key(key, encryption[:keyManagement])
|
|
50
|
-
encrypted_file
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def save_encryption_key(key, key_management)
|
|
54
|
-
case key_management
|
|
55
|
-
when "secure"
|
|
56
|
-
# Implement secure key storage mechanism
|
|
57
|
-
File.write(File.join(@package.path, "encryption_key.secure"), Base64.encode64(key))
|
|
58
|
-
else
|
|
59
|
-
raise "Unknown key management strategy: #{key_management}"
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def sign_package(encrypted_file)
|
|
64
|
-
key = OpenSSL::PKey::RSA.new(@digital_signature_metadata[:keyLength])
|
|
65
|
-
data = combined_data(encrypted_file)
|
|
66
|
-
digest = OpenSSL::Digest.new(@digital_signature_metadata[:algorithm])
|
|
67
|
-
signature_data = key.sign(digest, data)
|
|
68
|
-
|
|
69
|
-
signature_json = {
|
|
70
|
-
algorithm: @digital_signature_metadata[:algorithm],
|
|
71
|
-
certificateType: @digital_signature_metadata[:certificateType],
|
|
72
|
-
signature: Base64.encode64(signature_data)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
File.write(signature_file_path, JSON.pretty_generate(signature_json))
|
|
76
|
-
File.write(public_key_path, key.public_key.to_pem)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def combined_data(encrypted_file = nil)
|
|
80
|
-
metadata_content = File.read(File.join(@package.path, Package::METADATA_FILE))
|
|
81
|
-
signature_content = File.read(signature_file_path).sub(/"signature": ".*"/, '"signature": ""')
|
|
82
|
-
package_enc_content = File.read(encrypted_file || File.join(@package.path, "#{@package.name}.enc"))
|
|
83
|
-
|
|
84
|
-
metadata_content + signature_content + package_enc_content
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def signature_file_path
|
|
88
|
-
File.join(@package.path, @digital_signature_metadata[:signatureFile])
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def public_key_path
|
|
92
|
-
File.join(@package.path, "public_key.pem")
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
end
|