opensecret 0.0.913 → 0.0.941
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/.yardopts +3 -0
- data/README.md +129 -19
- data/Rakefile +0 -9
- data/bin/opensecret +1 -1
- data/lib/{opensecret/plugins.io/cipher/crypto.rb → crypto/amalgam.rb} +6 -8
- data/lib/crypto/collect.rb +139 -0
- data/lib/crypto/engineer.rb +201 -0
- data/lib/crypto/verify.rb +33 -0
- data/lib/extension/array.rb +133 -0
- data/lib/{opensecret/additions → extension}/dir.rb +0 -0
- data/lib/extension/file.rb +56 -0
- data/lib/extension/hash.rb +33 -0
- data/lib/extension/string.rb +349 -0
- data/lib/factbase/facts.opensecret.io.ini +28 -0
- data/lib/logging/gem.logging.rb +133 -0
- data/lib/opensecret.rb +102 -45
- data/lib/opensecret/executors/crypt.keys/crypt.keys.ini +0 -53
- data/lib/session/{session.rb → attributes.rb} +60 -5
- data/lib/session/exceptions.rb +53 -0
- data/lib/session/fact.finder.rb +684 -0
- data/lib/session/user.home.rb +49 -0
- data/lib/usecase/usecase.rb +245 -0
- data/lib/usecase/usecases/init.rb +190 -0
- data/lib/usecase/usecases/on.rb +33 -0
- data/lib/usecase/usecases/safe.rb +95 -0
- data/lib/version.rb +1 -1
- metadata +22 -17
- data/lib/opensecret/additions/array.rb +0 -117
- data/lib/opensecret/additions/string.rb +0 -312
- data/lib/opensecret/commons/eco.cmdline.rb +0 -446
- data/lib/opensecret/eco.do.rb +0 -46
- data/lib/opensecret/plugins.io/error/eco.exceptions.rb +0 -24
- data/lib/opensecret/plugins.io/facts/fact.chars.rb +0 -66
- data/lib/opensecret/plugins.io/facts/fact.factor.rb +0 -156
- data/lib/opensecret/plugins.io/facts/fact.locator.rb +0 -105
- data/lib/opensecret/plugins.io/facts/fact.reader.rb +0 -137
- data/lib/opensecret/plugins.io/facts/fact.tree.rb +0 -661
- data/lib/opensecret/plugins.io/logs/log.object.rb +0 -89
- data/lib/opensecret/plugins.io/logs/logging.rb +0 -203
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
module OpenSecret
|
4
|
+
|
5
|
+
# This is the [On] usecase that is triggered when a user would like
|
6
|
+
# to start a locking (encryption) session.
|
7
|
+
#
|
8
|
+
# Pre-Conditions
|
9
|
+
#
|
10
|
+
# - [session.config.file] exists with domain,user,email,store_id => store_url
|
11
|
+
# -
|
12
|
+
# -
|
13
|
+
#
|
14
|
+
#
|
15
|
+
# Main Flow of Events
|
16
|
+
#
|
17
|
+
# -
|
18
|
+
# -
|
19
|
+
#
|
20
|
+
class On < OpenSession::UseCase
|
21
|
+
|
22
|
+
|
23
|
+
def execute
|
24
|
+
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
module OpenSecret
|
4
|
+
|
5
|
+
require "usecase/usecase"
|
6
|
+
require "session/attributes"
|
7
|
+
|
8
|
+
# This is the [On] usecase that is triggered when a user would like
|
9
|
+
# to start a locking (encryption) session.
|
10
|
+
#
|
11
|
+
# Pre-Conditions
|
12
|
+
#
|
13
|
+
# - [session.config.file] exists with domain,user,email,store_id => store_url
|
14
|
+
# -
|
15
|
+
# -
|
16
|
+
#
|
17
|
+
#
|
18
|
+
# Main Flow of Events
|
19
|
+
#
|
20
|
+
# -
|
21
|
+
# -
|
22
|
+
#
|
23
|
+
class Safe < OpenSession::UseCase
|
24
|
+
|
25
|
+
attr_writer :safe_path
|
26
|
+
@@context_name = "opensecret"
|
27
|
+
@@prime_name = "opensecret.safe"
|
28
|
+
|
29
|
+
|
30
|
+
def execute
|
31
|
+
|
32
|
+
|
33
|
+
OpenSession::Attributes.stash @@context_name, "safe", @safe_path
|
34
|
+
FileUtils.mkdir_p @safe_path unless File.exists? @safe_path
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def pre_validation
|
40
|
+
|
41
|
+
needs_chopping = @safe_path.end_with?("/") || @safe_path.end_with?("\\")
|
42
|
+
@safe_path = @safe_path.chop if needs_chopping
|
43
|
+
|
44
|
+
index_1st = @safe_path.index @@prime_name
|
45
|
+
index_2nd = @safe_path.rindex @@prime_name
|
46
|
+
|
47
|
+
xtra_msg = "Text [ #{@@prime_name} ] can only appear once in [ #{@safe_path} ]."
|
48
|
+
raise SafePrimeNameRepeated.new xtra_msg, @safe_path unless index_1st == index_2nd
|
49
|
+
|
50
|
+
unless @safe_path.end_with? @@prime_name
|
51
|
+
|
52
|
+
if @safe_path.include? @@prime_name
|
53
|
+
prime_name_end_index = @safe_path.index(@@prime_name) + @@prime_name.length
|
54
|
+
@safe_path = @safe_path[0..prime_name_end_index]
|
55
|
+
else
|
56
|
+
@safe_path = File.join @safe_path, @@prime_name
|
57
|
+
end
|
58
|
+
|
59
|
+
ends_with_prime = @safe_path.end_with? @@prime_name
|
60
|
+
not_at_end_msg = "Text [#{@@prime_name} ] is not at end of [ #{@safe_path} ]."
|
61
|
+
raise SafePrimeNameNotAtEnd.new not_at_end_msg, @safe_path unless ends_with_prime
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
if( File.exists?( @safe_path ) && !(File.directory? @safe_path) )
|
66
|
+
raise SafeDirectoryIsFile.new "the [safe] directory path points to a file", @safe_path
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
# The safe_path instance attribute must be configured within
|
73
|
+
# the context configuration file using a keyname of "safe".
|
74
|
+
#
|
75
|
+
# @raise ArgumentError for any one of a long list of reasons that
|
76
|
+
# cause the key value to not be retrieved. This can range from
|
77
|
+
# non-existent directories and files, non readable files, incorrect
|
78
|
+
# configurations right down to missing keys or even missing values.
|
79
|
+
def post_validation
|
80
|
+
|
81
|
+
configured_path = OpenSession::Attributes.instance.get_value @@context_name, "safe"
|
82
|
+
path_string_1 = " path 1 => #{configured_path}"
|
83
|
+
path_string_2 = " path 2 => #{@safe_path}"
|
84
|
+
mismatch_path = "Path mismatch to opensecret [safe] detected."
|
85
|
+
err_msg = "\n" + mismatch_path + "\n" + path_string_1 + "\n" + path_string_2 + "\n"
|
86
|
+
|
87
|
+
raise RuntimeError, err_msg unless @safe_path.eql? configured_path
|
88
|
+
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opensecret
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.941
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Apollo Akora
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inifile
|
@@ -93,6 +93,7 @@ extra_rdoc_files: []
|
|
93
93
|
files:
|
94
94
|
- ".gitignore"
|
95
95
|
- ".travis.yml"
|
96
|
+
- ".yardopts"
|
96
97
|
- CODE_OF_CONDUCT.md
|
97
98
|
- Gemfile
|
98
99
|
- LICENSE.txt
|
@@ -100,15 +101,21 @@ files:
|
|
100
101
|
- Rakefile
|
101
102
|
- bin/opensecret
|
102
103
|
- lib/config.opensecret.ini
|
104
|
+
- lib/crypto/amalgam.rb
|
105
|
+
- lib/crypto/collect.rb
|
106
|
+
- lib/crypto/engineer.rb
|
107
|
+
- lib/crypto/verify.rb
|
108
|
+
- lib/extension/array.rb
|
109
|
+
- lib/extension/dir.rb
|
110
|
+
- lib/extension/file.rb
|
111
|
+
- lib/extension/hash.rb
|
112
|
+
- lib/extension/string.rb
|
113
|
+
- lib/factbase/facts.opensecret.io.ini
|
114
|
+
- lib/logging/gem.logging.rb
|
103
115
|
- lib/opensecret.rb
|
104
|
-
- lib/opensecret/additions/array.rb
|
105
|
-
- lib/opensecret/additions/dir.rb
|
106
|
-
- lib/opensecret/additions/string.rb
|
107
|
-
- lib/opensecret/commons/eco.cmdline.rb
|
108
116
|
- lib/opensecret/commons/eco.faculty.rb
|
109
117
|
- lib/opensecret/commons/eco.system.rb
|
110
118
|
- lib/opensecret/commons/eco.systems.rb
|
111
|
-
- lib/opensecret/eco.do.rb
|
112
119
|
- lib/opensecret/executors/crypt.keys/crypt.keys.ini
|
113
120
|
- lib/opensecret/executors/crypt.keys/crypt.keys.rb
|
114
121
|
- lib/opensecret/executors/decrypt/decrypt.ini
|
@@ -123,19 +130,17 @@ files:
|
|
123
130
|
- lib/opensecret/factbase/readme.md
|
124
131
|
- lib/opensecret/factbase/retired.facts/maven.database.ide.facts.ini
|
125
132
|
- lib/opensecret/factbase/retired.facts/s3-upload-block-facts.ini
|
126
|
-
- lib/opensecret/plugins.io/cipher/crypto.rb
|
127
|
-
- lib/opensecret/plugins.io/error/eco.exceptions.rb
|
128
|
-
- lib/opensecret/plugins.io/facts/fact.chars.rb
|
129
|
-
- lib/opensecret/plugins.io/facts/fact.factor.rb
|
130
|
-
- lib/opensecret/plugins.io/facts/fact.locator.rb
|
131
|
-
- lib/opensecret/plugins.io/facts/fact.reader.rb
|
132
|
-
- lib/opensecret/plugins.io/facts/fact.tree.rb
|
133
133
|
- lib/opensecret/plugins.io/file/file.rb
|
134
134
|
- lib/opensecret/plugins.io/git/git.flow.rb
|
135
|
-
- lib/
|
136
|
-
- lib/
|
137
|
-
- lib/session/
|
135
|
+
- lib/session/attributes.rb
|
136
|
+
- lib/session/exceptions.rb
|
137
|
+
- lib/session/fact.finder.rb
|
138
138
|
- lib/session/time.stamp.rb
|
139
|
+
- lib/session/user.home.rb
|
140
|
+
- lib/usecase/usecase.rb
|
141
|
+
- lib/usecase/usecases/init.rb
|
142
|
+
- lib/usecase/usecases/on.rb
|
143
|
+
- lib/usecase/usecases/safe.rb
|
139
144
|
- lib/version.rb
|
140
145
|
- opensecret.gemspec
|
141
146
|
homepage: https://www.eco-platform.co.uk
|
@@ -1,117 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
|
3
|
-
# --
|
4
|
-
# -- Reopen the core ruby Array class and add the below methods to it.
|
5
|
-
# --
|
6
|
-
# -- Case Sensitivity rules for [ALL] the below methods that are
|
7
|
-
# -- added to the core Ruby string class.
|
8
|
-
# --
|
9
|
-
# -- For case insensitive behaviour make sure you downcase both the
|
10
|
-
# -- string object and the parameter strings (or strings within
|
11
|
-
# -- other parameter objects, like arrays and hashes).
|
12
|
-
# --
|
13
|
-
class Array
|
14
|
-
|
15
|
-
# --
|
16
|
-
# -- Get the text [in between] this and that delimeter [exclusively].
|
17
|
-
# -- Exclusively means the returned text [does not] include either of
|
18
|
-
# -- the matched delimeters (although an unmatched instance of [this]
|
19
|
-
# -- delimeter may appear in the in-between text).
|
20
|
-
# --
|
21
|
-
# -- --------------------
|
22
|
-
# -- Multiple Delimiters
|
23
|
-
# -- --------------------
|
24
|
-
# --
|
25
|
-
# -- When multiple delimiters exist, the text returned is in between the
|
26
|
-
# --
|
27
|
-
# -- [a] - first occurrence of [this] delimeter AND the
|
28
|
-
# -- [b] - 1st occurrence of [that] delimeter [AFTER] the 1st delimiter
|
29
|
-
# --
|
30
|
-
# -- Instances of [that] delimiter occurring before [this] are ignored.
|
31
|
-
# -- The text could contain [this] delimeter instances but is guaranteed
|
32
|
-
# -- not to contain a [that] delimeter.
|
33
|
-
# --
|
34
|
-
# -- -----------
|
35
|
-
# -- Parameters
|
36
|
-
# -- -----------
|
37
|
-
# --
|
38
|
-
# -- this_delimiter : begin delimeter (not included in returned string)
|
39
|
-
# -- that_delimiter : end delimeter (not included in returned string)
|
40
|
-
# --
|
41
|
-
# -- -----------
|
42
|
-
# -- Exceptions
|
43
|
-
# -- -----------
|
44
|
-
# --
|
45
|
-
# -- An exception (error) will be thrown if
|
46
|
-
# --
|
47
|
-
# -- => any nil (or empties) exist in the input parameters
|
48
|
-
# -- => [this] delimeter does not appear in the in_string
|
49
|
-
# -- => [that] delimeter does not appear after [this] one
|
50
|
-
# --
|
51
|
-
def before_and_after begin_delimeter, end_delimeter
|
52
|
-
|
53
|
-
Throw.if_nil_or_empty_strings [ self, begin_delimeter, end_delimeter ]
|
54
|
-
|
55
|
-
before_after_lines = []
|
56
|
-
in_middle_bit = false
|
57
|
-
|
58
|
-
self.each do |candidate_line|
|
59
|
-
|
60
|
-
is_middle_boundary = !in_middle_bit && candidate_line.downcase.include?(begin_delimeter.downcase)
|
61
|
-
if is_middle_boundary
|
62
|
-
in_middle_bit = true
|
63
|
-
next
|
64
|
-
end
|
65
|
-
|
66
|
-
unless in_middle_bit
|
67
|
-
before_after_lines.push candidate_line
|
68
|
-
next
|
69
|
-
end
|
70
|
-
|
71
|
-
#--
|
72
|
-
#-- Now we are definitely in the middle bit.
|
73
|
-
#-- Let's check for the middle end delimeter
|
74
|
-
#--
|
75
|
-
if candidate_line.downcase.include? end_delimeter.downcase
|
76
|
-
in_middle_bit = false
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
return before_after_lines
|
82
|
-
|
83
|
-
end
|
84
|
-
|
85
|
-
|
86
|
-
def middlle_bit begin_delimeter, end_delimeter
|
87
|
-
|
88
|
-
Throw.if_nil_or_empty_strings [ self, begin_delimeter, end_delimeter ]
|
89
|
-
|
90
|
-
middle_lines = []
|
91
|
-
in_middle_bit = false
|
92
|
-
|
93
|
-
self.each do |candidate_line|
|
94
|
-
|
95
|
-
is_middle_boundary = !in_middle_bit && candidate_line.downcase.include?(begin_delimeter.downcase)
|
96
|
-
if is_middle_boundary
|
97
|
-
in_middle_bit = true
|
98
|
-
next
|
99
|
-
end
|
100
|
-
|
101
|
-
end_of_middle = in_middle_bit && candidate_line.downcase.include?(end_delimeter.downcase)
|
102
|
-
return middle_lines if end_of_middle
|
103
|
-
|
104
|
-
#--
|
105
|
-
#-- We are definitely in the middle bit.
|
106
|
-
#--
|
107
|
-
middle_lines.push(candidate_line) if in_middle_bit
|
108
|
-
|
109
|
-
end
|
110
|
-
|
111
|
-
unreachable_str = "This point should be unreachable unless facts are ended."
|
112
|
-
raise RuntimeError.new unreachable_str
|
113
|
-
|
114
|
-
end
|
115
|
-
|
116
|
-
|
117
|
-
end
|
@@ -1,312 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
|
3
|
-
# --
|
4
|
-
# -- Reopen the core ruby String class and add the below methods to it.
|
5
|
-
# --
|
6
|
-
# -- Case Sensitivity rules for [ALL] the below methods that are
|
7
|
-
# -- added to the core Ruby string class.
|
8
|
-
# --
|
9
|
-
# -- For case insensitive behaviour make sure you downcase both the
|
10
|
-
# -- string object and the parameter strings (or strings within
|
11
|
-
# -- other parameter objects, like arrays and hashes).
|
12
|
-
# --
|
13
|
-
class String
|
14
|
-
|
15
|
-
# --
|
16
|
-
# -- Get the text [in between] this and that delimeter [exclusively].
|
17
|
-
# -- Exclusively means the returned text [does not] include either of
|
18
|
-
# -- the matched delimeters (although an unmatched instance of [this]
|
19
|
-
# -- delimeter may appear in the in-between text).
|
20
|
-
# --
|
21
|
-
# -- --------------------
|
22
|
-
# -- Multiple Delimiters
|
23
|
-
# -- --------------------
|
24
|
-
# --
|
25
|
-
# -- When multiple delimiters exist, the text returned is in between the
|
26
|
-
# --
|
27
|
-
# -- [a] - first occurrence of [this] delimeter AND the
|
28
|
-
# -- [b] - 1st occurrence of [that] delimeter [AFTER] the 1st delimiter
|
29
|
-
# --
|
30
|
-
# -- Instances of [that] delimiter occurring before [this] are ignored.
|
31
|
-
# -- The text could contain [this] delimeter instances but is guaranteed
|
32
|
-
# -- not to contain a [that] delimeter.
|
33
|
-
# --
|
34
|
-
# -- -----------
|
35
|
-
# -- Parameters
|
36
|
-
# -- -----------
|
37
|
-
# --
|
38
|
-
# -- this_delimiter : begin delimeter (not included in returned string)
|
39
|
-
# -- that_delimiter : end delimeter (not included in returned string)
|
40
|
-
# --
|
41
|
-
# -- -----------
|
42
|
-
# -- Exceptions
|
43
|
-
# -- -----------
|
44
|
-
# --
|
45
|
-
# -- An exception (error) will be thrown if
|
46
|
-
# --
|
47
|
-
# -- => any nil (or empties) exist in the input parameters
|
48
|
-
# -- => [this] delimeter does not appear in the in_string
|
49
|
-
# -- => [that] delimeter does not appear after [this] one
|
50
|
-
# --
|
51
|
-
def in_between this_delimeter, that_delimeter
|
52
|
-
|
53
|
-
Throw.if_nil_or_empty_strings [ self, this_delimeter, that_delimeter ]
|
54
|
-
|
55
|
-
scanner_1 = StringScanner.new self
|
56
|
-
scanner_1.scan_until /#{this_delimeter}/
|
57
|
-
scanner_2 = StringScanner.new scanner_1.post_match
|
58
|
-
scanner_2.scan_until /#{that_delimeter}/
|
59
|
-
|
60
|
-
in_between_text = scanner_2.pre_match.strip
|
61
|
-
log.info(ere){ in_between_text }
|
62
|
-
|
63
|
-
return in_between_text
|
64
|
-
|
65
|
-
# --> file_text = File.read "c:/Users/apollo13/mirror.techwiki/documents/collaboration-tech/gollum/gollum-certbot-ssl.md"
|
66
|
-
|
67
|
-
# --> this_delimeter = "<!-- facts"
|
68
|
-
# --> that_delimeter = "-->"
|
69
|
-
|
70
|
-
# --> scanner = StringScanner.new file_text
|
71
|
-
# --> log.info(ere){ "1st Delimiter => #{this_delimeter}" }
|
72
|
-
# --> log.info(ere){ "2nd Delimiter => #{that_delimeter}" }
|
73
|
-
# --> before_text = scanner.scan_until /#{this_delimeter}/
|
74
|
-
# --> post_match_text = scanner.post_match
|
75
|
-
# --> scanner2 = StringScanner.new post_match_text
|
76
|
-
# --> scanner2.scan_until /#{that_delimeter}/
|
77
|
-
# --> best_text = scanner2.pre_match.strip
|
78
|
-
|
79
|
-
# --> best_text = Strings.in_between file_text, this_delimeter, that_delimeter
|
80
|
-
|
81
|
-
# --> log.info(ere){ "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" }
|
82
|
-
# --> log.info(ere){ "What We Want" }
|
83
|
-
# --> log.info(ere){ "======================================================" }
|
84
|
-
# --> log.info(ere){ best_text }
|
85
|
-
# --> log.info(ere){ "======================================================" }
|
86
|
-
|
87
|
-
# --> exit
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
|
92
|
-
# --
|
93
|
-
# -- Return true if the [little string] within this
|
94
|
-
# -- string object is both
|
95
|
-
# --
|
96
|
-
# -- a] topped by the parameter prefix AND
|
97
|
-
# -- b] tailed by the parameter postfix
|
98
|
-
# --
|
99
|
-
# -- -----------------------------------------
|
100
|
-
# -- In the below example [true] is returned
|
101
|
-
# -- -----------------------------------------
|
102
|
-
# --
|
103
|
-
# -- This [String] => "Hey [<-secrets->] are juicy."
|
104
|
-
# -- little string => "secrets"
|
105
|
-
# -- topped string => "[<-"
|
106
|
-
# -- tailed string => "->]"
|
107
|
-
# --
|
108
|
-
# -- Why true? Because the little string "secret" is
|
109
|
-
# -- (wrapped) topped by "[<-" and tailed by "->]"
|
110
|
-
# --
|
111
|
-
# -- -----------------------------------------
|
112
|
-
# -- Assumptions | Constraints | Boundaries
|
113
|
-
# -- -----------------------------------------
|
114
|
-
# --
|
115
|
-
# -- - all matches are [case sensitive]
|
116
|
-
# -- - this string must contain little_str
|
117
|
-
# -- - one strike and its true
|
118
|
-
# -- (if little string appears more than once)
|
119
|
-
# -- so => "all secrets, most [<-secrets->] r juicy"
|
120
|
-
# -- => true as long as (at least) one is wrapped
|
121
|
-
# --
|
122
|
-
# --
|
123
|
-
def has_wrapped? little_str, prefix, postfix
|
124
|
-
|
125
|
-
return self.include?( prefix + little_str + postfix )
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
|
130
|
-
# --
|
131
|
-
# -- Sandwich the first occurrence of a substring in
|
132
|
-
# -- this string with the specified pre and postfix.
|
133
|
-
# --
|
134
|
-
# -- This string contains the little string and an
|
135
|
-
# -- IN-PLACE change is performed with the first
|
136
|
-
# -- occurrence of the little string being prefixed
|
137
|
-
# -- and postfixed with the 2 parameter strings.
|
138
|
-
# --
|
139
|
-
# -- ----------------------------------
|
140
|
-
# -- Example of sandwiching [wrapping]
|
141
|
-
# -- ----------------------------------
|
142
|
-
# --
|
143
|
-
# -- [String] => "Hey secrets are juicy."
|
144
|
-
# -- [To_Wrap] => "secrets"
|
145
|
-
# -- [Prefix] => "[<-"
|
146
|
-
# -- [Postfix] => "->]"
|
147
|
-
# --
|
148
|
-
# -- [String] => "Hey [<-secrets->] are juicy."
|
149
|
-
# --
|
150
|
-
# -- This string IS changed in place.
|
151
|
-
# --
|
152
|
-
def sandwich_substr to_wrap_str, prefix, postfix
|
153
|
-
|
154
|
-
occurs_index = self.downcase.index to_wrap_str.downcase
|
155
|
-
self.insert occurs_index, prefix
|
156
|
-
shifted_index = occurs_index + prefix.length + to_wrap_str.length
|
157
|
-
self.insert shifted_index, postfix
|
158
|
-
|
159
|
-
end
|
160
|
-
|
161
|
-
|
162
|
-
# --
|
163
|
-
# -- Return [TRUE] if this string includes [every word] harboured
|
164
|
-
# -- by the parameter array, else return [FALSE]. The "include"
|
165
|
-
# -- is a case-sensitive search.
|
166
|
-
# --
|
167
|
-
# -- -----------
|
168
|
-
# -- Parameter
|
169
|
-
# -- -----------
|
170
|
-
# --
|
171
|
-
# -- word_array : array of string words for the inclusivity test
|
172
|
-
# --
|
173
|
-
# -- --------------------------------
|
174
|
-
# -- Dependencies and Assumptions
|
175
|
-
# -- --------------------------------
|
176
|
-
# --
|
177
|
-
# -- the parameter string is not nil
|
178
|
-
# -- array can be [empty] but not nil
|
179
|
-
# -- array contents are neither nil nor empty
|
180
|
-
# --
|
181
|
-
def includes_all? word_array
|
182
|
-
|
183
|
-
Throw.if_nil self
|
184
|
-
Throw.if_nil word_array
|
185
|
-
|
186
|
-
word_array.each do |word|
|
187
|
-
|
188
|
-
Throw.if_nil word
|
189
|
-
return false unless self.include? word
|
190
|
-
|
191
|
-
end
|
192
|
-
|
193
|
-
return true
|
194
|
-
|
195
|
-
end
|
196
|
-
|
197
|
-
|
198
|
-
# --
|
199
|
-
# -- return true if the string includes [ANY] word within the
|
200
|
-
# -- parameter array, else return false. The "include" is done
|
201
|
-
# -- as a case-sensitive search.
|
202
|
-
# --
|
203
|
-
# -- -----------
|
204
|
-
# -- Parameter
|
205
|
-
# -- -----------
|
206
|
-
# --
|
207
|
-
# -- word_array : array of string words for the inclusivity test
|
208
|
-
# --
|
209
|
-
# -- --------------------------------
|
210
|
-
# -- Dependencies and Assumptions
|
211
|
-
# -- --------------------------------
|
212
|
-
# --
|
213
|
-
# -- array can be [empty] but not nil
|
214
|
-
# -- array contents are neither nil nor empty
|
215
|
-
# --
|
216
|
-
def includes_any? word_array
|
217
|
-
|
218
|
-
Throw.if_nil self
|
219
|
-
Throw.if_nil word_array
|
220
|
-
|
221
|
-
word_array.each do |word|
|
222
|
-
|
223
|
-
Throw.if_nil word
|
224
|
-
return true if self.include? word
|
225
|
-
|
226
|
-
end
|
227
|
-
|
228
|
-
return false
|
229
|
-
|
230
|
-
end
|
231
|
-
|
232
|
-
|
233
|
-
# --
|
234
|
-
# -- Encrypt this string with the parameter encryption/decryption key
|
235
|
-
# -- and return the encrypted text as a new string.
|
236
|
-
# --
|
237
|
-
# -- decrypt_key => the key that will decrypt the output string
|
238
|
-
# --
|
239
|
-
# --
|
240
|
-
def encrypt decrypt_key
|
241
|
-
|
242
|
-
## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
|
243
|
-
## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
|
244
|
-
## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
|
245
|
-
## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
|
246
|
-
|
247
|
-
###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
|
248
|
-
###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
|
249
|
-
###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
|
250
|
-
###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
|
251
|
-
###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
|
252
|
-
###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
|
253
|
-
###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
|
254
|
-
###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
|
255
|
-
|
256
|
-
cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC').encrypt
|
257
|
-
cipher.key = Digest::SHA1.hexdigest decrypt_key
|
258
|
-
crypted = cipher.update(self) + cipher.final
|
259
|
-
encrypted_text = crypted.unpack('H*')[0].upcase
|
260
|
-
|
261
|
-
return encrypted_text
|
262
|
-
|
263
|
-
end
|
264
|
-
|
265
|
-
|
266
|
-
# --
|
267
|
-
# -- Decrypt this string with the parameter encryption/decryption key
|
268
|
-
# -- and return the decrypted text as a new string.
|
269
|
-
# --
|
270
|
-
# -- encrypt_key => the key the input string was encrypted with
|
271
|
-
# --
|
272
|
-
# --
|
273
|
-
def decrypt encrypt_key
|
274
|
-
|
275
|
-
## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
|
276
|
-
## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
|
277
|
-
## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
|
278
|
-
## ----> Write a RE-CRYPT method that goes through a folder - decrypting and recrypting
|
279
|
-
|
280
|
-
###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
|
281
|
-
###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
|
282
|
-
###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
|
283
|
-
###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
|
284
|
-
###### ON Linux improve by changing to OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
|
285
|
-
###### ON Linux improve by changing to Digest::SHA2.hexdigest decrypt_key
|
286
|
-
|
287
|
-
cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC').decrypt
|
288
|
-
cipher.key = Digest::SHA1.hexdigest encrypt_key
|
289
|
-
uncrypted = [self].pack("H*").unpack("C*").pack("c*")
|
290
|
-
decrypted_text = cipher.update(uncrypted) + cipher.final
|
291
|
-
|
292
|
-
return decrypted_text
|
293
|
-
|
294
|
-
end
|
295
|
-
|
296
|
-
|
297
|
-
# --
|
298
|
-
# -- Log the string which is expected to be delineated.
|
299
|
-
# -- If the string originated from a file it will be logged
|
300
|
-
# -- line by line. If no line delineation the string will be
|
301
|
-
# -- dumped just as a blob.
|
302
|
-
# --
|
303
|
-
def log_lines
|
304
|
-
|
305
|
-
self.each_line do |line|
|
306
|
-
clean_line = line.chomp.gsub("\\n","")
|
307
|
-
log.info(ere) { line } if clean_line.length > 0
|
308
|
-
end
|
309
|
-
|
310
|
-
end
|
311
|
-
|
312
|
-
end
|