class CompositionEngine::LoginHandler

Attributes

env[RW]

Public Class Methods

force_login(_env) click to toggle source
# File lib/composition_engine.rb, line 64
def self.force_login(_env)
  inst = self.new(_env)
  if inst.logged_in?
    false
  else
    inst.new_login
  end
end
handle(_env) click to toggle source
# File lib/composition_engine.rb, line 60
def self.handle(_env)
  self.new(_env).handle
end
new(_env) click to toggle source
# File lib/composition_engine.rb, line 81
def initialize(_env)
  self.env = _env
end
prefixed_path() click to toggle source
# File lib/composition_engine.rb, line 77
def self.prefixed_path
  PATH_PREFIX+self.resource_path
end
resource_path() click to toggle source
# File lib/composition_engine.rb, line 73
def self.resource_path
  '/login'
end

Public Instance Methods

create_login() click to toggle source
# File lib/composition_engine.rb, line 110
def create_login
  nickname = params['login']['nickname']
  if nickname.nil? || nickname.empty?
    new_login("Nickname must not be blank!")
  else
    user = ::CompositionEngine::User.new(:nickname => nickname, :uuid => UUIDTools::UUID.random_create)
    ::CompositionEngine.assign_user_to_session(session,user)
    [302,{'Location'=>'/'},[]]
  end
end
handle() click to toggle source
# File lib/composition_engine.rb, line 85
def handle
  if request.get?
    new_login
  elsif request.post?
    create_login
  end
end
logged_in?() click to toggle source
# File lib/composition_engine.rb, line 121
def logged_in?
  ::CompositionEngine.extract_user_from_session(session)
end
new_login(message = nil) click to toggle source
# File lib/composition_engine.rb, line 93
    def new_login(message = nil) #TODO: require form key so they can't spam POSTs
      body = <<HTML
<html>
  <body>
    <h1>New User!</h1>
    #{"<em>#{message}</em>" if message}
    <p>Select a handle and click Login</p>
    <form action='#{self.class.prefixed_path}' method='POST'>
      <label for='login_nickname'>Nickname: </label><input type='text' name='login[nickname]' id='login_nickname'/>
      <input type='submit' value='Login' />
    </form>
  </body>
</html>
HTML
      [200,{'ContentType' => 'text/html'},[body]]
    end

Private Instance Methods

params() click to toggle source
# File lib/composition_engine.rb, line 135
def params
  request.params
end
request() click to toggle source
# File lib/composition_engine.rb, line 139
def request
  @_rack_request||= Rack::Request.new(env)
end
scoped_session() click to toggle source
# File lib/composition_engine.rb, line 127
def scoped_session
  ::CompositionEngine.scope_session(session)
end
session() click to toggle source
# File lib/composition_engine.rb, line 131
def session
  request.session
end