Skip to content

Commit

Permalink
add verbose mode
Browse files Browse the repository at this point in the history
  • Loading branch information
azi-acceis committed Jun 29, 2023
1 parent aec8407 commit 8ae893d
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
bqm (1.4.0)
bqm (1.5.0)

GEM
remote: https://rubygems.org/
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,10 @@ See [INSTALL](INSTALL.md) for options with package managers.
Usage: bqm [options]
-o, --output-path PATH Path where to store the query file
-l, --list List available datasets
-i FILE,DIRECTORY,..., Local custom queries files
-i FILE,DIRECTORY,..., Local custom queries files/directories
--local-sets
--ignore-default Ignore the default query-sets.json
-v, --verbose Display the name of the merged file
Example: bqm -o ~/.config/bloodhound/customqueries.json
Example: bqm -o /tmp/customqueries.json -i /tmp/a.json,/home/user/folder
Expand Down
19 changes: 11 additions & 8 deletions bin/bqm
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,20 @@ def find_dataset
end

# Merge remote sets defined in data/query-sets.json
def merge_remote(source)
def merge_remote(source, verbose: false)
sets = get_datasets(source)
queries = []
sets.each do |s|
customqueries = Net::HTTP.get(URI(s))
data = JSON.parse(customqueries)
queries += data['queries']
puts " [*] File merged: #{s}" if verbose
end
queries
end

# Merge local sets provided by the user
def merge_local(sources)
def merge_local(sources, verbose: false)
queries = []
sources.each do |source|
# If it's a file parse it
Expand All @@ -36,15 +37,16 @@ def merge_local(sources)
if data['queries']
queries += data['queries']
elsif data['sets']
queries += merge_remote(source)
queries += merge_remote(source, verbose: verbose)
else
raise KeyError, "The file #{source} is neiter a Bloodhound custom query file nor a bqm query sets file"
end
# If it's a folder, retrieve all JSON files and assumes there are queries files
# Then recursive call for a normal file parsing
puts " [*] File merged: #{source}" if verbose
# If it's a folder, retrieve all JSON files and assumes there are queries files
# Then recursive call for a normal file parsing
elsif File.directory?(source) && File.readable?(source)
qfiles = Dir.glob('*.json', base: source).map { |f| File.absolute_path(f, source) }
queries += merge_local(qfiles)
queries += merge_local(qfiles, verbose: verbose)
else
raise IOError, "The dataset file/directory #{source} does not exist or is unreadable."
end
Expand Down Expand Up @@ -116,6 +118,7 @@ if __FILE__ == $PROGRAM_NAME
options[:'local-sets'] += f
end
parser.on('--ignore-default', 'Ignore the default query-sets.json')
parser.on('-v', '--verbose', 'Display the name of the merged file')
parser.separator ''
parser.separator 'Example: bqm -o ~/.config/bloodhound/customqueries.json'
parser.separator 'Example: bqm -o /tmp/customqueries.json -i /tmp/a.json,/home/user/folder'
Expand Down Expand Up @@ -143,9 +146,9 @@ if __FILE__ == $PROGRAM_NAME
end
puts '[+] Fetching and merging datasets'
data = []
data = merge_remote(source) unless options[:'ignore-default']
data = merge_remote(source, verbose: options[:verbose]) unless options[:'ignore-default']
local_set = options[:'local-sets']
data += merge_local(local_set) if local_set
data += merge_local(local_set, verbose: options[:verbose]) if local_set
if flags[:merge_actual]
puts '[+] Merging your existing queries'
data += JSON.parse(File.read(out))['queries']
Expand Down

0 comments on commit 8ae893d

Please sign in to comment.