Sha256: f44a2eb0e7d41ff8401270794c91d480a269914701b26ee52d9c71bd2a941717

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

class Dummy::Sessions < Grape::API

  resource :sessions do

    desc "create a user session" do
      detail "sign in a user"
    end
    params do
      requires :login,        type: String,  desc: "email address"
      requires :password,     type: String,  desc: "password"
      optional :token,        type: Boolean, desc: "set to true to generate and return Firebase secure token", default: false
    end
    post '/' do
      authorize User.new, :sessions?
      user = User.find_first_by_auth_conditions({email: params[:login]})
      if user && user.valid_password?(params[:password]) && user.valid_for_authentication?

        # commented out for now, User model is not yet confirmable
        #unauthorized! DummyAPI::USER_NOT_CONFIRMED unless user.confirmed?

        token = nil
        if params[:token]
          payload = {
              uid: "#{user.id}", # uid must be a string
              email: user.email,
              avatar_url: user.avatar_url
          }
          user.authentication_token = SecureRandom.urlsafe_base64(nil, false)
          user.save
        end

        #user.ensure_authentication_token!
        env['warden'].set_user(user, scope: :user)
        present user, with: Dummy::Entities::User, token: token
      else
        unauthorized! DummyAPI::BAD_LOGIN
      end
    end


    desc "delete a user session" do
      detail "sign out the current user" 
    end
    delete '/' do
      authorize User.new, :sessions?
      if u = User.find_by_authentication_token(params[:api_key])
        u.authentication_token = nil
        {status: u.save!}
      else
        {status: true } # the user is already logged out
      end
    end 

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
introspective_grape-0.0.4 spec/dummy/app/api/dummy/sessions.rb
introspective_grape-0.0.3 spec/dummy/app/api/dummy/sessions.rb