From d5b29b20bbc33db8fc1d00ba943cff55ccb2eee4 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Mon, 5 May 2025 20:58:37 +0100 Subject: [PATCH] Store last fm information into session (doesn't work yet) --- lib/last_fm/api.ex | 8 +++++++- .../controllers/last_fm_controller.ex | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/last_fm/api.ex b/lib/last_fm/api.ex index 081e19b1..c6025709 100644 --- a/lib/last_fm/api.ex +++ b/lib/last_fm/api.ex @@ -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} -> diff --git a/lib/music_library_web/controllers/last_fm_controller.ex b/lib/music_library_web/controllers/last_fm_controller.ex index 3c59aa5f..35eeaef6 100644 --- a/lib/music_library_web/controllers/last_fm_controller.ex +++ b/lib/music_library_web/controllers/last_fm_controller.ex @@ -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