require 'warden'

module Openneo
  module Auth
    module Strategies
      class Token < Warden::Strategies::Base
        def valid?
          session && session[:session_id]
        end
        
        def authenticate!
          begin
            auth_session = Session.find session[:session_id]
          rescue Session::NotFound => e
            fail! e.message
          else
            auth_session.destroy!
            cookies.permanent.signed[:remember_me] = auth_session.user.id
            success! auth_session.user
          end
        end
      end
      
      class Remember < Warden::Strategies::Base
        def valid?
          cookies.signed[:remember_me]
        end
        
        def authenticate!
          user = Auth.config.find_user_by_remembering cookies.signed[:remember_me]
          if user
            success! user
          else
            fail!
          end
        end
      end
    end
  end
end