mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-28 18:18:55 +00:00
Why: * In order to manage a large number of Firezone Sites, Resources, Policies, etc... a REST API is needed as clicking through the UI is too time consuming, as well as prone to error. By providing a REST API Firezone customers will be able to manage things within their Firezone accounts with code.
64 lines
1.8 KiB
Elixir
64 lines
1.8 KiB
Elixir
defmodule API.ConnCase do
|
|
use ExUnit.CaseTemplate
|
|
use Domain.CaseTemplate
|
|
|
|
using do
|
|
quote do
|
|
# The default endpoint for testing
|
|
@endpoint API.Endpoint
|
|
|
|
use API, :verified_routes
|
|
|
|
# Import conveniences for testing with connections
|
|
import Plug.Conn
|
|
import Phoenix.ConnTest
|
|
import API.ConnCase
|
|
|
|
alias Domain.Repo
|
|
alias Domain.Fixtures
|
|
alias Domain.Mocks
|
|
end
|
|
end
|
|
|
|
setup _tags do
|
|
user_agent = "testing"
|
|
|
|
conn =
|
|
Phoenix.ConnTest.build_conn()
|
|
|> Plug.Conn.put_req_header("user-agent", user_agent)
|
|
|> Plug.Test.init_test_session(%{})
|
|
|> Plug.Conn.put_req_header("x-geo-location-region", "UA")
|
|
|> Plug.Conn.put_req_header("x-geo-location-city", "Kyiv")
|
|
|> Plug.Conn.put_req_header("x-geo-location-coordinates", "50.4333,30.5167")
|
|
|
|
conn = %{conn | secret_key_base: API.Endpoint.config(:secret_key_base)}
|
|
|
|
{:ok, conn: conn, user_agent: user_agent}
|
|
end
|
|
|
|
def authorize_conn(conn, %Domain.Actors.Actor{} = actor) do
|
|
expires_in = DateTime.utc_now() |> DateTime.add(300, :second)
|
|
{"user-agent", user_agent} = List.keyfind(conn.req_headers, "user-agent", 0)
|
|
|
|
attrs = %{
|
|
"name" => "conn_case_token",
|
|
"expires_at" => expires_in,
|
|
"type" => :api_client,
|
|
"secret_fragment" => Domain.Crypto.random_token(32, encoder: :hex32),
|
|
"account_id" => actor.account_id,
|
|
"actor_id" => actor.id,
|
|
"created_by_user_agent" => user_agent,
|
|
"created_by_remote_ip" => conn.remote_ip
|
|
}
|
|
|
|
{:ok, token} = Domain.Tokens.create_token(attrs)
|
|
encoded_fragment = Domain.Tokens.encode_fragment!(token)
|
|
|
|
Plug.Conn.put_req_header(conn, "authorization", "Bearer " <> encoded_fragment)
|
|
end
|
|
|
|
def equal_ids?(list1, list2) do
|
|
MapSet.equal?(MapSet.new(list1), MapSet.new(list2))
|
|
end
|
|
end
|