defmodule Arpas.REST.Esri.Api do
@moduledoc ~S'''
Utilita per accedere ad AGOL(Arcgis online) tramite api rest
'''
alias Arpas.REST.Esri.Env
alias Cape.Generico, as: Gen
def users do
[:no_token, :alai, :idro]
end
@doc """
Restituisce token per accedere ad AGOL
:idro
:alai
"""
def token(:idro), do: token(Env.id_idro(), Env.secret_idro())
def token(:alai), do: token(Env.id(), Env.secret())
def token(), do: token(:idro)
def token(id, secret) do
url = Env.token_url()
expiration = "21600"
payload =
"client_id=#{id}&client_secret=#{secret}&grant_type=client_credentials&expiration=#{expiration}"
case Gen.post(url, payload) do
{:error, reason} ->
IO.inspect(reason)
{:error, reason}
my_token ->
IO.inspect(my_token, label: "my_token")
adesso = DateTime.now!("Etc/UTC")
finisce = my_token["expires_in"]
IO.puts(finisce)
scadenza = DateTime.add(adesso, finisce, :second)
my_token = Map.put(my_token, "log_now", adesso)
Map.put(my_token, "scade", scadenza)
end
end
def get_access_token(log_as \\ :idro) do
token(log_as)
|> Map.get("access_token")
end
def add_token(log_as) do
case log_as do
:no_token ->
""
_user ->
user_token = get_access_token(log_as)
"token=#{user_token}"
end
end
def query_all(log_as \\ :no_token) do
access = add_token(log_as)
"/query?where=1=1&outfields=*&f=json&#{access}"
end
def query_feature_info(log_as \\ :no_token, url) do
access = add_token(log_as)
url = url <> "?f=json&#{access}"
IO.inspect(url, label: "url")
Gen.get(url)
end
def layers(log_as \\ :idro, url \\ Env.services()) do
access = get_access_token(log_as)
url = url <> "?token=#{access}&f=json"
IO.inspect(url, label: "url")
Gen.get(url)
end
def terzo do
{:ok, res} = layers()
servizi = Map.get(res, "services")
tl(servizi) |> tl |> hd
end
end