class ServersController < ApplicationController before_action :set_server, only: [ :show, :destroy, :start, :stop, :restart ] 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 start authorize_user! L4dServer::SystemdManager.start(@server) @server.update(status: :starting) Activity.log(current_user, "started", "Server", @server.id, {}) redirect_to @server, notice: "Server starting..." end def stop authorize_user! L4dServer::SystemdManager.stop(@server) @server.update(status: :stopped) Activity.log(current_user, "stopped", "Server", @server.id, {}) redirect_to @server, notice: "Server stopped." end def restart authorize_user! L4dServer::SystemdManager.restart(@server) @server.update(status: :starting) Activity.log(current_user, "restarted", "Server", @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) end def authorize_user! redirect_to servers_path, alert: "Not authorized" unless @server.user_id == current_user.id end end