mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 10:18:54 +00:00
Checkpoint
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
elixir 1.10.3-otp-23
|
||||
erlang 23.0.2
|
||||
nodejs 10.20.1
|
||||
python 3.7.7
|
||||
|
||||
@@ -17,15 +17,10 @@ defmodule FgHttp.Users.Session do
|
||||
def create_changeset(session, attrs \\ %{}) do
|
||||
session
|
||||
|> cast(attrs, [:email, :password, :last_signed_in_at])
|
||||
|> log_it()
|
||||
|> authenticate_user()
|
||||
|> set_last_signed_in_at()
|
||||
end
|
||||
|
||||
defp log_it(changeset) do
|
||||
changeset
|
||||
end
|
||||
|
||||
defp set_last_signed_in_at(%Ecto.Changeset{valid?: true} = changeset) do
|
||||
last_signed_in_at = DateTime.utc_now()
|
||||
change(changeset, last_signed_in_at: last_signed_in_at)
|
||||
|
||||
@@ -24,14 +24,14 @@ defmodule FgHttpWeb.SessionController do
|
||||
|> clear_session()
|
||||
|> put_session(:user_id, session.id)
|
||||
|> assign(:session, session)
|
||||
|> put_flash(:info, "Session created successfully")
|
||||
|> put_flash(:info, "Signed in successfully.")
|
||||
|> redirect(to: Routes.device_path(conn, :index))
|
||||
|
||||
{:error, changeset} ->
|
||||
conn
|
||||
|> clear_session()
|
||||
|> assign(:session, nil)
|
||||
|> put_flash(:error, "Error creating session.")
|
||||
|> put_flash(:error, "Error signing in.")
|
||||
|> render("new.html", changeset: changeset)
|
||||
end
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<h1>Edit Device</h1>
|
||||
<h3 class="title is-3">Edit Device</h3>
|
||||
|
||||
<%= render "form.html", Map.put(assigns, :action, Routes.device_path(@conn, :update, @device)) %>
|
||||
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
<%= form_for @changeset, @action, fn f -> %>
|
||||
<%= if @changeset.action do %>
|
||||
<div>
|
||||
<p>Oops, something went wrong! Please check the errors below.</p>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="columns">
|
||||
<div class="column is-4">
|
||||
<%= form_for @changeset, @action, fn f -> %>
|
||||
<%= if @changeset.action do %>
|
||||
<div>
|
||||
<p>Oops, something went wrong! Please check the errors below.</p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= label f, :name %>
|
||||
<%= text_input f, :name %>
|
||||
<%= error_tag f, :name %>
|
||||
<div class="field">
|
||||
<%= label f, :name, class: "label" %>
|
||||
<div class="control">
|
||||
<%= text_input f, :name, class: "input" %>
|
||||
</div>
|
||||
<p class="help">
|
||||
<%= error_tag f, :name %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<%= submit "Save" %>
|
||||
<div class="field">
|
||||
<%= submit "Save", class: "button is-primary" %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -25,6 +25,4 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
<%= link "New Device", to: Routes.device_path(@conn, :new) %>
|
||||
</p>
|
||||
<%= link "New Device", to: Routes.device_path(@conn, :new) %>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<h1>Edit Rule</h1>
|
||||
<h3 class="title is-3">Edit Rule</h3>
|
||||
|
||||
<%= render "form.html", Map.put(assigns, :action, Routes.rule_path(@conn, :update, @rule)) %>
|
||||
|
||||
|
||||
@@ -1,41 +1,70 @@
|
||||
<%= form_for @changeset, @action, [class: "black-80"], fn f -> %>
|
||||
<%= if @changeset.action do %>
|
||||
<div class="mt4 measure">
|
||||
<p>Oops, something went wrong! Please check the errors below.</p>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="columns">
|
||||
<div class="column is-4">
|
||||
<%= form_for @changeset, @action, [], fn f -> %>
|
||||
<%= if @changeset.action do %>
|
||||
<div>
|
||||
<p>Oops, something went wrong! Please check the errors below.</p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div class="mt4 measure">
|
||||
<%= label f, :destination, class: "f6 b db mb2" %>
|
||||
<%= text_input f, :destination, class: "input-reset ba b--black-20 pa2 mb2 db w-100" %>
|
||||
<%= error_tag f, :destination %>
|
||||
</div>
|
||||
<div class="field">
|
||||
<%= label f, :destination, class: "label" %>
|
||||
<div class="control">
|
||||
<%=
|
||||
text_input f,
|
||||
:destination,
|
||||
class: "input",
|
||||
placeholder: "IPv4/6 CIDR range or address"
|
||||
%>
|
||||
</div>
|
||||
<p class="help">
|
||||
<%= error_tag f, :destination %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mt4 measure">
|
||||
<%= label f, :port, class: "f6 b db mb2" %>
|
||||
<%= text_input f, :port, class: "input-reset ba b--black-20 pa2 mb2 db w-100" %>
|
||||
<%= error_tag f, :port %>
|
||||
</div>
|
||||
<div class="field">
|
||||
<%= label f, :port, class: "label" %>
|
||||
<div class="control">
|
||||
<%= text_input f, :port, class: "input", placeholder: "1 - 65535" %>
|
||||
</div>
|
||||
<p class="help">
|
||||
<%= error_tag f, :port %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mt4 measure">
|
||||
<%= label f, :protocol, class: "f6 b db mb2" %>
|
||||
<%= text_input f, :protocol, class: "input-reset ba b--black-20 pa2 mb2 db w-100" %>
|
||||
<%= error_tag f, :protocol %>
|
||||
</div>
|
||||
<div class="field">
|
||||
<%= label f, :protocol, class: "label" %>
|
||||
<div class="select">
|
||||
<%= select f, :protocol, protocol_options_for_select() %>
|
||||
</div>
|
||||
<p class="help">
|
||||
<%= error_tag f, :protocol %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mt4 measure">
|
||||
<%= label f, :priority, class: "f6 b db mb2" %>
|
||||
<%= text_input f, :priority, class: "input-reset ba b--black-20 pa2 mb2 db w-100" %>
|
||||
<%= error_tag f, :priority %>
|
||||
</div>
|
||||
<div class="field">
|
||||
<%= label f, :priority, class: "label" %>
|
||||
<div class="control">
|
||||
<%= text_input f, :priority, class: "input" %>
|
||||
</div>
|
||||
<p class="help">
|
||||
<%= error_tag f, :priority %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mt4 measure">
|
||||
<%= label f, :enabled, class: "f6 b db mb2" %>
|
||||
<%= checkbox f, :enabled %>
|
||||
<%= error_tag f, :enabled %>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label class="checkbox">
|
||||
<%= checkbox f, :enabled, class: "checkbox" %>
|
||||
Enabled
|
||||
</label>
|
||||
<p class="help">
|
||||
<%= error_tag f, :enabled %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mt4 measure">
|
||||
<%= submit "Save" %>
|
||||
<div class="field">
|
||||
<%= submit "Save", class: "button is-primary" %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -1,29 +1,33 @@
|
||||
<h1>Listing Rules for Device <%= @device.name %></h1>
|
||||
<h1 class="title">Listing Rules for Device <%= @device.name %></h1>
|
||||
|
||||
<table class="collapse ba br2 b--black-10 pv2 ph3 mt4">
|
||||
<tbody>
|
||||
<tr class="striped--near-white">
|
||||
<th class="pv2 ph3 tl f6 fw6 ttu">Action</th>
|
||||
<th class="pv2 ph3 tl f6 fw6 ttu">Destination</th>
|
||||
<th class="pv2 ph3 tl f6 fw6 ttu">Port</th>
|
||||
<th class="pv2 ph3 tl f6 fw6 ttu">Protocol</th>
|
||||
<th class="pv2 ph3 tl f6 fw6 ttu">Priority</th>
|
||||
<th class="pv2 ph3 tl f6 fw6 ttu">Enabled</th>
|
||||
<table class="table">
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Action</th>
|
||||
<th>Destination</th>
|
||||
<th>Port</th>
|
||||
<th>Protocol</th>
|
||||
<th>Priority</th>
|
||||
<th>Enabled</th>
|
||||
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<%= for rule <- @rules do %>
|
||||
<tr class="striped--near-white">
|
||||
<td class="pv2 ph3 tl f6 fw6 ttu"><%= rule.action %></td>
|
||||
<td class="pv2 ph3 tl f6 fw6 ttu"><%= rule.destination %></td>
|
||||
<td class="pv2 ph3 tl f6 fw6 ttu"><%= rule.port %></td>
|
||||
<td class="pv2 ph3 tl f6 fw6 ttu"><%= rule.protocol %></td>
|
||||
<td class="pv2 ph3 tl f6 fw6 ttu"><%= rule.priority %></td>
|
||||
<td class="pv2 ph3 tl f6 fw6 ttu"><%= rule.enabled %></td>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><%= rule.action %></td>
|
||||
<td><%= rule.destination %></td>
|
||||
<td><%= rule.port %></td>
|
||||
<td><%= rule.protocol %></td>
|
||||
<td><%= rule.priority %></td>
|
||||
<td><%= rule.enabled %></td>
|
||||
<td>
|
||||
<span><%= link "Show", to: Routes.rule_path(@conn, :show, rule) %></span>
|
||||
|
|
||||
<span><%= link "Edit", to: Routes.rule_path(@conn, :edit, rule) %></span>
|
||||
|
|
||||
<span><%= link "Delete", to: Routes.rule_path(@conn, :delete, rule), method: :delete, data: [confirm: "Are you sure?"] %></span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -31,6 +35,8 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
<%= link "New Rule", to: Routes.device_rule_path(@conn, :new, @device) %>
|
||||
</p>
|
||||
<%=
|
||||
link "New Rule",
|
||||
to: Routes.device_rule_path(@conn, :new, @device),
|
||||
class: "button is-primary"
|
||||
%>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<h1>Show Rule</h1>
|
||||
<h3 class="title is-3">Show Rule</h1>
|
||||
|
||||
<ul>
|
||||
|
||||
|
||||
@@ -4,8 +4,10 @@
|
||||
<hr>
|
||||
|
||||
<%= form_for(@conn, Routes.session_path(@conn, :create), [as: :session], fn f -> %>
|
||||
<%= if f.errors do %>
|
||||
<!-- Errors -->
|
||||
<%= if assigns[:changeset] && @changeset.action do %>
|
||||
<div>
|
||||
<p>Oops, something went wrong! Please check the errors below.</p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div class="field">
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
defmodule FgHttpWeb.RuleView do
|
||||
use FgHttpWeb, :view
|
||||
|
||||
def protocol_options_for_select do
|
||||
RuleProtocolEnum.__enum_map__()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -35,7 +35,7 @@ defmodule FgHttpWeb.SessionControllerTest do
|
||||
test_conn = post(conn, Routes.session_path(conn, :create), session: @valid_attrs)
|
||||
|
||||
assert redirected_to(test_conn) == Routes.device_path(test_conn, :index)
|
||||
assert get_flash(test_conn, :info) == "Session created successfully"
|
||||
assert get_flash(test_conn, :info) == "Signed in successfully."
|
||||
assert get_session(test_conn, :user_id) == user.id
|
||||
end
|
||||
|
||||
@@ -43,7 +43,7 @@ defmodule FgHttpWeb.SessionControllerTest do
|
||||
test_conn = post(conn, Routes.session_path(conn, :create), session: @invalid_attrs)
|
||||
|
||||
assert html_response(test_conn, 200) =~ "Sign In"
|
||||
assert get_flash(test_conn, :error) == "Error creating session."
|
||||
assert get_flash(test_conn, :error) == "Error signing in."
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
3
mix.exs
3
mix.exs
@@ -40,7 +40,8 @@ defmodule FireguardUmbrella.MixProject do
|
||||
# Run "mix help deps" for examples and options.
|
||||
defp deps do
|
||||
[
|
||||
{:excoveralls, "~> 0.13", only: :test}
|
||||
{:excoveralls, "~> 0.13", only: :test},
|
||||
{:mix_test_watch, "~> 1.0", only: :dev, runtime: false}
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
5
mix.lock
5
mix.lock
@@ -13,12 +13,12 @@
|
||||
"ecto": {:hex, :ecto, "3.4.5", "2bcd262f57b2c888b0bd7f7a28c8a48aa11dc1a2c6a858e45dd8f8426d504265", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "8c6d1d4d524559e9b7a062f0498e2c206122552d63eacff0a6567ffe7a8e8691"},
|
||||
"ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"},
|
||||
"ecto_network": {:hex, :ecto_network, "1.3.0", "1e77fa37c20e0f6a426d3862732f3317b0fa4c18f123d325f81752a491d7304e", [:mix], [{:ecto_sql, ">= 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:phoenix_html, ">= 0.0.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.14.0", [hex: :postgrex, repo: "hexpm", optional: false]}], "hexpm", "053a5e46ef2837e8ea5ea97c82fa0f5494699209eddd764e663c85f11b2865bd"},
|
||||
"ecto_sql": {:hex, :ecto_sql, "3.4.4", "d28bac2d420f708993baed522054870086fd45016a9d09bb2cd521b9c48d32ea", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0 or ~> 0.4.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.0", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "edb49af715dd72f213b66adfd0f668a43c17ed510b5d9ac7528569b23af57fe8"},
|
||||
"ecto_sql": {:hex, :ecto_sql, "3.4.5", "30161f81b167d561a9a2df4329c10ae05ff36eca7ccc84628f2c8b9fa1e43323", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0 or ~> 0.4.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.0", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "31990c6a3579b36a3c0841d34a94c275e727de8b84f58509da5f1b2032c98ac2"},
|
||||
"elixir_make": {:hex, :elixir_make, "0.6.0", "38349f3e29aff4864352084fc736fa7fa0f2995a819a737554f7ebd28b85aaab", [:mix], [], "hexpm", "d522695b93b7f0b4c0fcb2dfe73a6b905b1c301226a5a55cb42e5b14d509e050"},
|
||||
"ex_machina": {:hex, :ex_machina, "2.4.0", "09a34c5d371bfb5f78399029194a8ff67aff340ebe8ba19040181af35315eabb", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "a20bc9ddc721b33ea913b93666c5d0bdca5cbad7a67540784ae277228832d72c"},
|
||||
"excoveralls": {:hex, :excoveralls, "0.13.0", "4e1b7cc4e0351d8d16e9be21b0345a7e165798ee5319c7800b9138ce17e0b38e", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "fe2a56c8909564e2e6764765878d7d5e141f2af3bc8ff3b018a68ee2a218fced"},
|
||||
"file_system": {:hex, :file_system, "0.2.8", "f632bd287927a1eed2b718f22af727c5aeaccc9a98d8c2bd7bff709e851dc986", [:mix], [], "hexpm", "97a3b6f8d63ef53bd0113070102db2ce05352ecf0d25390eb8d747c2bde98bca"},
|
||||
"floki": {:hex, :floki, "0.26.0", "4df88977e2e357c6720e1b650f613444bfb48c5acfc6a0c646ab007d08ad13bf", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "e7b66ce7feef5518a9cd9fc7b52dd62a64028bd9cb6d6ad282a0f0fc90a4ae52"},
|
||||
"floki": {:hex, :floki, "0.27.0", "6b29a14283f1e2e8fad824bc930eaa9477c462022075df6bea8f0ad811c13599", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "583b8c13697c37179f1f82443bcc7ad2f76fbc0bf4c186606eebd658f7f2631b"},
|
||||
"gettext": {:hex, :gettext, "0.18.0", "406d6b9e0e3278162c2ae1de0a60270452c553536772167e2d701f028116f870", [:mix], [], "hexpm", "c3f850be6367ebe1a08616c2158affe4a23231c70391050bf359d5f92f66a571"},
|
||||
"hackney": {:hex, :hackney, "1.16.0", "5096ac8e823e3a441477b2d187e30dd3fff1a82991a806b2003845ce72ce2d84", [:rebar3], [{:certifi, "2.5.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.1", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.0", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.6", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "3bf0bebbd5d3092a3543b783bf065165fa5d3ad4b899b836810e513064134e18"},
|
||||
"html_entities": {:hex, :html_entities, "0.5.1", "1c9715058b42c35a2ab65edc5b36d0ea66dd083767bef6e3edb57870ef556549", [:mix], [], "hexpm", "30efab070904eb897ff05cd52fa61c1025d7f8ef3a9ca250bc4e6513d16c32de"},
|
||||
@@ -27,6 +27,7 @@
|
||||
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
|
||||
"mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm", "6cbe761d6a0ca5a31a0931bf4c63204bceb64538e664a8ecf784a9a6f3b875f1"},
|
||||
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
|
||||
"mix_test_watch": {:hex, :mix_test_watch, "1.0.2", "34900184cbbbc6b6ed616ed3a8ea9b791f9fd2088419352a6d3200525637f785", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "47ac558d8b06f684773972c6d04fcc15590abdb97aeb7666da19fcbfdc441a07"},
|
||||
"parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"},
|
||||
"phoenix": {:hex, :phoenix, "1.5.3", "bfe0404e48ea03dfe17f141eff34e1e058a23f15f109885bbdcf62be303b49ff", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "8e16febeb9640d8b33895a691a56481464b82836d338bb3a23125cd7b6157c25"},
|
||||
"phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"},
|
||||
|
||||
Reference in New Issue
Block a user