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
@@ -1,89 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
|
3
|
-
# --
|
4
|
-
# -- Log common objects such as
|
5
|
-
# --
|
6
|
-
# -- - files
|
7
|
-
# -- - maps
|
8
|
-
# --
|
9
|
-
# --
|
10
|
-
class LogObject
|
11
|
-
|
12
|
-
# --
|
13
|
-
# -- Log the file whose full path is given in the 1st parameter.
|
14
|
-
# -- The string context is included in the logs which should explain
|
15
|
-
# -- the whys and wherefores of the file.
|
16
|
-
# --
|
17
|
-
# -- An exception is thrown if the file is not found.
|
18
|
-
# --
|
19
|
-
def self.file file_path, file_context
|
20
|
-
|
21
|
-
Throw.if_not_exists file_path
|
22
|
-
|
23
|
-
log.debug(ere) { "# -- ------------------------------------------------------------------------ #" }
|
24
|
-
log.debug(ere) { "# -- ------------------------------------------------------------------------ #" }
|
25
|
-
log.debug(ere) { "# -- The File Path to Log => #{file_path}" }
|
26
|
-
|
27
|
-
hr_file_size = PrettyPrint.byte_size( File.size(file_path) )
|
28
|
-
dotless_extension = File.extname( file_path )[1..-1]
|
29
|
-
parent_dir_name = File.basename( File.dirname( file_path ) )
|
30
|
-
file_name = File.basename file_path
|
31
|
-
is_zip = dotless_extension.eql? "zip"
|
32
|
-
|
33
|
-
log.debug(ere) { "# -- ------------------------------------------------------------------------ #" }
|
34
|
-
log.debug(ere) { "# -- File Name => #{file_name}" }
|
35
|
-
log.debug(ere) { "# -- File Size => #{hr_file_size}" }
|
36
|
-
log.debug(ere) { "# -- File Type => #{file_context}" }
|
37
|
-
log.debug(ere) { "# -- In Folder => #{parent_dir_name}" }
|
38
|
-
log.debug(ere) { "# -- ------------------------------------------------------------------------ #" }
|
39
|
-
|
40
|
-
log.debug(ere) { "File #{file_name} is a zip (binary) file." } if is_zip
|
41
|
-
return if is_zip
|
42
|
-
|
43
|
-
File.open( file_path, "r") do | file_obj |
|
44
|
-
line_no = 1
|
45
|
-
file_obj.each_line do | file_line |
|
46
|
-
line_num = sprintf '%03d', line_no
|
47
|
-
clean_line = file_line.chomp.strip
|
48
|
-
log.debug(ere) { "# -- [#{line_num}] - #{clean_line}" }
|
49
|
-
line_no += 1
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
log.debug(ere) { "# -- ------------------------------------------------------------------------ #" }
|
54
|
-
log.debug(ere) { "# -- [#{file_context}] End of File [ #{File.basename(file_path)} ]" }
|
55
|
-
log.debug(ere) { "# -- ------------------------------------------------------------------------ #" }
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
# --
|
61
|
-
# -- Log map with a key-value pair on each line.
|
62
|
-
# --
|
63
|
-
# -- Parameter
|
64
|
-
# -- the_map : the map to log
|
65
|
-
# --
|
66
|
-
# -- Dependencies and Assumptions
|
67
|
-
# -- the map has been instantiated (not nil)
|
68
|
-
# --
|
69
|
-
def self.map the_map
|
70
|
-
|
71
|
-
return if the_map.nil?
|
72
|
-
|
73
|
-
log.debug(ere) { "# --- ----------------------------------------------" }
|
74
|
-
log.debug(ere) { "# --- Map has [#{the_map.length}] key/value pairs." }
|
75
|
-
log.debug(ere) { "# --- ----------------------------------------------" }
|
76
|
-
|
77
|
-
the_map.each do |the_key, the_value|
|
78
|
-
|
79
|
-
padded_key = sprintf '%-33s', the_key
|
80
|
-
log.debug(ere) { "# --- #{padded_key} => #{the_value}" }
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
log.debug(ere) { "# --- ----------------------------------------------" }
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
end
|
@@ -1,203 +0,0 @@
|
|
1
|
-
# --
|
2
|
-
# -- [MIXIN] magic is deployed to hand out DevOps quality logging
|
3
|
-
# -- features to any class that includes the logging module.
|
4
|
-
# --
|
5
|
-
# -- When logging facilities are not ready we need to log just to
|
6
|
-
# -- stdout but when they are we need to use them.
|
7
|
-
# --
|
8
|
-
# -- mixin power enables one class to give the logfile path and all
|
9
|
-
# -- classes will suddenly retrieve a another logger and use that.
|
10
|
-
# --
|
11
|
-
# -- include Logging
|
12
|
-
# -- def doImportant
|
13
|
-
# -- log.warn(ere) "unhappy about doing this"
|
14
|
-
# -- do_anyway
|
15
|
-
# -- log.debug(ere) "all good it was okay"
|
16
|
-
# -- end
|
17
|
-
# --
|
18
|
-
# -- -----------------------
|
19
|
-
# -- What are Mixins?
|
20
|
-
# -- -----------------------
|
21
|
-
# --
|
22
|
-
# -- Refer to the below link for excellent coverage of mixins.
|
23
|
-
# -- http://ruby-doc.com/docs/ProgrammingRuby/html/tut_modules.html
|
24
|
-
# --
|
25
|
-
module Logging
|
26
|
-
|
27
|
-
@@log_path = nil
|
28
|
-
@@log_class = nil
|
29
|
-
|
30
|
-
# --
|
31
|
-
# -- Classes that include (MIXIN) this logging module will
|
32
|
-
# -- have access to this logger method.
|
33
|
-
# --
|
34
|
-
# -- [memoization] is implemented here for performance and
|
35
|
-
# -- will only initiate a logger under 2 circumstances
|
36
|
-
# --
|
37
|
-
# -- [1] - the first call (returns a STDOUT logger)
|
38
|
-
# -- [2] - the call after the logfile path is set
|
39
|
-
# -- (returns a more sophisticated logger)
|
40
|
-
# --
|
41
|
-
def log
|
42
|
-
|
43
|
-
@@log_class ||= get_logger
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
# --
|
49
|
-
# -- log.info(ere) {i woz ere}
|
50
|
-
# --
|
51
|
-
# -- [ere] is borrowed from the common graffiti phrase (i woz ere)
|
52
|
-
# --
|
53
|
-
# -- In software terms it allows the logger to print 3 crucial
|
54
|
-
# -- pieces of information for the troubleshooter (detective) to
|
55
|
-
# -- determine who called the logger (who was here). The
|
56
|
-
# --
|
57
|
-
# -- [1] - [module name] of the caller
|
58
|
-
# -- [2] - [method name] the call came from
|
59
|
-
# -- [3] - [line number] of the call
|
60
|
-
# --
|
61
|
-
# --
|
62
|
-
def ere
|
63
|
-
|
64
|
-
module_name = File.basename caller_locations(1,1).first.absolute_path, ".rb"
|
65
|
-
method_name = caller_locations(1,1).first.base_label
|
66
|
-
line_number = caller_locations(1,1).first.lineno
|
67
|
-
|
68
|
-
"#{module_name} | #{method_name} | (line #{line_number}) "
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
# --
|
73
|
-
# -- If logger is used at the [BEGINNING] when
|
74
|
-
# -- the runtime logfile path has not yet been
|
75
|
-
# -- ascertained then STDOUT is used.
|
76
|
-
# --
|
77
|
-
# -- However if we have been informed (via the
|
78
|
-
# -- set_logfile_path) that the logfile path is
|
79
|
-
# -- now known the logger returned will be set
|
80
|
-
# -- to log to the specified file.
|
81
|
-
# --
|
82
|
-
# -- [memoization] should be used so that this
|
83
|
-
# -- method gets called only [TWICE].
|
84
|
-
# --
|
85
|
-
# -- [1] - at the [beginning] when the logfile path is not known
|
86
|
-
# -- [2] - just [after] the logfile dir is evaluated and created
|
87
|
-
# --
|
88
|
-
def get_logger
|
89
|
-
|
90
|
-
expensive_initializr = "EXPENSIVE(x2) => This log message should only appear [TWICE]."
|
91
|
-
Logger.new(STDOUT).warn "#{expensive_initializr}"
|
92
|
-
|
93
|
-
return get_stdout_logger if @@log_path.nil?
|
94
|
-
|
95
|
-
file_logger = Logger.new( Logging.initializr_str )
|
96
|
-
original_formatter = Logger::Formatter.new
|
97
|
-
|
98
|
-
file_logger.formatter = proc { |severity, datetime, progname, msg|
|
99
|
-
######## original_formatter.call(severity, datetime, progname, msg.dump.chomp.strip.delete("\"\\"))
|
100
|
-
original_formatter.call( severity, datetime, progname, msg.dump.chomp.strip )
|
101
|
-
}
|
102
|
-
|
103
|
-
if CmdLine.has? "--debug" then
|
104
|
-
file_logger.level = Logger::DEBUG
|
105
|
-
else
|
106
|
-
file_logger.level = Logger::INFO
|
107
|
-
end
|
108
|
-
|
109
|
-
return file_logger
|
110
|
-
|
111
|
-
end
|
112
|
-
|
113
|
-
|
114
|
-
# --
|
115
|
-
# -- Get the logger class initiaze string.
|
116
|
-
# -- The OS platform "Windows" vs "Linux" dictates
|
117
|
-
# -- what is returned as the "tee" command used to
|
118
|
-
# -- redirect logging output bot the console and a
|
119
|
-
# -- standard log file is not available on Windows.
|
120
|
-
# --
|
121
|
-
# -- Return the initializer for the logging statement.
|
122
|
-
# --
|
123
|
-
# -- ------------
|
124
|
-
# -- Windows
|
125
|
-
# -- ------------
|
126
|
-
# --
|
127
|
-
# -- Continue logging solely to STANDARD OUT.
|
128
|
-
# -- We could log to a file but not to both.
|
129
|
-
# --
|
130
|
-
# -- ------------
|
131
|
-
# -- Linux
|
132
|
-
# -- ------------
|
133
|
-
# --
|
134
|
-
# -- Send back TEE command so that logs pipe to
|
135
|
-
# -- both standard out and the designated logfile.
|
136
|
-
# --
|
137
|
-
def self.initializr_str
|
138
|
-
|
139
|
-
return STDOUT if Gem.win_platform?
|
140
|
-
return "| tee #{@@log_path}"
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
|
145
|
-
# --
|
146
|
-
# -- Get a simple STDOUT logger using the
|
147
|
-
# -- designated log level.
|
148
|
-
# --
|
149
|
-
# -- As the early stage when we do not have a
|
150
|
-
# -- log file destination the logs are set to
|
151
|
-
# -- the DEBUG (max) level.
|
152
|
-
# --
|
153
|
-
# -- If you need just INFO level logs right
|
154
|
-
# -- from the get go - go amend this method.
|
155
|
-
# --
|
156
|
-
def get_stdout_logger
|
157
|
-
|
158
|
-
stdout_logger = Logger.new(STDOUT)
|
159
|
-
stdout_logger.level = Logger::DEBUG
|
160
|
-
return stdout_logger
|
161
|
-
|
162
|
-
end
|
163
|
-
|
164
|
-
|
165
|
-
#--
|
166
|
-
#-- Set logfile path and [INVALIDATE] the
|
167
|
-
#-- cache so that memoization reads the new
|
168
|
-
#-- @log_class object.
|
169
|
-
#--
|
170
|
-
def set_logfile_path path_to_set
|
171
|
-
|
172
|
-
@@log_path = path_to_set
|
173
|
-
@@log_class = nil
|
174
|
-
|
175
|
-
end
|
176
|
-
|
177
|
-
|
178
|
-
#--
|
179
|
-
#-- Return the filename and its two immediate
|
180
|
-
#-- parent folders (parent and grandparent).
|
181
|
-
#--
|
182
|
-
#-- When this is not possible when the filepath
|
183
|
-
#-- is near the filesystem's root - it returns
|
184
|
-
#-- whatever is possible.
|
185
|
-
#--
|
186
|
-
#-- IMPLEMENT ABOVE FUNCTIONALITY WHEN NEEDED.
|
187
|
-
#-- CURRENTLY IT JUST BLUNDERS IN WITH NEITHER
|
188
|
-
#-- RHYME NOR REASON.
|
189
|
-
#--
|
190
|
-
def nickname object_path
|
191
|
-
|
192
|
-
object_name = File.basename object_path
|
193
|
-
parent_folder = File.dirname object_path
|
194
|
-
parent_name = File.basename parent_folder
|
195
|
-
granny_folder = File.dirname parent_folder
|
196
|
-
granny_name = File.basename granny_folder
|
197
|
-
|
198
|
-
return [granny_name,parent_name,object_name].join("/")
|
199
|
-
|
200
|
-
end
|
201
|
-
|
202
|
-
|
203
|
-
end
|