# frozen_string_literal: true module Appsignal # Class used to perform a Push API validation / authentication check against # the AppSignal Push API. # # @example # config = Appsignal::Config.new(Dir.pwd, "production") # auth_check = Appsignal::AuthCheck.new(config) # # Valid push_api_key # auth_check.perform # => "200" # # Invalid push_api_key # auth_check.perform # => "401" # # @!attribute [r] config # @return [Appsignal::Config] config to use in the authentication request. # @api private class AuthCheck # Path used on the AppSignal Push API # https://push.appsignal.com/1/auth ACTION = "auth".freeze attr_reader :config, :logger def initialize(config, logger = nil) @config = config if logger # rubocop:disable Style/GuardClause Appsignal::Utils::DeprecationMessage.message \ "`Appsignal::AuthCheck.new`'s `logger` argument will be removed " \ "in the next major version. Please configure the logger " \ "using `Appsignal.logger`." end end # Perform push api validation request and return response status code. # # @return [String] response status code. # @raise [StandardError] see {Appsignal::Transmitter#transmit}. def perform Appsignal::Transmitter.new(ACTION, config).transmit({}).code end # Perform push api validation request and return a descriptive response # tuple. # # @return [Array] response tuple. # - First value is the response status code. # - Second value is a description of the response and the exception error # message if an exception occured. def perform_with_result status = perform result = case status when "200" "AppSignal has confirmed authorization!" when "401" "API key not valid with AppSignal..." else "Could not confirm authorization: " \ "#{status.nil? ? "nil" : status}" end [status, result] rescue => e result = "Something went wrong while trying to "\ "authenticate with AppSignal: #{e}" [nil, result] end end end