Sha256: 10685b8741cce5d400b666330b459cf677f30c5b2377f3158382a0dc6f7dcd4d

Contents?: true

Size: 1.91 KB

Versions: 3

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true
require 'proxes/services/logger'
require 'proxes/request'
require 'proxes/policies/request_policy'
require 'proxes/helpers/pundit'
require 'proxes/helpers/authentication'
require 'proxes/services/logger'

module ProxES
  class Security
    attr_reader :env, :logger

    include Helpers::Authentication
    include Helpers::Pundit

    def initialize(app, logger = nil)
      @app = app
      @logger = logger || Services::Logger.instance
    end

    def error(message, code = 500)
      [code, { 'Content-Type' => 'application/json' }, ['{"error":"' + message + '}']]
    end

    def call(env)
      @env = env

      request = Request.from_env(env)

      logger.debug '==========================BEFORE================================================'
      logger.debug '= ' + "Request: #{request.fullpath}".ljust(76) + ' ='
      logger.debug '= ' + "Endpoint: #{request.endpoint}".ljust(76) + ' ='
      logger.debug '================================================================================'

      begin
        check_basic
        authorize request
      rescue StandardError => e
        logger.debug "Access denied by security layer: #{e.message}"
        return error 'Forbidden', 403
      end
      request.index = policy_scope(request) if request.indices?

      logger.debug '==========================AFTER================================================='
      logger.debug '= ' + "Request: #{request.fullpath}".ljust(76) + ' ='
      logger.debug '= ' + "Endpoint: #{request.endpoint}".ljust(76) + ' ='
      logger.debug '================================================================================'

      begin
        @app.call request.env
      rescue Errno::EHOSTUNREACH
        error 'Could not reach Elasticsearch at ' + ENV['ELASTICSEARCH_URL']
      rescue Errno::ECONNREFUSED
        error 'Elasticsearch not listening at ' + ENV['ELASTICSEARCH_URL']
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
proxes-0.3.5 lib/proxes/security.rb
proxes-0.3.3 lib/proxes/security.rb
proxes-0.3.2 lib/proxes/security.rb