Store last fm information into session (doesn't work yet)
This commit is contained in:
+7
-1
@@ -1,7 +1,7 @@
|
|||||||
defmodule LastFm.API do
|
defmodule LastFm.API do
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
alias LastFm.{Artist, Track}
|
alias LastFm.{Artist, Session, Track}
|
||||||
|
|
||||||
defmodule ErrorResponse do
|
defmodule ErrorResponse do
|
||||||
defstruct [:error, :message]
|
defstruct [:error, :message]
|
||||||
@@ -71,6 +71,7 @@ defmodule LastFm.API do
|
|||||||
|> new_request()
|
|> new_request()
|
||||||
|> Req.merge(url: "/", params: params)
|
|> Req.merge(url: "/", params: params)
|
||||||
|> Req.Request.append_response_steps(parse_error: &parse_error/1)
|
|> Req.Request.append_response_steps(parse_error: &parse_error/1)
|
||||||
|
|> Req.Request.append_response_steps(parse_session: &parse_session/1)
|
||||||
|> get_request()
|
|> get_request()
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -181,6 +182,11 @@ defmodule LastFm.API do
|
|||||||
request
|
request
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp parse_session({request, response}) do
|
||||||
|
session = Session.parse(response.body)
|
||||||
|
{request, Map.put(response, :body, session)}
|
||||||
|
end
|
||||||
|
|
||||||
defp parse_error({request, response}) do
|
defp parse_error({request, response}) do
|
||||||
case response.body do
|
case response.body do
|
||||||
%{"error" => error_number, "message" => message} ->
|
%{"error" => error_number, "message" => message} ->
|
||||||
|
|||||||
@@ -1,7 +1,19 @@
|
|||||||
defmodule MusicLibraryWeb.LastFmController do
|
defmodule MusicLibraryWeb.LastFmController do
|
||||||
use MusicLibraryWeb, :controller
|
use MusicLibraryWeb, :controller
|
||||||
|
|
||||||
def callback(conn, %{"token" => _token}) do
|
def callback(conn, %{"token" => token}) do
|
||||||
conn |> redirect(to: ~p"/")
|
case LastFm.get_session(token) do
|
||||||
|
{:ok, session} ->
|
||||||
|
conn
|
||||||
|
|> put_session(:last_fm_user, session.name)
|
||||||
|
|> put_session(:last_fm_key, session.key)
|
||||||
|
|> put_flash(:info, "Successfully authenticated with Last.fm.")
|
||||||
|
|> redirect(to: ~p"/")
|
||||||
|
|
||||||
|
{:error, reason} ->
|
||||||
|
conn
|
||||||
|
|> put_flash(:error, "Failed to authenticate with Last.fm: #{reason}")
|
||||||
|
|> redirect(to: ~p"/")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user