safedb 0.3.1009 → 0.3.1010
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/lib/interprete.rb +3 -3
- data/lib/keytools/key.api.rb +29 -85
- data/lib/usecase/export.rb +37 -16
- data/lib/usecase/init.rb +0 -4
- data/lib/version.rb +1 -1
- data/safedb.gemspec +2 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc83fe6e9b8f141eef721eeb62608f57535aaedd
|
4
|
+
data.tar.gz: b7c90295820373a1b04ce3dc95574614e74ea132
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed02288410213a27a4b6229e576355200176332b29a3598c15d1ea21af14717acfb18d5fdd8f2f6cb9177cfc6719863f68a224f387bed2298ccc74a691b38f0b
|
7
|
+
data.tar.gz: c4d63d2ee433403d931edac75093975da0a8909f69f4d2c300e503f481bcd00c80140d9765720030009ccc6f079d926dd44eed7ef435d1e9a54f5e6e12149de1
|
data/lib/interprete.rb
CHANGED
@@ -203,9 +203,9 @@ class Interprete < Thor
|
|
203
203
|
# Description of the export use case command.
|
204
204
|
desc "export", "exports the book or chapter or the mini dictionary at verse."
|
205
205
|
|
206
|
-
# Export
|
207
|
-
#
|
208
|
-
#
|
206
|
+
# Export one, some or all chapters, verses and lines within the logged in book.
|
207
|
+
# The --print flag demands that the exported text goes to stdout otherwise it
|
208
|
+
# will be placed in an aptly named file in the present working directory.
|
209
209
|
def export
|
210
210
|
log.info(x) { "[usecase] ~> export book chapter content or dictionary at verse in JSON format." }
|
211
211
|
SafeDb::Export.new.flow_of_events
|
data/lib/keytools/key.api.rb
CHANGED
@@ -856,62 +856,6 @@ module SafeDb
|
|
856
856
|
end
|
857
857
|
|
858
858
|
|
859
|
-
# Register the URL to the <b>frontend keystore</b> that is tied to
|
860
|
-
# this application instance on this workstation (and user). The default
|
861
|
-
# keystore sits on an accessible filesystem that is preferably a
|
862
|
-
# removable drive (like a USB key or phone) which allows the keys to
|
863
|
-
# your secrets to travel with you in your pocket.
|
864
|
-
#
|
865
|
-
# <b>Changing the Keystore Url</b>
|
866
|
-
#
|
867
|
-
# If the keystore url has already been configured this method will overwrite
|
868
|
-
# (thereby updating) it.
|
869
|
-
#
|
870
|
-
# <b>Changing the Keystore Url</b>
|
871
|
-
#
|
872
|
-
# The keystore directives in the global configuration file looks like this.
|
873
|
-
#
|
874
|
-
# [keystore.ids]
|
875
|
-
# dxEy-v2w3-x7y8 = /media/usb_key/family.creds
|
876
|
-
# 47S3-Nv0w-8SYf = /media/usb_key/friend.creds
|
877
|
-
# 3Dds-8Tts-Jy2G = /media/usb_key/office.creds
|
878
|
-
#
|
879
|
-
# <b>Which Use Case Sets the Keystore Url?</b>
|
880
|
-
#
|
881
|
-
# The keystore url must be provided <b>the very first time</b> init
|
882
|
-
# is called for an app instance on a machine. If the configuration
|
883
|
-
# is wiped, the next initialize use case must again provide it.
|
884
|
-
#
|
885
|
-
# <b>How to Add (Extend) Storage Services</b>
|
886
|
-
#
|
887
|
-
# We could use Redis, PostgreSQL, even a Rest API to provide storage
|
888
|
-
# services. To extend it - make a keystore ID boss its own section and
|
889
|
-
# then add keypairs like
|
890
|
-
#
|
891
|
-
# - the keystore URL
|
892
|
-
# - the keystore Type (or interface class)
|
893
|
-
# - keystore create destroy markers
|
894
|
-
#
|
895
|
-
# @param keystore_url [String]
|
896
|
-
# The keystore url points to where the key metadata protecting
|
897
|
-
# this application instance lives. The simplest keystores are
|
898
|
-
# based on files and for them this url is just a folder path.
|
899
|
-
#
|
900
|
-
# @raise [KeyError]
|
901
|
-
#
|
902
|
-
# The keystore URL cannot be <b>NEW</b>. The <b>NEW acronym</b> asserts
|
903
|
-
# that the attribute is
|
904
|
-
#
|
905
|
-
# - neither <b>N</b>il
|
906
|
-
# - nor <b>E</b>mpty
|
907
|
-
# - nor <b>W</b>hitespace only
|
908
|
-
#
|
909
|
-
def register_keystore keystore_url
|
910
|
-
KeyError.not_new( keystore_url, self )
|
911
|
-
@keymap.write( @aim_id, KEYSTORE_IDENTIFIER_KEY, keystore_url )
|
912
|
-
end
|
913
|
-
|
914
|
-
|
915
859
|
# Generate a new set of envelope breadcrumbs, derive the new envelope
|
916
860
|
# filepath, then <b>encrypt</b> the raw envelope content, and write the
|
917
861
|
# resulting ciphertext out into the new file.
|
@@ -1118,6 +1062,35 @@ module SafeDb
|
|
1118
1062
|
end
|
1119
1063
|
|
1120
1064
|
|
1065
|
+
# This method depends on {use_application_domain} which sets
|
1066
|
+
# the application ID against the session identity so only call
|
1067
|
+
# it if we are in a logged in state.
|
1068
|
+
#
|
1069
|
+
# NOTE this will NOT be set until the session is logged in so
|
1070
|
+
# the call fails before that. For this reason do not call this
|
1071
|
+
# method from outside this class. If the domain name is
|
1072
|
+
# available use {KeyId.derive_app_instance_identifier} instead.
|
1073
|
+
def self.read_app_id()
|
1074
|
+
|
1075
|
+
aim_id = read_aim_id()
|
1076
|
+
keypairs = KeyPair.new( MACHINE_CONFIG_FILE )
|
1077
|
+
keypairs.use( aim_id )
|
1078
|
+
return keypairs.get( APP_INSTANCE_ID_KEY )
|
1079
|
+
|
1080
|
+
end
|
1081
|
+
|
1082
|
+
|
1083
|
+
def self.read_aim_id()
|
1084
|
+
|
1085
|
+
session_identifier = KeyId.derive_session_id( to_token() )
|
1086
|
+
|
1087
|
+
keypairs = KeyPair.new( MACHINE_CONFIG_FILE )
|
1088
|
+
keypairs.use( SESSION_APP_DOMAINS )
|
1089
|
+
return keypairs.get( session_identifier )
|
1090
|
+
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
|
1121
1094
|
private
|
1122
1095
|
|
1123
1096
|
|
@@ -1230,35 +1203,6 @@ module SafeDb
|
|
1230
1203
|
end
|
1231
1204
|
|
1232
1205
|
|
1233
|
-
# This method depends on {use_application_domain} which sets
|
1234
|
-
# the application ID against the session identity so only call
|
1235
|
-
# it if we are in a logged in state.
|
1236
|
-
#
|
1237
|
-
# NOTE this will NOT be set until the session is logged in so
|
1238
|
-
# the call fails before that. For this reason do not call this
|
1239
|
-
# method from outside this class. If the domain name is
|
1240
|
-
# available use {KeyId.derive_app_instance_identifier} instead.
|
1241
|
-
def self.read_app_id()
|
1242
|
-
|
1243
|
-
aim_id = read_aim_id()
|
1244
|
-
keypairs = KeyPair.new( MACHINE_CONFIG_FILE )
|
1245
|
-
keypairs.use( aim_id )
|
1246
|
-
return keypairs.get( APP_INSTANCE_ID_KEY )
|
1247
|
-
|
1248
|
-
end
|
1249
|
-
|
1250
|
-
|
1251
|
-
def self.read_aim_id()
|
1252
|
-
|
1253
|
-
session_identifier = KeyId.derive_session_id( to_token() )
|
1254
|
-
|
1255
|
-
keypairs = KeyPair.new( MACHINE_CONFIG_FILE )
|
1256
|
-
keypairs.use( SESSION_APP_DOMAINS )
|
1257
|
-
return keypairs.get( session_identifier )
|
1258
|
-
|
1259
|
-
end
|
1260
|
-
|
1261
|
-
|
1262
1206
|
def self.get_crumbs_db_from_domain_name( domain_name )
|
1263
1207
|
|
1264
1208
|
KeyError.not_new( domain_name, self )
|
data/lib/usecase/export.rb
CHANGED
@@ -2,34 +2,55 @@
|
|
2
2
|
|
3
3
|
module SafeDb
|
4
4
|
|
5
|
-
# Export
|
6
|
-
#
|
7
|
-
#
|
5
|
+
# Export one, some or all chapters, verses and lines within the logged in book.
|
6
|
+
#
|
7
|
+
# == Aspirational Feature
|
8
|
+
#
|
9
|
+
# The --print flag demands that the exported text goes to stdout otherwise it
|
10
|
+
# will be placed in an aptly named file in the present working directory.
|
8
11
|
class Export < UseCase
|
9
12
|
|
10
|
-
def get_chapter_data( chapter_key )
|
11
|
-
return KeyDb.from_json( KeyApi.content_unlock( chapter_key ) )
|
12
|
-
end
|
13
|
-
|
14
13
|
def execute
|
15
14
|
|
16
15
|
return unless ops_key_exists?
|
17
16
|
master_db = KeyApi.read_master_db()
|
18
17
|
|
19
|
-
|
18
|
+
puts ""
|
19
|
+
puts "### #############################################################\n"
|
20
|
+
puts "### Book Birthday =>> #{KeyApi.to_db_create_date(master_db)}\n"
|
21
|
+
puts "### The Book Name =>> #{KeyApi.to_db_domain_name(master_db)}\n"
|
22
|
+
puts "### The Book (Id) =>> #{KeyApi.to_db_domain_id(master_db)}\n"
|
23
|
+
puts "### #############################################################\n"
|
24
|
+
puts "--- --------------------------------------------------------------\n"
|
25
|
+
|
26
|
+
chapters = KeyApi.to_matching_dictionary( master_db, ENVELOPE_KEY_PREFIX )
|
27
|
+
export_filename = "safedb.book-#{KeyApi.read_app_id()}-#{KeyNow.yyjjj_hhmm_ss_nanosec()}.json"
|
28
|
+
export_filepath = File.join( Dir.pwd, export_filename )
|
29
|
+
|
30
|
+
exported_struct = {}
|
31
|
+
verse_count = 0
|
20
32
|
|
21
|
-
|
22
|
-
|
33
|
+
chapters.each_pair do | chapter_name, crumb_dictionary |
|
34
|
+
|
35
|
+
chapter_struct = KeyDb.from_json( KeyApi.content_unlock( crumb_dictionary ) )
|
36
|
+
verse_count += chapter_struct.length
|
37
|
+
exported_struct.store( chapter_name, chapter_struct )
|
23
38
|
|
24
|
-
unless has_chapter
|
25
|
-
puts "{}"
|
26
|
-
return
|
27
39
|
end
|
28
40
|
|
29
|
-
|
30
|
-
|
41
|
+
File.write( export_filepath, JSON.pretty_generate( exported_struct ) )
|
42
|
+
|
43
|
+
puts ""
|
44
|
+
puts "Number of chapters exported >> #{chapters.length}"
|
45
|
+
puts "Number of verses exported >> #{verse_count}"
|
46
|
+
puts "The export filename is #{export_filename}"
|
47
|
+
puts "The Present Working Directory is #{Dir.pwd}"
|
48
|
+
puts ""
|
49
|
+
|
50
|
+
puts "--- --------------------------------------------------------------\n"
|
51
|
+
puts "### #############################################################\n"
|
52
|
+
puts ""
|
31
53
|
|
32
|
-
return
|
33
54
|
|
34
55
|
end
|
35
56
|
|
data/lib/usecase/init.rb
CHANGED
data/lib/version.rb
CHANGED
data/safedb.gemspec
CHANGED
@@ -29,9 +29,9 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_dependency 'thor', '~> 0.20'
|
30
30
|
spec.add_dependency 'inifile', '~> 3.0'
|
31
31
|
|
32
|
-
spec.add_development_dependency "bundler"
|
32
|
+
spec.add_development_dependency "bundler", "~> 0"
|
33
33
|
spec.add_development_dependency "cucumber", "~> 2.0"
|
34
34
|
spec.add_development_dependency "aruba", "~> 1.0.0-alpha.1"
|
35
|
-
spec.add_development_dependency "gem-release"
|
35
|
+
spec.add_development_dependency "gem-release", "~> 0"
|
36
36
|
|
37
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: safedb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1010
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Apollo Akora
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bcrypt
|
@@ -56,14 +56,14 @@ dependencies:
|
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
@@ -98,14 +98,14 @@ dependencies:
|
|
98
98
|
name: gem-release
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: safe is a credentials manager for the linux command line written in Ruby.
|