Sha256: 8a3fb1d6c1f8ca5f3facf8593497759d7990a80504934181b9d7163a4a557d58

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

class Auther::SessionController < ApplicationController
  layout "auther/auth"
  before_filter :name_options, only: [:new, :create]

  def show
    redirect_to action: :new
  end

  def new
    @account = Auther::Account.new
  end

  def create
    account_params = params.fetch(:account)
    @account = Auther::Account.new find_account(account_params.fetch(:name))

    if @account.valid?
      store_credentials @account, account_params.fetch(:login), account_params.fetch(:password)
      redirect_to session["auther_redirect_url"] || '/'
    else
      render template: "auther/session/new"
    end
  end

  def destroy
    remove_credentials params[:name]
    redirect_to action: :new
  end

  private

  def settings
    Rails.application.config.auther_settings
  end

  def name_options
    @name_options = settings.fetch(:accounts).map do |account|
      name = account.fetch :name
      [name.capitalize, name]
    end
  end

  def find_account name
    settings.fetch(:accounts).select { |account| account.fetch(:name) == name }.first
  end

  def store_credentials account, login, password
    keymaster = Auther::Keymaster.new account.name
    cipher = Auther::Cipher.new settings.fetch(:secret)
    session[keymaster.login_key] = cipher.encrypt login
    session[keymaster.password_key] = cipher.encrypt password
  end

  def remove_credentials name
    keymaster = Auther::Keymaster.new name
    session.delete keymaster.login_key
    session.delete keymaster.password_key
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
auther-0.2.0 app/controllers/auther/session_controller.rb