zammad/zammad

View on GitHub
lib/sessions/event/login.rb

Summary

Maintainability
A
25 mins
Test Coverage
# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/

class Sessions::Event::Login < Sessions::Event::Base
  database_connection_required

=begin

Event module to start websocket session for new client connections.

To execute this manually, just paste the following into the browser console

  App.WebSocket.send({event:'login', session_id: '123'})

=end

  def run

    # get user_id
    session = nil

    app_version = AppVersion.event_data

    if @payload && @payload['session_id']
      private_session_id = Rack::Session::SessionId.new(@payload['session_id']).private_id
      session = ActiveRecord::SessionStore::Session.find_by(session_id: private_session_id)
    end

    new_session_data = {}
    if session&.data && session.data['user_id']
      new_session_data = {
        'id' => session.data['user_id'],
      }
    end

    # create new session
    if @clients[@client_id]
      @clients[@client_id][:session] = new_session_data
      Sessions.create(@client_id, new_session_data, { type: 'websocket' })
    else
      Sessions.create(@client_id, new_session_data, { type: 'ajax' })
    end

    # send app version
    Sessions.send(@client_id, app_version)

    false
  end

end