Current section
Files
Jump to
Current section
Files
lib/ipfinder.ex
defmodule Ipfinder do
use HTTPotion.Base
alias Ipfinder.Validation.Asnvalidation
alias Ipfinder.Validation.Domainvalidation
alias Ipfinder.Validation.Firewallvalidation
alias Ipfinder.Validation.Firewallvalidation
alias Ipfinder.Validation.Ipvalidation
# alias Ipfinder.Validation.Tokenvalidation
@moduledoc """
Documentation for Ipfinder.
"""
@moduledoc since: "1.0.0"
# DEFAULT BASE URL
@default_base_url "https://api.ipfinder.io/v1/"
# The free token
@default_api_token "free"
# DEFAULT FORMAT
@format "json"
# service status path
@status_path "info"
# IP Address Ranges path
@ranges_path "ranges/"
# Firewall path
@firewall_path "firewall/"
# Get Domain IP path
@domain_path "domain/"
# Get Domain IP history path
@domain_h_path "domainhistory/"
# Domain By ASN, Country,Ranges path
@domain_by_path "domainby/"
defstruct [
token: nil,
baseUrl: nil
]
@doc """
Constructor
## Parameters
* `token` - add your token
* `baseUrl` - add proxy pass
"""
def new(token \\ @default_api_token, baseUrl \\ @default_base_url) do
# Tokenvalidation.validate(token)
%Ipfinder{
token: token,
baseUrl: baseUrl
}
end
def hello do
:world
end
@doc """
call to server
## Parameters
* `this` - Ipfinder
* `path` - specific path of asn, IP address, ranges, Firewall,Token status
* `format`- available format `json` `jsonp` `php` `xml`and Firewall format
"""
def call(this, path, format \\ @format ) do
# HTTPotion.post this.baseUrl, [body: "hello=" <> URI.encode("w o r l d !!"), headers: ["User-Agent": "My App", "Content-Type": "application/x-www-form-urlencoded"]]
#body = '{\"token\": "this.token" , \"format\" : "{format}"}'
body = %{"token" => this.token, "format" => format}
header = ["User-Agent": "IPfinder elixir-client", "Content-Type": "application/json"]
req = HTTPotion.post this.baseUrl <> path, [body: Jason.encode!(body), headers: header ]
if req.status_code != 200 do
{:error, Jason.decode!(req.error, keys: :atoms)}
else
{:ok, Jason.decode!(req.body, keys: :atoms)}
end
end
@doc """
Get details for an Your IP address.
## Parameters
* `this` - Ipfinder
## Examples
```ex
{:ok, auth} = Ipfinder.authentication(Ipfinder)
```
"""
def authentication(this) do
call(this,"")
end
@doc """
Get details for an IP address.
## Parameters
* `this` - Ipfinder
* `path` - IP address.
## Examples
```ex
{:ok, ip} = Ipfinder.getAddressInfo(Ipfinder,"1.0.0.0")
```
"""
def getAddressInfo(this,path) do
Ipvalidation.validate(path)
call(this,path)
end
@doc """
Get details for an AS number.
## Parameters
* `this` - Ipfinder
* `path` - AS number.
## Examples
```ex
{:ok, asn} = Ipfinder.getAsn(Ipfinder,"as1")
```
"""
def getAsn(this,path) do
Asnvalidation.validate(path)
call(this,path)
end
@doc """
Get details for an API Token .
## Examples
```ex
{:ok, status} = Ipfinder.getStatus(Ipfinder)
```
"""
def getStatus(this) do
call(this,@status_path)
end
@doc """
Get details for an Organization name.
## Parameters
* `this` - Ipfinder
* `path` - Organization name.
## Examples
```ex
{:ok, range} = Ipfinder.getRanges(Ipfinder,"Telecom Algeria")
```
"""
def getRanges(this,path) do
call(this,@ranges_path <> URI.encode(path))
end
@doc """
Get Firewall data
## Parameters
* `this` - Ipfinder
* `path` - AS number, alpha-2 country only.
* `formats` - list formats supported
## Examples
```ex
{:ok, range} = Ipfinder.getFirewall(Ipfinder,"DZ",'nginx_deny')
```
"""
def getFirewall(this,path,formats) do
Firewallvalidation.validate(path, formats)
call(this,@firewall_path <> path,formats)
end
@doc """
Get Domain IP
## Parameters
* `this` - Ipfinder
* `path` - The API supports passing in a single website name domain name
## Examples
```ex
{:ok, range} = Ipfinder.getDomain(Ipfinder,"google.com")
```
"""
def getDomain(this,path) do
Domainvalidation.validate(path)
call(this,@domain_path <> path)
end
@doc """
Get Domain History IP
## Parameters
* `this` - Ipfinder
* `path` - The API supports passing in a single website name domain name
## Examples
```ex
{:ok, range} = Ipfinder.getDomainHistory(Ipfinder,"google.com")
```
"""
def getDomainHistory(this,path) do
Domainvalidation.validate(path)
call(this,@domain_h_path <> path)
end
@doc """
Get list Domain By ASN, Country,Ranges
## Parameters
* `this` - Ipfinder
* `by` - The API supports passing in a single ASN,Country,Ranges
## Examples
```ex
{:ok, range} = Ipfinder.getDomainHistory(Ipfinder,"DZ")
```
"""
def getDomainBy(this,by) do
call(this,@domain_by_path <> by)
end
end