Sha256: 92df2ab6fea331d4ee58dd35f6e75c5ff706bb37833e0d1d27ac1744c9ff6cfc

Contents?: true

Size: 1.61 KB

Versions: 2

Compression:

Stored size: 1.61 KB

Contents

class Taskr4railsController < ActionController::Base
  
  def execute
    unless Object.const_defined?("TASKR4RAILS_AUTH")
      render :text => "The taskr4rails receiver cannot be used until TASKR4RAILS_AUTH is defined. See http://code.google.com/p/ruby-taskr/wiki/Taskr4rails for help.", 
        :status => 500
      return false
    end
    
    unless request.post?
      render :text => "This is the taskr4rails receiver. It responds only to POST requests.", 
        :status => 405
      return false
    end
    
    if Object.const_defined?("TASKR4RAILS_ALLOWED_HOSTS")
      ok = TASKR4RAILS_ALLOWED_HOSTS.any? do |h|
        if h.kind_of? Regexp
          h =~ request.remote_addr
        else
          h == request.remote_addr
        end
      end
      
      unless ok
        render :text => "Remote address is not in the list of permitted hosts.",
        :status => 403
        return false
      end
    end
    
    unless params[:auth] == TASKR4RAILS_AUTH
      render :text => "Invalid auth password.",
        :status => 401
      return false
    end
    
    io = StringIO.new
    prev_stdout, prev_stderr = $stdout, $stderr
    output = ""
    $stdout = io
    $stderr = io
    begin
      eval(params[:ruby_code]) if params[:ruby_code]
      #output << (`cd #{RAILS_ROOT}; #{params[:shell_command]}` || "") if params[:shell_command]
      err = false
    rescue => e
      output << "#{e.class}: #{e}\n\nBACKTRACE:\n#{e.backtrace.join("\n")}"
      err = true
    end
    $stdout = prev_stdout
    $stderr = prev_stderr
    output = io.read(nil)
    
    render :text => output, :status => (err ? 500 : 200)
  end
  
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
taskr-0.2.1 taskr4rails/lib/taskr4rails_controller.rb
taskr-0.3.0 taskr4rails/lib/taskr4rails_controller.rb