Skip to content

Commit

Permalink
Merge Plugins.API.Router into main one
Browse files Browse the repository at this point in the history
In order to get grafana metrics reported
See: akoutmos/prom_ex#224
  • Loading branch information
aerosol committed Feb 8, 2024
1 parent c8b2534 commit d3a50c2
Show file tree
Hide file tree
Showing 15 changed files with 138 additions and 126 deletions.
5 changes: 2 additions & 3 deletions lib/plausible_web.ex
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ defmodule PlausibleWeb do
quote do
use Phoenix.Controller, namespace: PlausibleWeb.Plugins.API
import Plug.Conn
import PlausibleWeb.Plugins.API.Router.Helpers
import PlausibleWeb.Plugins.API, only: [base_uri: 0]
import PlausibleWeb.Router.Helpers

alias PlausibleWeb.Plugins.API.Schemas
alias PlausibleWeb.Plugins.API.Views
Expand All @@ -82,7 +81,7 @@ defmodule PlausibleWeb do
namespace: PlausibleWeb.Plugins.API,
root: ""

alias PlausibleWeb.Plugins.API.Router.Helpers
alias PlausibleWeb.Router.Helpers
import PlausibleWeb.Plugins.API.Views.Pagination, only: [render_metadata_links: 4]
end
end
Expand Down
16 changes: 0 additions & 16 deletions lib/plausible_web/plugins/api.ex

This file was deleted.

3 changes: 2 additions & 1 deletion lib/plausible_web/plugins/api/controllers/goals.ex
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ defmodule PlausibleWeb.Plugins.API.Controllers.Goals do

case API.Goals.create(site, goal_or_goals) do
{:ok, goals} ->
location_headers = Enum.map(goals, &{"location", goals_url(base_uri(), :get, &1.id)})
location_headers =
Enum.map(goals, &{"location", plugins_api_goals_url(conn, :get, &1.id)})

conn
|> prepend_resp_headers(location_headers)
Expand Down
2 changes: 1 addition & 1 deletion lib/plausible_web/plugins/api/controllers/shared_links.ex
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinks do
conn
|> put_view(Views.SharedLink)
|> put_status(:created)
|> put_resp_header("location", shared_links_url(base_uri(), :get, shared_link.id))
|> put_resp_header("location", plugins_api_shared_links_url(conn, :get, shared_link.id))
|> render("shared_link.json", shared_link: shared_link, authorized_site: site)
end

Expand Down
36 changes: 0 additions & 36 deletions lib/plausible_web/plugins/api/router.ex

This file was deleted.

