class OauthToken < ActiveRecord::Base
  belongs_to :client_application
  belongs_to :user

  scope :authorized, where("authorized_at IS NOT NULL and invalidated_at IS NULL")

  validates_uniqueness_of :token
  validates_presence_of :client_application, :token

  before_validation :generate_keys, :on => :create
  
  def invalidated?
    invalidated_at != nil
  end
  
  def invalidate!
    update_attributes({
      :invalidated_at => Time.now
    }, :without_protection => true)
  end
  
  def authorized?
    authorized_at != nil && !invalidated?
  end
  
  def to_query
    "oauth_token=#{token}&oauth_token_secret=#{secret}"
  end
    
protected
  
  def generate_keys
    self.token = OAuth::Helper.generate_key(40)[0,40]
    self.secret = OAuth::Helper.generate_key(40)[0,40]
  end
end
