module SastBox::Snippet
Public Instance Methods
filename_relative(filename)
click to toggle source
# File lib/sastbox-sdk/snippet.rb, line 6 def filename_relative(filename) #filename.sub(@opts.codebase, '') if filename.start_with?(@opts.codebase) filename_path = File.expand_path(filename) codebase_path = File.expand_path(@opts.codebase) if filename_path.start_with?(codebase_path) filename_path.sub!(codebase_path, '') filename_path = filename_path[1..-1] if filename_path.start_with?('/') return filename_path else #print_warning("Filename outside codebase => #{filename_path}") return nil end end
snippet_calculate_hashes(snippet)
click to toggle source
# File lib/sastbox-sdk/snippet.rb, line 21 def snippet_calculate_hashes(snippet) snippet[:evidence_line][:hash] = Digest::SHA256.hexdigest(snippet[:evidence_line][:content]) snippet[:evidence_full][:hash] = Digest::SHA256.hexdigest(snippet[:evidence_full][:content]) end
snippet_read(filename, line, context=5)
click to toggle source
# File lib/sastbox-sdk/snippet.rb, line 26 def snippet_read(filename, line, context=5) snippet = { evidence_line: { content: '', start_line: 0, end_line: 0, hash: '' }, evidence_full: { content: '', start_line: 0, end_line: 0, hash: '' }, read_success: false } if File.file?(filename) snippet[:read_success] = true lines = File.open(filename).readlines begin_code = [1, line.to_i - context].max end_code = [line.to_i + context, lines.length].min if end_code > lines.length or line.to_i > lines.length snippet[:read_success] = false return snippet end snippet[:evidence_line][:start_line] = line.to_i snippet[:evidence_line][:end_line] = line.to_i snippet[:evidence_line][:content] = lines[line.to_i - 1].chomp.force_encoding('ISO-8859-1').encode('UTF-8') snippet[:evidence_full][:start_line] = begin_code snippet[:evidence_full][:end_line] = end_code begin_code.upto(end_code) do |pos| snippet[:evidence_full][:content] << lines[pos - 1].force_encoding('ISO-8859-1').encode('UTF-8') end snippet_calculate_hashes(snippet) #snippet[:evidence_line][:hash] = Digest::SHA256.hexdigest(snippet[:evidence_line][:content]) #snippet[:evidence_full][:hash] = Digest::SHA256.hexdigest(snippet[:evidence_full][:content]) end snippet end
snippet_read_range(filename, start_line, end_line, context=5)
click to toggle source
# File lib/sastbox-sdk/snippet.rb, line 62 def snippet_read_range(filename, start_line, end_line, context=5) snippet = { evidence_line: { content: '', start_line: 0, end_line: 0, hash: '' }, evidence_full: { content: '', start_line: 0, end_line: 0, hash: '' }, read_success: false } if File.file?(filename) snippet[:read_success] = true lines = File.open(filename).readlines num_lines = lines.length if !start_line.between?(1, num_lines) || !end_line.between?(1, num_lines) || start_line > end_line snippet[:read_success] = false return snippet end begin_code = [1, start_line.to_i - context].max end_code = [end_line.to_i + context, num_lines].min if end_code > num_lines snippet[:read_success] = false return snippet end snippet[:evidence_line][:start_line] = start_line.to_i snippet[:evidence_line][:end_line] = end_line.to_i start_line.upto(end_line) do |pos| snippet[:evidence_line][:content] << lines[pos - 1].force_encoding('ISO-8859-1').encode('UTF-8') end snippet[:evidence_full][:start_line] = begin_code snippet[:evidence_full][:end_line] = end_code begin_code.upto(end_code) do |pos| snippet[:evidence_full][:content] << lines[pos - 1].force_encoding('ISO-8859-1').encode('UTF-8') end snippet_calculate_hashes(snippet) end snippet end