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
|
||||
require Logger
|
||||
|
||||
alias LastFm.{Artist, Track}
|
||||
alias LastFm.{Artist, Session, Track}
|
||||
|
||||
defmodule ErrorResponse do
|
||||
defstruct [:error, :message]
|
||||
@@ -71,6 +71,7 @@ defmodule LastFm.API do
|
||||
|> new_request()
|
||||
|> Req.merge(url: "/", params: params)
|
||||
|> Req.Request.append_response_steps(parse_error: &parse_error/1)
|
||||
|> Req.Request.append_response_steps(parse_session: &parse_session/1)
|
||||
|> get_request()
|
||||
end
|
||||
|
||||
@@ -181,6 +182,11 @@ defmodule LastFm.API do
|
||||
request
|
||||
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
|
||||
case response.body do
|
||||
%{"error" => error_number, "message" => message} ->
|
||||
|
||||
@@ -1,7 +1,19 @@
|
||||
defmodule MusicLibraryWeb.LastFmController do
|
||||
use MusicLibraryWeb, :controller
|
||||
|
||||
def callback(conn, %{"token" => _token}) do
|
||||
conn |> redirect(to: ~p"/")
|
||||
def callback(conn, %{"token" => token}) do
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user