=begin TODO: All process initialization and management through this plugin? TODO: Server/Game/Generic app process manager Find open processes of all registered apps able to kill them or restart them, so record the various details somewhere..able to start them. Rpt/log tailer... also handy for updater log etc ;-) Will require user authorization at some point :P (Or no such thing, but ssh-recommended?) =end require "net/http" require "net/https" require "erb" require "singleton" module Six module Network # http://updater.dev-heaven.net/goldberg/auth/login USERAGENT = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1' class Panel include Singleton attr_reader :http def Panel.setlogger(log) @logger = log end def Panel.logger @logger end def Panel.login(webid, password, force = false) unless @headers.nil? || force raise ScriptError, "You should already be logged in!" end url = URI.parse("http://updater.dev-heaven.net/goldberg/auth/login") @http = Net::HTTP.new(url.host, url.port) #@http.use_ssl = true # GET request -> so the host can set cookies resp, data = @http.get2(url.path, {'User-Agent' => USERAGENT}) cookie = resp.response['set-cookie'].split('; ')[0] resp.body[/name="authenticity_token" type="hidden" value="(.*)" \/>/] auth = $1 # POST request -> logging in data = "authenticity_token=#{ERB::Util.url_encode(auth)}&login[name]=#{ERB::Util.url_encode(webid)}&login[password]=#{ERB::Util.url_encode(password)}&commit=Login" @headers = { 'Cookie' => cookie, 'Referer' => url.to_s, 'Content-Type' => 'application/x-www-form-urlencoded', 'User-Agent' => USERAGENT } resp, data = @http.post(url.path, data, @headers) # resp, data = Net::HTTP.post_form(URI.parse(url), # {'login_user'=>'admin', 'login_password'=>'admin', 'authenticity_token' => auth, 'commit'=>'Login'}) # {'login[user]'=>'admin', 'login[password]'=>'admin', 'authenticity_token' => auth, 'commit'=>'Login'}) # Output on the screen -> we should get either a 302 redirect (after a successful login) or an error page #logger.debug 'Code = ' + resp.code #logger.debug 'Message = ' + resp.message # resp.each {|key, val| puts key + ' = ' + val} #logger.debug data end def Panel.get(path) @http.get(path, @headers) end end end end