Sha256: 2a966f9aa229e566aacd3dd910b838822f6646c991e9dba1ed69c3c9ad5146f7

Contents?: true

Size: 1.23 KB

Versions: 4

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

module Mihari
  module Web
    module Endpoints
      #
      # IP address API endpoint
      #
      class IPAddresses < Grape::API
        class IPGetter < Service
          #
          # @param [String] ip
          #
          # @return [Mihari::Structs::IPInfo::Response]
          #
          def call(ip)
            Mihari::Enrichers::IPInfo.new.call ip
          end
        end

        namespace :ip_addresses do
          desc "Get an IP address", {
            success: Entities::IPAddress,
            failure: [{ code: 404, model: Entities::Message }],
            summary: "Get an IP address"
          }
          params do
            requires :ip, type: String, regexp: /\A[0-9.]+\z/
          end
          get "/:ip", requirements: { ip: %r{[^/]+} } do
            ip = params[:ip].to_s
            result = IPGetter.result(ip)
            return present(result.value!, with: Entities::IPAddress) if result.success?

            failure = result.failure
            case failure
            when Mihari::StatusCodeError
              error!({ message: "ID:#{id} is not found" }, 404) if failure.status_code == 404
            end
            raise failure
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
mihari-6.3.0 lib/mihari/web/endpoints/ip_addresses.rb
mihari-6.2.0 lib/mihari/web/endpoints/ip_addresses.rb
mihari-6.1.0 lib/mihari/web/endpoints/ip_addresses.rb
mihari-6.0.0 lib/mihari/web/endpoints/ip_addresses.rb