85 lines
2.4 KiB
Ruby
85 lines
2.4 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_templates = current_user.server_templates.order(:name)
|
|
@server = current_user.servers.build
|
|
|
|
if params[:server_template_id]
|
|
@server_template = current_user.server_templates.find(params[:server_template_id])
|
|
@server.server_template = @server_template
|
|
end
|
|
end
|
|
|
|
def create
|
|
@server_template = current_user.server_templates.find(server_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
|
|
@server_templates = current_user.server_templates.order(:name)
|
|
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
|