live_beats/lib/live_beats_web/controllers/file_controller.ex

22 lines
726 B
Elixir
Raw Normal View History

2021-11-06 03:02:31 +00:00
defmodule LiveBeatsWeb.FileController do
use LiveBeatsWeb, :controller
alias LiveBeats.MediaLibrary
def show(conn, %{"id" => filename_uuid, "token" => token}) do
case Phoenix.Token.verify(conn, "file", token, max_age: :timer.minutes(10)) do
2021-11-12 03:42:10 +00:00
{:ok, ^filename_uuid} -> do_send_file(conn, MediaLibrary.local_filepath(filename_uuid))
2021-11-06 03:02:31 +00:00
{:ok, _} -> send_resp(conn, :unauthorized, "")
{:error, _} -> send_resp(conn, :unauthorized, "")
2021-11-12 03:42:10 +00:00
end
end
defp do_send_file(conn, path) do
# accept-ranges headers required for chrome to seek via currentTime
conn
|> put_resp_header("content-type", "audio/mp3")
|> put_resp_header("accept-ranges", "bytes")
|> send_file(200, path)
2021-11-06 03:02:31 +00:00
end
end