Files
ubicloud/routes/project/private_location.rb
Jeremy Evans e6b7e5e879 Change rubocop TargetRubyVersion to 3.4
Disable Style/RedundantLineContinuation, as it incorrectly removes
line continutations in rhizome/host/lib/vm_setup.rb that are not
redundant.

All code changes are for _1 => it in blocks.
2025-04-26 06:51:19 +09:00

116 lines
3.3 KiB
Ruby

# frozen_string_literal: true
class Clover
hash_branch(:project_prefix, "private-location") do |r|
r.get true do
authorize("Location:view", @project.id)
@dataset = @project.locations_dataset
if api?
result = @dataset.paginated_result(
start_after: r.params["start_after"],
page_size: r.params["page_size"],
order_column: r.params["order_column"]
)
{
items: Serializers::PrivateLocation.serialize(result[:records]),
count: result[:count]
}
else
@locations = @dataset.all
view "private-location/index"
end
end
r.post true do
authorize("Location:create", @project.id)
required_parameters = ["name", "provider_location_name", "access_key", "secret_key"]
request_body_params = validate_request_params(required_parameters)
Validation.validate_name(request_body_params["name"])
Validation.validate_provider_location_name("aws", request_body_params["provider_location_name"])
loc = DB.transaction do
loc = Location.create(
display_name: request_body_params["name"],
name: request_body_params["provider_location_name"],
ui_name: request_body_params["name"],
visible: true,
provider: "aws",
project_id: @project.id
)
LocationCredential.create(
access_key: request_body_params["access_key"],
secret_key: request_body_params["secret_key"]
) { it.id = loc.id }
loc
end
if api?
Serializers::PrivateLocation.serialize(loc)
else
r.redirect "#{@project.path}#{loc.path}"
end
end
r.get(web?, "create") do
authorize("Location:create", @project.id)
options = OptionTreeGenerator.new
options.add_option(name: "name")
options.add_option(name: "provider_location_name", values: Option::AWS_LOCATIONS.map { |l| {value: l, display_name: l} })
options.add_option(name: "access_key")
options.add_option(name: "secret_key")
@option_tree, @option_parents = options.serialize
view "private-location/create"
end
r.is String do |name|
@location = @project.locations.find { |loc| loc.ui_name == name }
next(r.delete? ? 204 : 404) unless @location
r.get do
authorize("Location:view", @project.id)
if api?
Serializers::PrivateLocation.serialize(@location)
else
view "private-location/show"
end
end
r.delete do
authorize("Location:delete", @project.id)
if @location.has_resources
fail DependencyError.new("Private location '#{@location.ui_name}' has some resources, first, delete them.")
end
DB.transaction do
@location.location_credential.destroy
@location.destroy
end
204
end
r.post do
authorize("Location:edit", @project.id)
Validation.validate_name(r.params["name"])
@location.update(ui_name: r.params["name"], display_name: r.params["name"])
if api?
Serializers::PrivateLocation.serialize(@location)
else
flash["notice"] = "The location name is updated to '#{@location.ui_name}'."
r.redirect "#{@project.path}#{@location.path}"
end
end
end
end
end