module EhcToolkit
EhcToolkit — curated CachyOS/Arch pacman packages for CTF web recon on the bot host. Public: dispatch, audit, installed?, missing_install_command, full_install_command Depends: EhcReport, EhcToolkitCatalog Tests: test/lib/ehc_toolkit_test.rb
Public Instance Methods
Source
# File lib/ehc_toolkit.rb, line 31 def audit(pacman: nil) runner = pacman || default_pacman ok = pacman_available?(runner) EhcToolkitCatalog::PACKAGES.map do |entry| installed = ok ? installed?(entry[:name], pacman: runner) : nil entry.merge(installed: installed) end end
Source
# File lib/ehc_toolkit.rb, line 68 def default_pacman lambda do |flag, arg| args = ["pacman", flag] args << arg if arg && !arg.to_s.empty? Open3.capture2(*args) end end
Source
# File lib/ehc_toolkit.rb, line 16 def dispatch(pacman: nil) rows = audit(pacman: pacman) pacman_ok = pacman_available?(pacman) install_cmd = pacman_ok ? missing_install_command(rows) : full_install_command { success: true, reply: EhcReport.format_toolkit( audit: rows, install_cmd: install_cmd, pacman_ok: pacman_ok ) } end
Source
# File lib/ehc_toolkit.rb, line 56 def full_install_command "pacman -S #{EhcToolkitCatalog::PACKAGES.map { |entry| entry[:name] }.join(' ')}" end
Source
# File lib/ehc_toolkit.rb, line 41 def installed?(name, pacman: nil) runner = pacman || default_pacman _stdout, status = runner.call("-Qq", name) status.success? rescue StandardError false end
Source
# File lib/ehc_toolkit.rb, line 49 def missing_install_command(rows) missing = Array(rows).select { |row| row[:installed] == false }.map { |row| row[:name] } return nil if missing.empty? "pacman -S #{missing.join(' ')}" end
Source
# File lib/ehc_toolkit.rb, line 60 def pacman_available?(runner = nil) probe = runner || default_pacman _stdout, status = probe.call("--version", nil) status.success? rescue StandardError false end