capsium 0.1.2 → 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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +34 -7
  4. data/CHANGELOG.md +58 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE +21 -0
  7. data/README.adoc +177 -135
  8. data/Rakefile +8 -1
  9. data/bin/console +1 -1
  10. data/capsium.gemspec +11 -19
  11. data/exe/capsium +1 -1
  12. data/lib/capsium/cli/convert.rb +18 -0
  13. data/lib/capsium/cli/package.rb +86 -0
  14. data/lib/capsium/cli/reactor.rb +25 -0
  15. data/lib/capsium/cli.rb +3 -96
  16. data/lib/capsium/converters/jekyll.rb +5 -7
  17. data/lib/capsium/converters.rb +7 -0
  18. data/lib/capsium/package/dataset.rb +67 -34
  19. data/lib/capsium/package/manifest.rb +33 -22
  20. data/lib/capsium/package/manifest_config.rb +52 -7
  21. data/lib/capsium/package/metadata.rb +4 -8
  22. data/lib/capsium/package/metadata_config.rb +97 -9
  23. data/lib/capsium/package/routes.rb +39 -41
  24. data/lib/capsium/package/routes_config.rb +120 -44
  25. data/lib/capsium/package/security.rb +123 -0
  26. data/lib/capsium/package/security_config.rb +60 -0
  27. data/lib/capsium/package/storage.rb +20 -45
  28. data/lib/capsium/package/storage_config.rb +100 -3
  29. data/lib/capsium/package/validator.rb +149 -0
  30. data/lib/capsium/package.rb +68 -66
  31. data/lib/capsium/packager.rb +42 -6
  32. data/lib/capsium/reactor/introspection.rb +88 -0
  33. data/lib/capsium/reactor.rb +89 -41
  34. data/lib/capsium/version.rb +1 -1
  35. data/lib/capsium.rb +7 -9
  36. data/sig/capsium/package/dataset.rbs +28 -0
  37. data/sig/capsium/package/manifest.rbs +34 -0
  38. data/sig/capsium/package/manifest_config.rbs +38 -0
  39. data/sig/capsium/package/metadata.rbs +26 -0
  40. data/sig/capsium/package/metadata_config.rbs +49 -0
  41. data/sig/capsium/package/routes.rbs +37 -0
  42. data/sig/capsium/package/routes_config.rbs +74 -0
  43. data/sig/capsium/package/security.rbs +65 -0
  44. data/sig/capsium/package/security_config.rbs +57 -0
  45. data/sig/capsium/package/storage.rbs +28 -0
  46. data/sig/capsium/package/storage_config.rbs +61 -0
  47. data/sig/capsium/package/validator.rbs +29 -0
  48. data/sig/capsium/package.rbs +53 -0
  49. data/sig/capsium/packager.rbs +23 -0
  50. data/sig/capsium/reactor/introspection.rbs +31 -0
  51. data/sig/capsium/reactor.rbs +30 -0
  52. data/sig/capsium.rbs +3 -1
  53. metadata +52 -183
  54. data/lib/capsium/package/dataset_config.rb +0 -28
  55. data/lib/capsium/protector.rb +0 -103
@@ -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