sanger/limber

View on GitHub
app/controllers/sessions_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
C
77%
# frozen_string_literal: true

require_dependency 'limber/user'

# Handles log in / log out
class SessionsController < ApplicationController
  def create
    self.user_swipecard = params.require(:user_swipecard)
    if @current_user
      redirect_to :search, notice: 'Logged in' # rubocop:todo Rails/I18nLocaleTexts
    else
      redirect_to :search,
                  alert: 'Sorry, that swipecard could not be found. Please update your details in Sequencescape.' # rubocop:todo Rails/I18nLocaleTexts
    end
  end

  def destroy
    reset_session
    cookies[:user_name] = nil
    cookies[:user_id] = nil
    redirect_to :search, notice: 'Logged out' # rubocop:todo Rails/I18nLocaleTexts
  end

  private

  def user_swipecard=(card_id)
    @current_user = user_for_swipecard(card_id)
    return if @current_user.nil?

    session[:user_uuid] = @current_user.uuid
    session[:user_name] = @current_user.name

    # Unlike the session cookie, this cookie is accessible
    # through javascript.
    cookies[:user_name] = @current_user.name
    cookies[:user_id] = @current_user.id
  end

  def user_for_swipecard(card_id)
    Sequencescape::Api::V2::User.find(user_code: card_id).first
  end
end