Class: Ocpp::Rails::Actions::AuthorizeHandler

Inherits:
Object
  • Object
show all
Defined in:
app/services/ocpp/rails/actions/authorize_handler.rb

Instance Method Summary collapse

Constructor Details

#initialize(charge_point, message_id, payload) ⇒ AuthorizeHandler

Returns a new instance of AuthorizeHandler.



5
6
7
8
9
# File 'app/services/ocpp/rails/actions/authorize_handler.rb', line 5

def initialize(charge_point, message_id, payload)
  @charge_point = charge_point
  @message_id = message_id
  @payload = payload
end

Instance Method Details

#callObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/services/ocpp/rails/actions/authorize_handler.rb', line 11

def call
  id_tag = @payload["idTag"]

  ::Rails.logger.info("[OCPP] Authorize request from #{@charge_point.identifier} for idTag: #{id_tag}")

  # Execute authorization hooks to determine access decision
  result = Ocpp::Rails::AuthorizationHookManager.execute_hooks(@charge_point.id, id_tag)

  # Persist authorization record for audit trail
  begin
    Ocpp::Rails::Authorization.create!(
      charge_point_id: @charge_point.id,
      id_tag: id_tag,
      status: result[:status],
      expiry_date: result[:expiry_date]
    )
  rescue => error
    ::Rails.logger.error("[OCPP] Failed to persist Authorization record: #{error.message}")
    # Continue - authorization decision already made, persistence failure shouldn't block response
  end

  # Build OCPP response
  id_tag_info = { "status" => result[:status] }

  # Only include expiryDate if status is Accepted and expiry_date is present
  if result[:status] == "Accepted" && result[:expiry_date].present?
    id_tag_info["expiryDate"] = result[:expiry_date].iso8601
  end

  {
    "idTagInfo" => id_tag_info
  }
end