Files
ubicloud/routes/project/location/firewall/firewall_rule.rb
Jeremy Evans 431ddfc9c0 Use the custom_block_results Roda plugin to handle integer block results
Treat integer block results as setting the response status code.
Use this in the routes to DRY up a lot of code that sets the status
and then halts.
2024-12-03 12:07:28 -08:00

50 lines
1.4 KiB
Ruby

# frozen_string_literal: true
class Clover
hash_branch(:project_location_firewall_prefix, "firewall-rule") do |r|
# This is api-only, but is only called from an r.on api? branch, so no check is needed here
r.post true do
authorize("Firewall:edit", @firewall.id)
required_parameters = ["cidr"]
allowed_optional_parameters = ["port_range"]
request_body_params = validate_request_params(required_parameters, allowed_optional_parameters)
parsed_cidr = Validation.validate_cidr(request_body_params["cidr"])
port_range = if request_body_params["port_range"].nil?
[0, 65535]
else
request_body_params["port_range"] = Validation.validate_port_range(request_body_params["port_range"])
end
pg_range = Sequel.pg_range(port_range.first..port_range.last)
firewall_rule = @firewall.insert_firewall_rule(parsed_cidr.to_s, pg_range)
Serializers::FirewallRule.serialize(firewall_rule)
end
r.is String do |firewall_rule_ubid|
firewall_rule = FirewallRule.from_ubid(firewall_rule_ubid)
request.delete true do
if firewall_rule
authorize("Firewall:edit", @firewall.id)
@firewall.remove_firewall_rule(firewall_rule)
end
204
end
request.get true do
if firewall_rule
authorize("Firewall:view", @firewall.id)
Serializers::FirewallRule.serialize(firewall_rule)
end
end
end
end
end