diff --git a/backend/lib/azimutt/accounts.ex b/backend/lib/azimutt/accounts.ex index da076cce2..6085d3409 100644 --- a/backend/lib/azimutt/accounts.ex +++ b/backend/lib/azimutt/accounts.ex @@ -345,7 +345,7 @@ defmodule Azimutt.Accounts do if Azimutt.config(:global_organization) && Azimutt.config(:global_organization_alone) do user.organizations |> Enum.filter(fn orga -> orga.id == Azimutt.config(:global_organization) end) else - user.organizations + user.organizations |> Enum.filter(fn orga -> orga.deleted_at == nil end) end end diff --git a/backend/lib/azimutt_web/controllers/api/clever_cloud_controller.ex b/backend/lib/azimutt_web/controllers/api/clever_cloud_controller.ex index 767197752..3095a46fa 100644 --- a/backend/lib/azimutt_web/controllers/api/clever_cloud_controller.ex +++ b/backend/lib/azimutt_web/controllers/api/clever_cloud_controller.ex @@ -3,13 +3,10 @@ defmodule AzimuttWeb.Api.CleverCloudController do use AzimuttWeb, :controller require Logger alias Azimutt.CleverCloud - alias Azimutt.Utils.Stringx action_fallback AzimuttWeb.Api.FallbackController # https://www.clever-cloud.com/doc/extend/add-ons-api/#provisioning def create(conn, params) do - Logger.info("Api.CleverCloudController.create(#{Stringx.inspect(params)})") - case CleverCloud.create_resource(params) do {:ok, resource} -> conn |> render("show.json", resource: resource, message: "Your Azimutt add-on is now provisioned.") {:error, _err} -> conn |> send_resp(:unprocessable_entity, "") @@ -17,8 +14,7 @@ defmodule AzimuttWeb.Api.CleverCloudController do end # https://www.clever-cloud.com/doc/extend/add-ons-api/#plan-change - def update(conn, %{"resource_id" => resource_id, "plan" => plan} = params) do - Logger.info("Api.CleverCloudController.update(#{Stringx.inspect(params)})") + def update(conn, %{"resource_id" => resource_id, "plan" => plan}) do now = DateTime.utc_now() case CleverCloud.get_resource(resource_id) do @@ -37,8 +33,7 @@ defmodule AzimuttWeb.Api.CleverCloudController do end # https://www.clever-cloud.com/doc/extend/add-ons-api/#deprovisioning - def delete(conn, %{"resource_id" => resource_id} = params) do - Logger.info("Api.CleverCloudController.delete(#{Stringx.inspect(params)})") + def delete(conn, %{"resource_id" => resource_id}) do now = DateTime.utc_now() case CleverCloud.get_resource(resource_id) do diff --git a/backend/lib/azimutt_web/controllers/clever_cloud_controller.ex b/backend/lib/azimutt_web/controllers/clever_cloud_controller.ex index 4bcb359e6..dba0475f0 100644 --- a/backend/lib/azimutt_web/controllers/clever_cloud_controller.ex +++ b/backend/lib/azimutt_web/controllers/clever_cloud_controller.ex @@ -12,8 +12,7 @@ defmodule AzimuttWeb.CleverCloudController do action_fallback AzimuttWeb.FallbackController # helper to ease clever cloud testing in local - def index(conn, params) do - Logger.info("CleverCloudController.index(#{Stringx.inspect(params)})") + def index(conn, _params) do # defined as env variable (see .env), don't use env vars to make leak impossible clever_cloud = %{ addon_id: "azimutt-dev", @@ -28,7 +27,6 @@ defmodule AzimuttWeb.CleverCloudController do # https://www.clever-cloud.com/doc/extend/add-ons-api/#sso # TODO: how to get user_id in SSO? Get it from the resource? What happen if several users from Clever Cloud??? def login(conn, %{"id" => resource_id, "token" => token, "timestamp" => timestamp, "email" => email} = params) do - Logger.info("CleverCloudController.login(#{Stringx.inspect(params)})") now = DateTime.utc_now() now_ts = System.os_time(:second) salt = Azimutt.config(:clever_cloud_sso_salt) @@ -91,8 +89,7 @@ defmodule AzimuttWeb.CleverCloudController do end end - def show(conn, %{"resource_id" => resource_id} = params) do - Logger.info("CleverCloudController.show(#{Stringx.inspect(params)})") + def show(conn, %{"resource_id" => resource_id}) do current_user = conn.assigns.current_user resource = conn.assigns.clever_cloud diff --git a/backend/lib/azimutt_web/controllers/user_auth.ex b/backend/lib/azimutt_web/controllers/user_auth.ex index 4f7159237..c52ccee02 100644 --- a/backend/lib/azimutt_web/controllers/user_auth.ex +++ b/backend/lib/azimutt_web/controllers/user_auth.ex @@ -9,7 +9,6 @@ defmodule AzimuttWeb.UserAuth do alias Azimutt.Heroku alias Azimutt.Tracking alias Azimutt.Utils.Result - alias Azimutt.Utils.Stringx alias AzimuttWeb.Router.Helpers, as: Routes @seconds 1 @@ -23,9 +22,9 @@ defmodule AzimuttWeb.UserAuth do @remember_me_cookie "_azimutt_web_user_remember_me" @remember_me_options [sign: true, max_age: 60 * @days, same_site: "Lax"] - # cf https://www.clever-cloud.com/doc/extend/add-ons-api/#sso + # cf https://www.clever-cloud.com/doc/extend/add-ons-api/#sso, same_site should be None to allow iframe cookies @clever_cloud_cookie "_azimutt_clever_cloud_sso" - @clever_cloud_options [sign: true, max_age: 90 * @minutes, same_site: "Lax"] + @clever_cloud_options [sign: true, max_age: 90 * @minutes, same_site: "None", secure: true] # cf https://devcenter.heroku.com/articles/add-on-single-sign-on @heroku_cookie "_azimutt_heroku_sso" @@ -211,8 +210,6 @@ defmodule AzimuttWeb.UserAuth do do: require_basic_auth(conn, "Heroku", Azimutt.config(:heroku_addon_id), Azimutt.config(:heroku_password)) defp require_basic_auth(conn, name, expected_user, expected_pass) do - Logger.info("UserAuth.require_basic_auth(#{Stringx.inspect(%{name: name, user: expected_user, pass: expected_pass})})") - if expected_user && expected_pass do case Plug.BasicAuth.parse_basic_auth(conn) do {user, pass} -> @@ -269,8 +266,6 @@ defmodule AzimuttWeb.UserAuth do end def require_clever_cloud_resource(conn, _opts) do - Logger.info("UserAuth.require_clever_cloud_resource()") - if conn.assigns[:clever_cloud] do conn else diff --git a/backend/lib/azimutt_web/router.ex b/backend/lib/azimutt_web/router.ex index 3a5440c57..120a9171f 100644 --- a/backend/lib/azimutt_web/router.ex +++ b/backend/lib/azimutt_web/router.ex @@ -194,7 +194,7 @@ defmodule AzimuttWeb.Router do end scope "/clevercloud", AzimuttWeb do - pipe_through([:browser, :require_clever_cloud_resource, :require_authed_user]) + pipe_through([:browser, :require_clever_cloud_resource, :require_authed_user, AllowCrossOriginIframe]) get("/resources/:resource_id", CleverCloudController, :show) end @@ -306,8 +306,13 @@ defmodule AzimuttWeb.Router do get("/create", ElmController, :create) get("/new", ElmController, :new) get("/:organization_id", ElmController, :orga_show) - get("/:organization_id/create", ElmController, :orga_create) get("/:organization_id/new", ElmController, :orga_new) + end + + # allow cross origin iframe for Clever Cloud + scope "/", AzimuttWeb do + pipe_through([:browser, :enforce_user_requirements, :elm_root_layout, AllowCrossOriginIframe]) + get("/:organization_id/create", ElmController, :orga_create) get("/:organization_id/:project_id", ElmController, :project_show) end end diff --git a/backend/lib/azimutt_web/templates/website/index.html.heex b/backend/lib/azimutt_web/templates/website/index.html.heex index e48e81c1d..c352f085c 100644 --- a/backend/lib/azimutt_web/templates/website/index.html.heex +++ b/backend/lib/azimutt_web/templates/website/index.html.heex @@ -3,29 +3,20 @@
- Hello Product Hunt user! Happy to see you there 😉 -
- <% else %> -- 🎉 We are live on Product Hunt - See our launch -
- <% end %> -