Module: OpenC3::ConfigKeywordModel

Included in:
InterfaceModel, MicroserviceModel
Defined in:
lib/openc3/models/config_keyword_model.rb

Instance Method Summary collapse

Instance Method Details

#parse_port(parser, keyword, parameters) ⇒ Object

Parse a PORT keyword, appending [number, protocol] to @ports.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/openc3/models/config_keyword_model.rb', line 22

def parse_port(parser, keyword, parameters)
  usage = "PORT <Number> <Protocol (Optional)"
  parser.verify_num_parameters(1, 2, usage)
  begin
    @ports << [Integer(parameters[0])]
  rescue # In case Integer fails
    raise ConfigParser::Error.new(parser, "Port must be an integer: #{parameters[0]}", usage)
  end
  protocol = ConfigParser.handle_nil(parameters[1])
  if protocol
    # Per https://kubernetes.io/docs/concepts/services-networking/service/#protocol-support
    if %w(TCP UDP SCTP).include?(protocol.upcase)
      @ports[-1] << protocol.upcase
    else
      raise ConfigParser::Error.new(parser, "Unknown port protocol: #{parameters[1]}", usage)
    end
  else
    @ports[-1] << 'TCP'
  end
end

#validate_secret(parser, keyword, parameters) ⇒ Object

Validate a SECRET / BRIDGE_SECRET definition. FILE type paths are restricted to Secrets.secret_file_dir to prevent reading or overwriting arbitrary files.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/openc3/models/config_keyword_model.rb', line 45

def validate_secret(parser, keyword, parameters)
  type = parameters[0].to_s.upcase
  unless ['ENV', 'FILE'].include?(type)
    raise ConfigParser::Error.new(parser, "Unknown secret type '#{parameters[0]}' for #{keyword}. Must be ENV or FILE.")
  end
  # Normalize in place so the stored secret matches what the operator and
  # Secrets.setup match on, both of which compare against 'ENV' / 'FILE' and
  # use the path exactly as given.
  parameters[0] = type
  if type == 'FILE'
    begin
      parameters[2] = Secrets.validate_file_path(parameters[2])
    rescue ArgumentError => error
      raise ConfigParser::Error.new(parser, "#{keyword} #{error.message}")
    end
  end
end