55 lines
1.7 KiB
Elixir
55 lines
1.7 KiB
Elixir
|
|
defmodule BerrypodWeb.ProvidersController do
|
||
|
|
@moduledoc """
|
||
|
|
No-JS fallback for provider connection forms.
|
||
|
|
|
||
|
|
With JS enabled, the LiveView handles everything. Without JS,
|
||
|
|
the form POSTs here and we redirect back to the settings page.
|
||
|
|
"""
|
||
|
|
use BerrypodWeb, :controller
|
||
|
|
|
||
|
|
alias Berrypod.{KeyValidation, Products}
|
||
|
|
alias Berrypod.Providers.Provider
|
||
|
|
|
||
|
|
def create(conn, %{"provider_connection" => params}) do
|
||
|
|
api_key = params["api_key"]
|
||
|
|
provider_type = params["provider_type"]
|
||
|
|
provider = Provider.get(provider_type)
|
||
|
|
|
||
|
|
case KeyValidation.validate_provider_key(api_key, provider_type) do
|
||
|
|
{:error, message} ->
|
||
|
|
conn
|
||
|
|
|> put_flash(:error, message)
|
||
|
|
|> redirect(to: ~p"/admin/providers/new?type=#{provider_type}")
|
||
|
|
|
||
|
|
{:ok, api_key} ->
|
||
|
|
case Products.connect_provider(api_key, provider_type) do
|
||
|
|
{:ok, _connection} ->
|
||
|
|
conn
|
||
|
|
|> put_flash(:info, "Connected to #{provider.name}!")
|
||
|
|
|> redirect(to: ~p"/admin/settings")
|
||
|
|
|
||
|
|
{:error, _reason} ->
|
||
|
|
conn
|
||
|
|
|> put_flash(:error, "Could not connect. Check your API key and try again")
|
||
|
|
|> redirect(to: ~p"/admin/providers/new?type=#{provider_type}")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
def update(conn, %{"id" => id, "provider_connection" => params}) do
|
||
|
|
connection = Products.get_provider_connection!(id)
|
||
|
|
|
||
|
|
case Products.update_provider_connection(connection, params) do
|
||
|
|
{:ok, _connection} ->
|
||
|
|
conn
|
||
|
|
|> put_flash(:info, "Settings saved")
|
||
|
|
|> redirect(to: ~p"/admin/settings")
|
||
|
|
|
||
|
|
{:error, _changeset} ->
|
||
|
|
conn
|
||
|
|
|> put_flash(:error, "Could not save settings")
|
||
|
|
|> redirect(to: ~p"/admin/providers/#{id}/edit")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|