class SiteguardLite::CustomSignature::TextLineParser

Constants

FILTER_ACTION_REGEX

Public Instance Methods

parse(line) click to toggle source

siteguardlite-320-0_nginx.pdf, p.52

有効・無効]<タブ><タブ><タブ><タブ>[検査対象

<タブ><タブ> [検査文字列]<タブ><タブ>

# File lib/siteguard_lite/custom_signature/text_line_parser.rb, line 8
def parse(line)
  fields = line.split("\t")
  {
    enable: enable(fields[0]),
    action: parse_action(fields[1]),
    filter_lifetime: parse_filter_lifetime(fields[1]),
    name: fields[3],
    comment: fields[8],
    exclusion_action: exclusion_action(fields[5]),
    signature: signature(fields[5]),
    condition: {
      key: fields[4],
      comparison_methods: comparison_methods(fields[5]),
      value: fields[6],
    }
  }
end

Private Instance Methods

comparison_methods(comparison_str) click to toggle source
# File lib/siteguard_lite/custom_signature/text_line_parser.rb, line 40
def comparison_methods(comparison_str)
  parse_comparison_str(comparison_str)[:comparison_methods]
end
enable(str) click to toggle source
# File lib/siteguard_lite/custom_signature/text_line_parser.rb, line 28
def enable(str)
  str == 'ON'
end
exclusion_action(comparison_str) click to toggle source
# File lib/siteguard_lite/custom_signature/text_line_parser.rb, line 32
def exclusion_action(comparison_str)
  parse_comparison_str(comparison_str)[:exclusion_action]
end
parse_action(parsed_action) click to toggle source
# File lib/siteguard_lite/custom_signature/text_line_parser.rb, line 67
def parse_action(parsed_action)
  case parsed_action
  when FILTER_ACTION_REGEX
    'FILTER'
  else
    parsed_action
  end
end
parse_comparison_str(str) click to toggle source
# File lib/siteguard_lite/custom_signature/text_line_parser.rb, line 44
def parse_comparison_str(str)
  return @parsed_comarison_str if @parsed_comparison_str

  result = {
    comparison_methods: [],
    exclusion_action: nil,
    signature: nil,
  }

  # TODO: Make it possible to handle other comparison methods and exclusion actions
  str.split(',').each do |part|
    case part
    when /\AEXCLUDE_OFFICIAL\((.+)\)\z/
      result[:exclusion_action] = 'EXCLUDE_OFFICIAL'
      result[:signature] = Regexp.last_match(1)
    else
      result[:comparison_methods] << part
    end
  end

  @parsed_comarison_str = result
end
parse_filter_lifetime(parsed_action) click to toggle source
# File lib/siteguard_lite/custom_signature/text_line_parser.rb, line 76
def parse_filter_lifetime(parsed_action)
  parsed_action =~ FILTER_ACTION_REGEX ? $1 : nil
end
signature(comparison_str) click to toggle source
# File lib/siteguard_lite/custom_signature/text_line_parser.rb, line 36
def signature(comparison_str)
  parse_comparison_str(comparison_str)[:signature]
end