|
|
@@ -0,0 +1,43 @@ |
|
|
|
class SshController < ApplicationController |
|
|
|
before_action :check_host, except: %i(index) |
|
|
|
|
|
|
|
def check_host |
|
|
|
@host, @port = params[:id].split ':' |
|
|
|
@idn = SimpleIDN.to_ascii @host |
|
|
|
if /[^a-zA-Z0-9.-]/.match @idn |
|
|
|
flash[:danger] = "Hôte #{@host} invalide" |
|
|
|
redirect_to :index |
|
|
|
return false |
|
|
|
end |
|
|
|
@host = "#{@idn}:#{@port}" |
|
|
|
@result = Datastore.host :ssh, @host |
|
|
|
end |
|
|
|
|
|
|
|
def index |
|
|
|
end |
|
|
|
|
|
|
|
def show |
|
|
|
enqueue_host unless @result |
|
|
|
return render :processing if @result.pending |
|
|
|
return render :no_ssh if @result.no_ssh |
|
|
|
end |
|
|
|
|
|
|
|
def refresh |
|
|
|
unless @result.pending |
|
|
|
refresh_allowed = @result.date + Rails.configuration.refresh_delay |
|
|
|
if Time.now < refresh_allowed |
|
|
|
flash[:warning] = "Merci d’attendre au moins #{l refresh_allowed} pour rafraîchir" |
|
|
|
return redirect_to result_path @host |
|
|
|
end |
|
|
|
enqueue_host |
|
|
|
end |
|
|
|
redirect_to action: :show |
|
|
|
end |
|
|
|
|
|
|
|
protected |
|
|
|
def enqueue_host |
|
|
|
Datastore.pending :ssh, @host |
|
|
|
SSHWorker.perform_async @idn, @port |
|
|
|
@result = OpenStruct.new pending: true, date: Time.now |
|
|
|
end |
|
|
|
end |