1alias Domain.{Repo, Accounts, Auth, Actors, Tokens}
2
3mappings = case File.read("provision-uuids.json") do
4{:ok, content} ->
5 case Jason.decode(content) do
6 {:ok, mapping} -> mapping
7 _ -> %{"accounts" => %{}}
8 end
9_ -> %{"accounts" => %{}}
10end
11
12IO.puts("INFO: Fetching account")
13{:ok, account} = Accounts.fetch_account_by_id_or_slug("main")
14
15IO.puts("INFO: Fetching email provider")
16{:ok, email_provider} = Auth.Provider.Query.not_disabled()
17 |> Auth.Provider.Query.by_adapter(:email)
18 |> Auth.Provider.Query.by_account_id(account.id)
19 |> Repo.fetch(Auth.Provider.Query, [])
20
21temp_admin_actor_email = "firezone-provision@localhost.local"
22temp_admin_actor_context = %Auth.Context{
23 type: :browser,
24 user_agent: "Unspecified/0.0",
25 remote_ip: {127, 0, 0, 1},
26 remote_ip_location_region: "N/A",
27 remote_ip_location_city: "N/A",
28 remote_ip_location_lat: 0.0,
29 remote_ip_location_lon: 0.0
30}
31
32{:ok, temp_admin_actor} =
33 Actors.create_actor(account, %{
34 type: :account_admin_user,
35 name: "Token Provisioning"
36 })
37
38{:ok, temp_admin_actor_email_identity} =
39 Auth.create_identity(temp_admin_actor, email_provider, %{
40 provider_identifier: temp_admin_actor_email,
41 provider_identifier_confirmation: temp_admin_actor_email
42 })
43
44{:ok, temp_admin_actor_token} =
45 Auth.create_token(temp_admin_actor_email_identity, temp_admin_actor_context, "temporarynonce", DateTime.utc_now() |> DateTime.add(1, :hour))
46
47{:ok, temp_admin_subject} =
48 Auth.build_subject(temp_admin_actor_token, temp_admin_actor_context)
49
50{:ok, relay_group_token} =
51 Tokens.create_token(%{
52 "type" => :relay_group,
53 "expires_at" => DateTime.utc_now() |> DateTime.add(1, :hour),
54 "secret_fragment" => Domain.Crypto.random_token(32, encoder: :hex32),
55 "relay_group_id" => get_in(mappings, ["accounts", "main", "relay_groups", "my-relays"])
56 })
57
58relay_group_encoded_token = Tokens.encode_fragment!(relay_group_token)
59IO.puts("Created relay token: #{relay_group_encoded_token}")
60File.write("relay_token.txt", relay_group_encoded_token)
61
62{:ok, gateway_group_token} =
63 Tokens.create_token(%{
64 "type" => :gateway_group,
65 "expires_at" => DateTime.utc_now() |> DateTime.add(1, :hour),
66 "secret_fragment" => Domain.Crypto.random_token(32, encoder: :hex32),
67 "account_id" => get_in(mappings, ["accounts", "main", "id"]),
68 "gateway_group_id" => get_in(mappings, ["accounts", "main", "gateway_groups", "site"])
69 }, temp_admin_subject)
70
71gateway_group_encoded_token = Tokens.encode_fragment!(gateway_group_token)
72IO.puts("Created gateway group token: #{gateway_group_encoded_token}")
73File.write("gateway_token.txt", gateway_group_encoded_token)
74
75{:ok, service_account_actor_token} =
76 Tokens.create_token(%{
77 "type" => :client,
78 "expires_at" => DateTime.utc_now() |> DateTime.add(1, :hour),
79 "secret_fragment" => Domain.Crypto.random_token(32, encoder: :hex32),
80 "account_id" => get_in(mappings, ["accounts", "main", "id"]),
81 "actor_id" => get_in(mappings, ["accounts", "main", "actors", "client"])
82 })
83
84service_account_actor_encoded_token = Tokens.encode_fragment!(service_account_actor_token)
85IO.puts("Created service actor token: #{service_account_actor_encoded_token}")
86File.write("client_token.txt", service_account_actor_encoded_token)