module Surbase::AccountsController

Public Instance Methods

auth_callback() click to toggle source
# File lib/surbase/controller.rb, line 74
def auth_callback
  auth = request.env[ "omniauth.auth" ]
  result_api( login_callback({
    :auth         => auth,
    :provider     => auth[ "provider" ],
    :uid          => auth[ "uid" ],
    :provider_id  => %Q(#{auth[ "provider" ]}\t#{auth[ "uid" ]}),
    :name         => auth[ "info" ][ "name" ],
    :icon         => auth[ "info" ][ "image" ],
    :access_token => {
      :token      => auth[ "credentials" ][ "token" ],
      :secret     => auth[ "credentials" ][ "secret" ],
    },
    :login_key    => create_key_random
  }) )
end
login() click to toggle source
# File lib/surbase/controller.rb, line 70
def login
  redirect_to "/auth/#{params[ :provider ]}"
end

Protected Instance Methods

login_callback( info ) click to toggle source
# File lib/surbase/controller.rb, line 92
def login_callback( info )
  status = Status.new
  
  account = nil
  ActiveRecord::Base.transaction do
    account_data = {
      :provider_id => info[ :provider_id ],
      :login_key   => info[ :login_key ],
    }
    account = Model.load( ::Account, [ "provider_id=?", account_data[ :provider_id ] ], account_data )
    account.save!
    
    provider_account_data = {
      :account_id             => account.id,
      :name                   => info[ :name ],
      :icon                   => info[ :icon ],
      :encrypted_access_token => encrypt_json( info[ :access_token ], info[ :login_key ] ),
    }
    provider_account = Model.load( ::ProviderAccount, [ "account_id=?", account.id ], provider_account_data )
    provider_account.save!
  end
    status.code = Status::Success
    status.values = {
      :provider_info => {
        :provider => info[ :provider ],
        :name     => info[ :name ],
        :icon     => info[ :icon ],
      },
      :account_id => @cipher.encrypt( @cipher.encode( account.id.to_s ), info[ :login_key ] ),
      :login_key  => info[ :login_key ],
    }
    status
  rescue => e
    error_status( Status::ModelSaveError, e )
end