@@ -8,6 +8,7 @@ defmodule PlausibleWeb.Api.ExternalSitesController do
88 alias Plausible.Sites
99 alias Plausible.Goal
1010 alias Plausible.Goals
11+ alias Plausible.Props
1112 alias Plausible.Teams
1213 alias PlausibleWeb.Api.Helpers , as: H
1314
@@ -445,6 +446,68 @@ defmodule PlausibleWeb.Api.ExternalSitesController do
445446 end
446447 end
447448
449+ def custom_props_index ( conn , params ) do
450+ user = conn . assigns . current_user
451+ team = conn . assigns . current_team
452+
453+ with { :ok , site_id } <- expect_param_key ( params , "site_id" ) ,
454+ { :ok , site } <- find_site ( user , team , site_id , [ :owner , :admin , :editor ] ) do
455+ properties =
456+ ( site . allowed_event_props || [ ] )
457+ |> Enum . map ( fn prop -> % { property: prop } end )
458+
459+ json ( conn , % { custom_properties: properties } )
460+ else
461+ { :error , :site_not_found } ->
462+ H . not_found ( conn , "Site could not be found" )
463+
464+ { :missing , "site_id" } ->
465+ H . bad_request ( conn , "Parameter `site_id` is required to list custom properties" )
466+ end
467+ end
468+
469+ def add_custom_prop ( conn , params ) do
470+ user = conn . assigns . current_user
471+ team = conn . assigns . current_team
472+
473+ with { :ok , site_id } <- expect_param_key ( params , "site_id" ) ,
474+ { :ok , property } <- expect_param_key ( params , "property" ) ,
475+ { :ok , site } <- find_site ( user , team , site_id , [ :owner , :admin , :editor ] ) ,
476+ { :ok , _ } <- Props . allow ( site , property ) do
477+ json ( conn , % { "created" => true } )
478+ else
479+ { :error , :site_not_found } ->
480+ H . not_found ( conn , "Site could not be found" )
481+
482+ { :missing , param } ->
483+ H . bad_request ( conn , "Parameter `#{ param } ` is required to create a custom property" )
484+
485+ e ->
486+ H . bad_request ( conn , "Something went wrong: #{ inspect ( e ) } " )
487+ end
488+ end
489+
490+ def delete_custom_prop ( conn , params ) do
491+ user = conn . assigns . current_user
492+ team = conn . assigns . current_team
493+
494+ with { :ok , site_id } <- expect_param_key ( params , "site_id" ) ,
495+ { :ok , property } <- expect_param_key ( params , "property" ) ,
496+ { :ok , site } <- find_site ( user , team , site_id , [ :owner , :admin , :editor ] ) ,
497+ { :ok , _ } <- Props . disallow ( site , property ) do
498+ json ( conn , % { "deleted" => true } )
499+ else
500+ { :error , :site_not_found } ->
501+ H . not_found ( conn , "Site could not be found" )
502+
503+ { :missing , param } ->
504+ H . bad_request ( conn , "Parameter `#{ param } ` is required to delete a custom property" )
505+
506+ e ->
507+ H . bad_request ( conn , "Something went wrong: #{ inspect ( e ) } " )
508+ end
509+ end
510+
448511 defp pagination_meta ( meta ) do
449512 % {
450513 after: meta . after ,
0 commit comments