l4d.tools/app/controllers/servers_controller.rb
2026-01-18 19:06:21 +01:00

79 lines
2.2 KiB
Ruby

class ServersController < ApplicationController
before_action :set_server, only: [ :show, :destroy, :start, :stop, :restart, :spawn ]
def index
@servers = current_user.servers.includes(:server_template).order(created_at: :desc)
end
def show
authorize_user!
end
def new
@server_template = current_user.server_templates.find(params[:server_template_id])
@server = current_user.servers.build(server_template: @server_template)
end
def create
@server_template = current_user.server_templates.find(params[:server_template_id])
@server = current_user.servers.build(server_params)
@server.server_template = @server_template
@server.status = :stopped
if @server.save
Activity.log(current_user, "spawned", "Server", @server.id, { name: @server.name, port: @server.port })
SpawnServerJob.perform_later(@server.id)
redirect_to @server, notice: "Server spawning..."
else
render :new, status: :unprocessable_entity
end
end
def spawn
authorize_user!
Activity.log(current_user, "spawning", "Server", @server.id, { name: @server.name })
SpawnServerJob.perform_later(@server.id)
@server.update(status: :starting)
redirect_to @server, notice: "Server spawning..."
end
def start
authorize_user!
StartServerJob.perform_later(@server.id)
redirect_to @server, notice: "Server starting..."
end
def stop
authorize_user!
StopServerJob.perform_later(@server.id)
redirect_to @server, notice: "Server stopping..."
end
def restart
authorize_user!
RestartServerJob.perform_later(@server.id)
redirect_to @server, notice: "Server restarting..."
end
def destroy
authorize_user!
name = @server.name
@server.destroy
Activity.log(current_user, "deleted", "Server", @server.id, { name: name })
redirect_to servers_path, notice: "Server deleted."
end
private
def set_server
@server = Server.find(params[:id])
end
def server_params
params.require(:server).permit(:name, :port, :server_template_id)
end
def authorize_user!
redirect_to servers_path, alert: "Not authorized" unless @server.user_id == current_user.id
end
end