4 changes: 2 additions & 2 deletions lib/plausible_web/plugins/api/spec.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ defmodule PlausibleWeb.Plugins.API.Spec do
OpenAPI specification for the Plugins API
"""
alias OpenApiSpex.{Components, Info, OpenApi, Paths, Server}
alias PlausibleWeb.Plugins.API.Router
alias PlausibleWeb.Router
@behaviour OpenApi

@impl OpenApi
Expand All @@ -12,7 +12,7 @@ defmodule PlausibleWeb.Plugins.API.Spec do
servers: [
%Server{
description: "This server",
url: to_string(PlausibleWeb.Plugins.API.base_uri()),
url: PlausibleWeb.Endpoint.url(),
variables: %{}
}
],
Expand Down
4 changes: 2 additions & 2 deletions lib/plausible_web/plugins/api/views/goal.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ defmodule PlausibleWeb.Plugins.API.Views.Goal do
}) do
%{
goals: render_many(goals, __MODULE__, "goal.json", authorized_site: site),
meta: render_metadata_links(metadata, :goals_url, :index, conn.query_params)
meta: render_metadata_links(metadata, :plugins_api_goals_url, :index, conn.query_params)
}
end

Expand All @@ -23,7 +23,7 @@ defmodule PlausibleWeb.Plugins.API.Views.Goal do
}) do
%{
goals: render_many(goals, __MODULE__, "goal.json", authorized_site: site),
meta: render_metadata_links(%{}, :goals_url, :index, conn.query_params)
meta: render_metadata_links(%{}, :plugins_api_goals_url, :index, conn.query_params)
}
end

Expand Down
4 changes: 2 additions & 2 deletions lib/plausible_web/plugins/api/views/pagination.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ defmodule PlausibleWeb.Plugins.API.Views.Pagination do
namespace: PlausibleWeb.Plugins.API,
root: ""

alias PlausibleWeb.Plugins.API.Router.Helpers
alias PlausibleWeb.Router.Helpers

def render_metadata_links(meta, helper_fn, helper_fn_args, existing_params \\ %{}) do
render(__MODULE__, "pagination.json", %{
Expand All @@ -21,7 +21,7 @@ defmodule PlausibleWeb.Plugins.API.Views.Pagination do
|> Map.merge(existing_params)

args = [
PlausibleWeb.Plugins.API.base_uri()
PlausibleWeb.Endpoint
| List.wrap(helper_fn_args) ++ [query_params]
]

Expand Down
2 changes: 1 addition & 1 deletion lib/plausible_web/plugins/api/views/shared_link.ex
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ defmodule PlausibleWeb.Plugins.API.Views.SharedLink do
%{
shared_links:
render_many(shared_links, __MODULE__, "shared_link.json", authorized_site: site),
meta: render_metadata_links(metadata, :shared_links_url, :index, conn.query_params)
meta: render_metadata_links(metadata, :plugins_api_shared_links_url, :index, conn.query_params)
}
end

Expand Down
35 changes: 33 additions & 2 deletions lib/plausible_web/router.ex
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,39 @@ defmodule PlausibleWeb.Router do
end
end

scope path: "/api/plugins" do
forward "/", PlausibleWeb.Plugins.API.Router
scope path: "/api/plugins", as: :plugins_api do
pipeline :plugins_api_auth do
plug(PlausibleWeb.Plugs.AuthorizePluginsAPI)
end

pipeline :plugins_api do
plug(:accepts, ["json"])
plug(OpenApiSpex.Plug.PutApiSpec, module: PlausibleWeb.Plugins.API.Spec)
end

scope "/spec" do
pipe_through(:plugins_api)
get("/openapi", OpenApiSpex.Plug.RenderSpec, [])
get("/swagger-ui", OpenApiSpex.Plug.SwaggerUI, path: "/api/plugins/spec/openapi")
end

scope "/v1", PlausibleWeb.Plugins.API.Controllers, assigns: %{plugins_api: true} do
pipe_through([:plugins_api, :plugins_api_auth])

get("/shared_links", SharedLinks, :index)
get("/shared_links/:id", SharedLinks, :get)
put("/shared_links", SharedLinks, :create)

get("/goals", Goals, :index)
get("/goals/:id", Goals, :get)
put("/goals", Goals, :create)

delete("/goals/:id", Goals, :delete)
delete("/goals", Goals, :delete_bulk)

put("/custom_props", CustomProps, :enable)
delete("/custom_props", CustomProps, :disable)
end
end

scope "/api/stats", PlausibleWeb.Api do
Expand Down
2 changes: 1 addition & 1 deletion lib/plausible_web/views/error_view.ex
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ defmodule PlausibleWeb.ErrorView do
use Plausible
use PlausibleWeb, :view

def render("500.json", %{conn: %{private: %{PlausibleWeb.Plugins.API.Router => _}}}) do
def render("500.json", %{conn: %{assigns: %{plugins_api: true}}}) do
contact_support_note =
on_full_build do
"If the problem persists please contact [email protected]"
Expand Down
20 changes: 10 additions & 10 deletions test/plausible_web/plugins/api/controllers/custom_props_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do

describe "unauthorized calls" do
for {method, url} <- [
{:put, Routes.custom_props_url(base_uri(), :enable)},
{:delete, Routes.custom_props_url(base_uri(), :disable)}
{:put, Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)},
{:delete, Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :disable)}
] do
test "unauthorized call: #{method} #{url}", %{conn: conn} do
conn
Expand All @@ -44,7 +44,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do
site = Plausible.Repo.preload(site, :owner)
insert(:growth_subscription, user: site.owner)

url = Routes.custom_props_url(base_uri(), :enable)
url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)

payload = %{
custom_prop: %{key: "author"}
Expand All @@ -68,7 +68,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do
site = Plausible.Repo.preload(site, :owner)
insert(:growth_subscription, user: site.owner)

url = Routes.custom_props_url(base_uri(), :enable)
url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)

payload = %{
custom_props: [
Expand All @@ -92,7 +92,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do

describe "put /custom_prop - enable single prop" do
test "validates input according to the schema", %{conn: conn, token: token, site: site} do
url = Routes.custom_props_url(base_uri(), :enable)
url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)

conn
|> authenticate(site.domain, token)
Expand All @@ -103,7 +103,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do
end

test "enables single custom prop", %{conn: conn, token: token, site: site} do
url = Routes.custom_props_url(base_uri(), :enable)
url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)

payload = %{
custom_prop: %{key: "author"}
Expand All @@ -130,7 +130,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do
end

test "is idempotent", %{conn: conn, token: token, site: site} do
url = Routes.custom_props_url(base_uri(), :enable)
url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)

initial_conn =
conn
Expand Down Expand Up @@ -166,7 +166,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do

describe "put /custom_props - bulk creation" do
test "creates many custom props", %{conn: conn, token: token, site: site} do
url = Routes.custom_props_url(base_uri(), :enable)
url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)

payload = %{
custom_props: [
Expand Down Expand Up @@ -209,7 +209,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do
test "disable one prop", %{conn: conn, site: site, token: token} do
{:ok, ["author"]} = Plausible.Plugins.API.CustomProps.enable(site, "author")

url = Routes.custom_props_url(base_uri(), :enable)
url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)

payload = %{custom_prop: %{key: "author"}}

Expand All @@ -226,7 +226,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do
{:ok, [_, _, _]} =
Plausible.Plugins.API.CustomProps.enable(site, ["author", "category", "third"])

url = Routes.custom_props_url(base_uri(), :enable)
url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)

payload = %{
custom_props: [
Expand Down
Loading

0 comments on commit d3a50c2

Please sign in to comment.