c61c75163f
Closes #19 #86 #87 Signed-off-by: Thomas Citharel <tcit@tcit.fr>
77 lines
2.1 KiB
Elixir
77 lines
2.1 KiB
Elixir
defmodule MobilizonWeb.FeedController do
|
|
@moduledoc """
|
|
Controller to serve RSS, ATOM and iCal Feeds
|
|
"""
|
|
use MobilizonWeb, :controller
|
|
|
|
def actor(conn, %{"name" => name, "format" => "atom"}) do
|
|
with {status, data} when status in [:ok, :commit] <-
|
|
Cachex.fetch(:feed, "actor_" <> name) do
|
|
conn
|
|
|> put_resp_content_type("application/atom+xml")
|
|
|> send_resp(200, data)
|
|
else
|
|
_err ->
|
|
conn
|
|
|> put_resp_content_type("text/html")
|
|
|> send_file(404, "priv/static/index.html")
|
|
end
|
|
end
|
|
|
|
def actor(conn, %{"name" => name, "format" => "ics"}) do
|
|
with {status, data} when status in [:ok, :commit] <-
|
|
Cachex.fetch(:ics, "actor_" <> name) do
|
|
conn
|
|
|> put_resp_content_type("text/calendar")
|
|
|> send_resp(200, data)
|
|
else
|
|
_err ->
|
|
conn
|
|
|> put_resp_content_type("text/html")
|
|
|> send_file(404, "priv/static/index.html")
|
|
end
|
|
end
|
|
|
|
def event(conn, %{"uuid" => uuid, "format" => "ics"}) do
|
|
with {status, data} when status in [:ok, :commit] <-
|
|
Cachex.fetch(:ics, "event_" <> uuid) do
|
|
conn
|
|
|> put_resp_content_type("text/calendar")
|
|
|> send_resp(200, data)
|
|
else
|
|
_err ->
|
|
conn
|
|
|> put_resp_content_type("text/html")
|
|
|> send_file(404, "priv/static/index.html")
|
|
end
|
|
end
|
|
|
|
def going(conn, %{"token" => token, "format" => "ics"}) do
|
|
with {status, data} when status in [:ok, :commit] <-
|
|
Cachex.fetch(:ics, "token_" <> token) do
|
|
conn
|
|
|> put_resp_content_type("text/calendar")
|
|
|> send_resp(200, data)
|
|
else
|
|
_err ->
|
|
conn
|
|
|> put_resp_content_type("text/html")
|
|
|> send_file(404, "priv/static/index.html")
|
|
end
|
|
end
|
|
|
|
def going(conn, %{"token" => token, "format" => "atom"}) do
|
|
with {status, data} when status in [:ok, :commit] <-
|
|
Cachex.fetch(:feed, "token_" <> token) do
|
|
conn
|
|
|> put_resp_content_type("application/atom+xml")
|
|
|> send_resp(200, data)
|
|
else
|
|
_err ->
|
|
conn
|
|
|> put_resp_content_type("text/html")
|
|
|> send_file(404, "priv/static/index.html")
|
|
end
|
|
end
|
|
end
|