module ApiBlocks::Doorkeeper::Invitations::Controller

Public Instance Methods

access_token(application, user) click to toggle source

Returns a new access token for this user.

# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 83
def access_token(application, user)
  ::Doorkeeper::AccessToken.find_or_create_for(
    application,
    user.id,
    ::Doorkeeper.configuration.default_scopes,
    ::Doorkeeper.configuration.access_token_expires_in,
    true
  )
end
callback() click to toggle source

Redirects to the application's redirect uri.

# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 41
def callback
  query = {
    invitation_token: params[:invitation_token]
  }.to_query

  redirect_to("#{oauth_application.invitation_uri}?#{query}")
end
create() click to toggle source

Initialize a new invitation.

# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 16
def create
  user = user_model.invite!(
    create_params, current_user, application: oauth_application
  )

  return render(status: :no_content) if user.errors.empty?

  respond_with(user)
end
create_params() click to toggle source
# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 64
def create_params
  params.require(:user).permit(:email)
end
oauth_application() click to toggle source
# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 93
def oauth_application
  @oauth_application ||= ::Doorkeeper::Application.find_by!(
    uid: params[:client_id]
  )
end
show() click to toggle source

Renders informations about the invited user.

# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 27
def show
  user = user_model.find_by_invitation_token(params[:invitation_token], false)

  if user.nil? || !user.persisted?
    return render(
      problem: { details: 'invalid invitation token' },
      status: :bad_request
    )
  end

  respond_with(user)
end
unlockable?(resource) click to toggle source

Copied over from devise base controller in order to determine wether a ser is unlockable or not.

# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 76
def unlockable?(resource)
  resource.respond_to?(:unlock_access!) &&
    resource.respond_to?(:unlock_strategy_enabled?) &&
    resource.unlock_strategy_enabled?(:email)
end
update() click to toggle source

Finalize the invitation.

# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 50
def update
  user = user_model.accept_invitation!(update_params)

  return respond_with(user) unless user.errors.empty?

  user.unlock_access! if unlockable?(user)

  respond_with(::Doorkeeper::OAuth::TokenResponse.new(
    access_token(oauth_application, user)
  ).body)
end
update_params() click to toggle source
# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 68
def update_params
  params.require(:user).permit(
    :invitation_token, :password, :password_confirmation
  )
end
user_model() click to toggle source

Returns the user model class.

# File lib/api_blocks/doorkeeper/invitations/controller.rb, line 100
def user_model
  raise 'the method `user_model` must be implemented on your invitations controller'
end