safedb 0.01.0001

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.yardopts +3 -0
  4. data/Gemfile +10 -0
  5. data/LICENSE +21 -0
  6. data/README.md +793 -0
  7. data/Rakefile +16 -0
  8. data/bin/safe +5 -0
  9. data/lib/configs/README.md +58 -0
  10. data/lib/extension/array.rb +162 -0
  11. data/lib/extension/dir.rb +35 -0
  12. data/lib/extension/file.rb +123 -0
  13. data/lib/extension/hash.rb +33 -0
  14. data/lib/extension/string.rb +572 -0
  15. data/lib/factbase/facts.safedb.net.ini +38 -0
  16. data/lib/interprete.rb +462 -0
  17. data/lib/keytools/PRODUCE_RAND_SEQ_USING_DEV_URANDOM.txt +0 -0
  18. data/lib/keytools/kdf.api.rb +243 -0
  19. data/lib/keytools/kdf.bcrypt.rb +265 -0
  20. data/lib/keytools/kdf.pbkdf2.rb +262 -0
  21. data/lib/keytools/kdf.scrypt.rb +190 -0
  22. data/lib/keytools/key.64.rb +326 -0
  23. data/lib/keytools/key.algo.rb +109 -0
  24. data/lib/keytools/key.api.rb +1391 -0
  25. data/lib/keytools/key.db.rb +330 -0
  26. data/lib/keytools/key.docs.rb +195 -0
  27. data/lib/keytools/key.error.rb +110 -0
  28. data/lib/keytools/key.id.rb +271 -0
  29. data/lib/keytools/key.ident.rb +243 -0
  30. data/lib/keytools/key.iv.rb +107 -0
  31. data/lib/keytools/key.local.rb +259 -0
  32. data/lib/keytools/key.now.rb +402 -0
  33. data/lib/keytools/key.pair.rb +259 -0
  34. data/lib/keytools/key.pass.rb +120 -0
  35. data/lib/keytools/key.rb +585 -0
  36. data/lib/logging/gem.logging.rb +132 -0
  37. data/lib/modules/README.md +43 -0
  38. data/lib/modules/cryptology/aes-256.rb +154 -0
  39. data/lib/modules/cryptology/amalgam.rb +70 -0
  40. data/lib/modules/cryptology/blowfish.rb +130 -0
  41. data/lib/modules/cryptology/cipher.rb +207 -0
  42. data/lib/modules/cryptology/collect.rb +138 -0
  43. data/lib/modules/cryptology/crypt.io.rb +225 -0
  44. data/lib/modules/cryptology/engineer.rb +99 -0
  45. data/lib/modules/mappers/dictionary.rb +288 -0
  46. data/lib/modules/storage/coldstore.rb +186 -0
  47. data/lib/modules/storage/git.store.rb +399 -0
  48. data/lib/session/fact.finder.rb +334 -0
  49. data/lib/session/require.gem.rb +112 -0
  50. data/lib/session/time.stamp.rb +340 -0
  51. data/lib/session/user.home.rb +49 -0
  52. data/lib/usecase/cmd.rb +487 -0
  53. data/lib/usecase/config/README.md +57 -0
  54. data/lib/usecase/docker/README.md +146 -0
  55. data/lib/usecase/docker/docker.rb +49 -0
  56. data/lib/usecase/edit/README.md +43 -0
  57. data/lib/usecase/edit/delete.rb +46 -0
  58. data/lib/usecase/export.rb +40 -0
  59. data/lib/usecase/files/README.md +37 -0
  60. data/lib/usecase/files/eject.rb +56 -0
  61. data/lib/usecase/files/file_me.rb +78 -0
  62. data/lib/usecase/files/read.rb +169 -0
  63. data/lib/usecase/files/write.rb +89 -0
  64. data/lib/usecase/goto.rb +57 -0
  65. data/lib/usecase/id.rb +36 -0
  66. data/lib/usecase/import.rb +157 -0
  67. data/lib/usecase/init.rb +63 -0
  68. data/lib/usecase/jenkins/README.md +146 -0
  69. data/lib/usecase/jenkins/jenkins.rb +208 -0
  70. data/lib/usecase/login.rb +71 -0
  71. data/lib/usecase/logout.rb +28 -0
  72. data/lib/usecase/open.rb +71 -0
  73. data/lib/usecase/print.rb +40 -0
  74. data/lib/usecase/put.rb +81 -0
  75. data/lib/usecase/set.rb +44 -0
  76. data/lib/usecase/show.rb +138 -0
  77. data/lib/usecase/terraform/README.md +91 -0
  78. data/lib/usecase/terraform/terraform.rb +121 -0
  79. data/lib/usecase/token.rb +35 -0
  80. data/lib/usecase/update/README.md +55 -0
  81. data/lib/usecase/update/rename.rb +180 -0
  82. data/lib/usecase/use.rb +41 -0
  83. data/lib/usecase/verse.rb +20 -0
  84. data/lib/usecase/view.rb +71 -0
  85. data/lib/usecase/vpn/README.md +150 -0
  86. data/lib/usecase/vpn/vpn.ini +31 -0
  87. data/lib/usecase/vpn/vpn.rb +54 -0
  88. data/lib/version.rb +3 -0
  89. data/safedb.gemspec +34 -0
  90. metadata +193 -0
