Skip to content

Commit b709dfb

Browse files
committed
chg: [sources] user can subscribe and unsubscribe themselves..
1 parent f1c904a commit b709dfb

File tree

6 files changed

+58
-12
lines changed

6 files changed

+58
-12
lines changed

lib/cocktailparty/catalog.ex

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -562,16 +562,6 @@ defmodule Cocktailparty.Catalog do
562562
Repo.one(query)
563563
end
564564

565-
# Check whether a used is authorized to :show a source
566-
def authorized_show?(source_id, user_id) do
567-
Logger.info("Checking authorization for UserID: #{user_id} @ FeedId: #{source_id}.")
568-
569-
(UserManagement.is_confirmed?(user_id) && is_subscribed?(source_id, user_id)) ||
570-
(UserManagement.is_confirmed?(user_id) && UserManagement.can?(user_id, :access_all_sources) &&
571-
UserManagement.can?(user_id, :list_all_sources)) ||
572-
(UserManagement.is_confirmed?(user_id) && is_public?(source_id))
573-
end
574-
575565
defp notify_broker(%Source{} = source, msg) do
576566
GenServer.cast(get_broker(source), msg)
577567
end

lib/cocktailparty_web/access_control.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ defmodule CocktailpartyWeb.AccessControl do
2929
source_id = conn.params["id"]
3030

3131
(UserManagement.is_confirmed?(user_id) && Catalog.is_subscribed?(source_id, user_id)) ||
32-
(UserManagement.is_confirmed?(user_id) && UserManagement.can?(user_id, :access_all_sources)) ||
32+
(UserManagement.is_confirmed?(user_id) && (UserManagement.can?(user_id, :access_all_sources) || UserManagement.can?(user_id, :list_all_sources))) ||
3333
(UserManagement.is_confirmed?(user_id) && Catalog.is_public?(source_id))
3434
end
3535

lib/cocktailparty_web/controllers/sink_controller.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ defmodule CocktailpartyWeb.SinkController do
1818
changeset = SinkCatalog.change_sink(%Sink{})
1919
# get a receiving redis instance
2020
instance = Input.get_one_sink_redisinstance()
21+
2122
case instance do
2223
nil ->
23-
2424
conn
2525
|> put_flash(:error, "A receiving redis instance is required to create a sink.")
2626
|> redirect(to: ~p"/")

lib/cocktailparty_web/controllers/source_controller.ex

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,46 @@ defmodule CocktailpartyWeb.SourceController do
2424
def show(conn, %{"id" => id}) do
2525
source = Catalog.get_source!(id)
2626
sample = Catalog.get_sample(id)
27+
28+
source =
29+
source
30+
|> Map.put(:subscribed, Catalog.is_subscribed?(source.id, conn.assigns.current_user.id))
31+
2732
render(conn, :show, source: source, sample: sample)
2833
end
34+
35+
def subscribe(conn, %{"source_id" => source_id}) do
36+
Logger.debug("User #{conn.assigns.current_user.id} subscribing to source #{source_id}")
37+
38+
case Catalog.subscribe(source_id, conn.assigns.current_user.id) do
39+
{:ok, _source} ->
40+
conn
41+
|> put_flash(:info, "Subscribed to source #{source_id}")
42+
|> redirect(to: ~p"/sources/#{source_id}")
43+
44+
{:error, changeset} ->
45+
conn
46+
|> put_flash(:error, changeset)
47+
|> redirect(to: ~p"/sources/#{source_id}")
48+
end
49+
end
50+
51+
def unsubscribe(conn, %{"source_id" => source_id}) do
52+
Logger.debug("User #{conn.assigns.current_user.id} unsubscribing from source #{source_id}")
53+
54+
case Catalog.unsubscribe(
55+
String.to_integer(source_id),
56+
conn.assigns.current_user.id
57+
) do
58+
{1, _deleted} ->
59+
conn
60+
|> put_flash(:info, "Unsubscribed from source #{source_id} ")
61+
|> redirect(to: ~p"/sources/#{source_id}")
62+
63+
{0, _deleted} ->
64+
conn
65+
|> put_flash(:error, "Unsubscribing from #{source_id} failed.")
66+
|> redirect(to: ~p"/sources/#{source_id}")
67+
end
68+
end
2969
end

lib/cocktailparty_web/controllers/source_html/show.html.heex

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,20 @@
55
<.link :if={@is_admin} href={~p"/admin/sources/#{@source}/edit"}>
66
<.button>Edit source</.button>
77
</.link>
8+
<.link
9+
:if={!@is_admin && !@source.subscribed}
10+
href={~p"/sources/subscribe/#{@source}"}
11+
method="post"
12+
>
13+
<.button>Subscribe</.button>
14+
</.link>
15+
<.link
16+
:if={!@is_admin && @source.subscribed}
17+
href={~p"/sources/unsubscribe/#{@source}"}
18+
method="delete"
19+
>
20+
<.button>Unsubscribe</.button>
21+
</.link>
822
</:actions>
923
</.header>
1024

lib/cocktailparty_web/router.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ defmodule CocktailpartyWeb.Router do
4444
get "/", PageController, :home
4545
get "/sources", SourceController, :index
4646
get "/sources/:id", SourceController, :show
47+
post "/sources/subscribe/:source_id", SourceController, :subscribe
48+
delete "/sources/unsubscribe/:source_id", SourceController, :unsubscribe
4749
resources "/sinks", SinkController
4850
end
4951

0 commit comments

Comments
 (0)