@@ -0,0 +1,340 @@
1
+ #!/usr/bin/ruby
2
+
3
+ module OpenSession
4
+
5
+ require 'singleton'
6
+
7
+ # This stamp sits at the centre of a fundamental DevOps pattern concerned
8
+ # with infrastructure provisioning and configuraion management.
9
+ #
10
+ # The central idea behind the pattern is to link every infrastructure
11
+ # object created during a session with a reference accurate to the nearest
12
+ # centi-second denoting the moment the software runtime (session) began.
13
+ class Stamp
14
+ include Singleton
15
+
16
+ attr_reader :time_now
17
+
18
+ # Return two digit [mo] month index from 01 to 12.
19
+ # @example 02 => in February
20
+ def self.mo
21
+ return Stamp.instance.time_now.strftime "%m"
22
+ end
23
+
24
+
25
+ # Return three character abbreviated month name.
26
+ # @example feb => in February
27
+ def self.mmm
28
+ return Stamp.instance.time_now.strftime( "%b" ).downcase
29
+ end
30
+
31
+
32
+ # Return three character abbreviated day of week.
33
+ # @example tue => on Tuesday
34
+ def self.ddd
35
+ return Stamp.instance.time_now.strftime( "%a" ).downcase
36
+ end
37
+
38
+
39
+ # Return two digit (character) hour of day from 00 to 23.
40
+ # @example 22 => between 22.00.00 and 22.59.59 inclusive
41
+ def self.hh
42
+ return Stamp.instance.time_now.strftime "%H"
43
+ end
44
+
45
+
46
+ # Return two digit minute of hour from [00] to [59].
47
+ def self.mm
48
+ return Stamp.instance.time_now.strftime "%M"
49
+ end
50
+
51
+
52
+ # Return two digit second of minute from [00] to [59].
53
+ def self.ss
54
+ return Stamp.instance.time_now.strftime "%S"
55
+ end
56
+
57
+
58
+ # Return a [3 digit] second and tenth of second
59
+ # representation.
60
+ #
61
+ # The final digit is derived from the 1000 sliced
62
+ # millisecond of second running from 000 to 999.
63
+ #
64
+ # <tt>Truncation (Not Rounding)</tt>
65
+ #
66
+ # The [final] digit is acquired by TRUNCATING
67
+ # (chopping off) the last 2 of the 3 millisecond
68
+ # digits. No rounding is applied.
69
+ #
70
+ # The 3 returned digits comprise of the
71
+ #
72
+ # - second of minute => 2 digits | [00] to [59] (and)
73
+ # - tenth of second => 1 digit from [0] to [9]
74
+ #
75
+ # @example
76
+ #
77
+ # => The time at the 562nd millisecond of the 49th
78
+ # second of the minute.
79
+ #
80
+ # => 3 chars
81
+ # => 495
82
+ def self.sst
83
+ millisec_string = Stamp.instance.time_now.strftime "%L"
84
+ return "#{ss}#{millisec_string[0]}"
85
+ end
86
+
87
+
88
+ # Return the [two] digit year (eg 19 for 2019).
89
+ # that we are currently in.
90
+ def self.yy
91
+ return Stamp.instance.time_now.strftime("%Y")[2..-1]
92
+ end
93
+
94
+
95
+ # Return the [four] digit year (eg 2019)
96
+ # that we are currently in.
97
+ def self.yyyy
98
+ return Stamp.instance.time_now.strftime("%Y")
99
+ end
100
+
101
+
102
+ # Return 3 digit julian day of year [001] to [366].
103
+ def self.jjj
104
+ return Stamp.instance.time_now.strftime "%j"
105
+ end
106
+
107
+
108
+ # [yymo_mmm] returns an amalgam of
109
+ #
110
+ # => the two-digit year
111
+ # => the two-digit month index (starting at 01)
112
+ # => a period (separator)
113
+ # => the abbreviated month name
114
+ #
115
+ # @example
116
+ # => 1908.aug
117
+ # => for August 2019
118
+ #
119
+ def self.yymo_mmm
120
+ return "#{yy}#{mo}.#{mmm}"
121
+ end
122
+
123
+
124
+ # Given two integer parameters (month index and 4 digit year) representing
125
+ # the month in question this method returns the [PREVIOUS MONTHS] character
126
+ # amalgam in the format [yymo_mmm] where
127
+ #
128
+ # => yy | previous month's two-digit year
129
+ # => mo | previous month's two-digit month index
130
+ # => . | a period (separator)
131
+ # => mmm | previous month's abbreviated month name
132
+ #
133
+ # -------------------
134
+ # Example 1 (Simple)
135
+ # -------------------
136
+ #
137
+ # returns char => 1907.jul
138
+ # 4 parameters => 8, 2019
139
+ # representing => August, 2019
140
+ #
141
+ # ----------------------
142
+ # Example 2 (Last Year)
143
+ # ----------------------
144
+ #
145
+ # returns char => 1812.dec
146
+ # 4 parameters => 1, 2019
147
+ # representing => January, 2019
148
+ def self.previous_month_chars this_month_index, this_4digit_year
149
+
150
+ prev_month_index = this_month_index == 1 ? 12 : ( this_month_index - 1 )
151
+ prev_2dig_mn_pad = sprintf '%02d', prev_month_index
152
+ prev_4digit_year = this_month_index == 1 ? ( this_4digit_year - 1 ) : this_4digit_year
153
+ prev_twodigit_yr = "#{prev_4digit_year.to_s}"[2..-1]
154
+ prev_months_name = Date::ABBR_MONTHNAMES[prev_month_index].downcase
155
+
156
+ return "#{prev_twodigit_yr}#{prev_2dig_mn_pad}.#{prev_months_name}"
157
+
158
+ end
159
+
160
+ # Using the current class time this method returns
161
+ # the character amalgam for the [PREVIOUS MONTH] in
162
+ # the format [yymo_mmm] where
163
+ #
164
+ # => yy | last month's two-digit year
165
+ # => mo | last month's two-digit month index
166
+ # => . | a period (separator)
167
+ # => mmm | last month's abbreviated month name
168
+ #
169
+ # -------------------
170
+ # Example 1 (Simple)
171
+ # -------------------
172
+ #
173
+ # returns => 1907.jul
174
+ # if this month is => August 2019
175
+ #
176
+ # ----------------------
177
+ # Example 2 (Last Year)
178
+ # ----------------------
179
+ #
180
+ # returns => 1812.dec
181
+ # if this month is => January 2019
182
+ def self.yymo_mmm_prev
183
+ return previous_month_chars mo.to_i, yyyy.to_i
184
+ end
185
+
186
+
187
+ # Return 5 digit amalgam of year and julian day.
188
+ # eg [19003] for [January 3rd 2019]
189
+ def self.yyjjj
190
+ return "#{yy}#{jjj}"
191
+ end
192
+
193
+
194
+ # Return the 4 digit amalgam of the hour and minute
195
+ # using the 24 hour clock.
196
+ #
197
+ # @example
198
+ # => 1525
199
+ # => 03:25 pm
200
+ def self.hhmm
201
+ return "#{hh}#{mm}"
202
+ end
203
+
204
+
205
+ # Return the time of day to a TENTH of a second accuracy.
206
+ # [8] characters will always be returned with the 5th one
207
+ # being the (period) separator.
208
+ #
209
+ # The first (separated) segment delivers a hhmm 24 hour
210
+ # clock representation of the stamped time.
211
+ #
212
+ # The 3 digits of the second segment comprise of
213
+ #
214
+ # second of minute => 2 digits | [00] to [59]
215
+ # tenth of second => 1 digit from [0] to [9]
216
+ #
217
+ # @example
218
+ # => The time at the 562nd millisecond of the 49th
219
+ # second of the 23rd minute of the 17th hour of
220
+ # the day ( 17:23:49.562 )
221
+ #
222
+ # => 8 chars
223
+ # => 1723.495
224
+ def self.hhmm_sst
225
+ return "#{hhmm}.#{sst}"
226
+ end
227
+
228
+
229
+ # Return a string timestampt that is a period separated
230
+ # amalgam of the 2 digit year, 3 digit julian day, 2 digit
231
+ # hour, 2 digit minute, 2 digit second and 1 digit rounded
232
+ # down tenth of second.
233
+ #
234
+ # @example
235
+ # => 19003.1025
236
+ # => 10:25 am on January 3rd 2019
237
+ #
238
+ #
239
+ # Return the time of day to a TENTH of a second accuracy.
240
+ # [8] characters will always be returned with the 5th one
241
+ # being the (period) separator.
242
+ #
243
+ # The first (separated) segment delivers a hhmm 24 hour
244
+ # clock representation of the stamped time.
245
+ #
246
+ # The 3 digits of the second segment comprise of
247
+ #
248
+ # - second of minute => 2 digits | [00] to [59]
249
+ # - tenth of second => 1 digit from [0] to [9]
250
+ #
251
+ # @example
252
+ # => The time at the 562nd millisecond of the 49th
253
+ # second of the 23rd minute of the 17th hour of
254
+ # the day ( 17:23:49.562 )
255
+ #
256
+ # => 8 chars
257
+ # => 1723.495
258
+ def self.yyjjj_hhmm_sst
259
+ return "#{yyjjj}.#{hhmm}.#{sst}"
260
+ end
261
+
262
+
263
+ # Return a string timestampt that is a period separated
264
+ # amalgam of the 2 digit year, 3 digit julian day, 2 digit
265
+ # hour, 2 digit minute, 2 digit second and <b>9 digit</b>
266
+ # nanosecond.
267
+ #
268
+ # @example
269
+ # return => 19003.1725.42.836592034
270
+ # 4 time => 17:25:42 am on January 3rd 2019
271
+ #
272
+ # As per the above example, the time returned
273
+ #
274
+ # - is the 836592034 <b>nanosecond</b>
275
+ # - of the 42nd <b>second</b>
276
+ # - of the 25th <b>minute</b>
277
+ # - of the 17th <b>hour</b>
278
+ # - of the 3rd <b>day</b>
279
+ # - of the 20th <b>year</b>
280
+ # - of the 21st <b>century</b>
281
+ #
282
+ # @return [String]
283
+ # Return the time of day to nanosecond accuracy.
284
+ # 23 characters are always returned with three (3) period
285
+ # separators at the 6th, 11th and 14th positions.
286
+ def self.yyjjj_hhmm_ss_nanosec
287
+ nanosec_str = Stamp.instance.time_now.strftime "%9N"
288
+ return "#{yyjjj}.#{hhmm}.#{ss}.#{nanosec_str}"
289
+ end
290
+
291
+
292
+ # Return the Rubyfied time zone being used.
293
+ def self.zone
294
+ return Stamp.instance.time_now.zone
295
+ end
296
+
297
+
298
+ # Log segments of time pertaining to the time stamp.
299
+ # @todo
300
+ # move method contents into test class
301
+ def self.log_instance_time
302
+
303
+ log.info(x) { "[stamp] -------------- => -------------------------------- #" }
304
+ log.info(x) { "[stamp] eco time stamp => [#{Stamp.instance.time_now.ctime}]" }
305
+ log.info(x) { "[stamp] -------------- => -------------------------------- #" }
306
+ log.info(x) { "[stamp] Univ Time Zone => #{zone}" }
307
+ log.info(x) { "[stamp] Month Index is => #{mo}" }
308
+ log.info(x) { "[stamp] Month Name is => #{mmm}" }
309
+ log.info(x) { "[stamp] Day Of Week is => #{ddd}" }
310
+ log.info(x) { "[stamp] -------------- => -------------------------------- #" }
311
+ log.info(x) { "[stamp] Two Digit Year => #{yy}" }
312
+ log.info(x) { "[stamp] Julian Cal Day => #{jjj}" }
313
+ log.info(x) { "[stamp] Yr and Jul Day => #{yyjjj}" }
314
+ log.info(x) { "[stamp] Hour of Theday => #{hh}" }
315
+ log.info(x) { "[stamp] Minute of Hour => #{mm}" }
316
+ log.info(x) { "[stamp] Hour + Minute => #{hhmm}" }
317
+ log.info(x) { "[stamp] Second of Min => #{ss}" }
318
+ log.info(x) { "[stamp] 600 Min Slices => #{sst}" }
319
+ log.info(x) { "[stamp] -------------- => -------------------------------- #" }
320
+ log.info(x) { "[stamp] The Time Stamp => #{yyjjj_hhmm_sst}" }
321
+ log.info(x) { "[stamp] -------------- => -------------------------------- #" }
322
+
323
+ end
324
+
325
+
326
+ # This singleton (one instance) class sets the time just once.
327
+ def initialize
328
+
329
+ @time_now = Time.now;
330
+
331
+ end
332
+
333
+
334
+ ############ Stamp.log_instance_time
335
+
336
+
337
+ end
338
+
339
+
340
+ end
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # coding: utf-8
4
+
5
+ # opensession contains basic behaviour for managing a client only
6
+ # (serverless) session. Configuration directives are read and written
7
+ # from an INI off the home directory that is created when the session
8
+ # is first initiated.
9
+ module OpenSession
10
+
11
+ # This singleton class ascertains the users home folder in a manner
12
+ # agnositic to whether the software is running on Linux or Windows.
13
+ class Home
14
+ include Singleton
15
+
16
+ # This static behaviour reads the [home folder] just once.
17
+ def self.dir
18
+ return Home.instance.folder
19
+ end
20
+
21
+ # This static behaviour reads the [username] just once.
22
+ def self.usr
23
+ return Home.instance.username
24
+ end
25
+
26
+ attr_reader :folder
27
+ attr_reader :username
28
+
29
+ # Ascertain the home folder location.
30
+ def initialize
31
+
32
+ # On Windows the home folder may end with [AppData/Roaming].
33
+ extraneous_path = "/AppData/Roaming"
34
+
35
+ @folder = Dir.home
36
+ @username = @folder.split("/").last
37
+ return unless Dir.home.end_with? extraneous_path
38
+
39
+ # Remove the tail [AppData/Roaming] from the home path.
40
+ @folder = Dir.home.gsub extraneous_path, ""
41
+ @username = @folder.split("/").last
42
+
43
+ end
44
+
45
+
46
+ end
47
+
48
+
49
+ end