+ def user_data_from_user_object(data) do
+ avatar =
+ data["icon"]["url"] &&
+ %{
+ "type" => "Image",
+ "url" => [%{"href" => data["icon"]["url"]}]
+ }
+
+ banner =
+ data["image"]["url"] &&
+ %{
+ "type" => "Image",
+ "url" => [%{"href" => data["image"]["url"]}]
+ }
+
+ user_data = %{
+ ap_id: data["id"],
+ info: %{
+ "ap_enabled" => true,
+ "source_data" => data,
+ "banner" => banner
+ },
+ avatar: avatar,
+ nickname: "#{data["preferredUsername"]}@#{URI.parse(data["id"]).host}",
+ name: data["name"],
+ follower_address: data["followers"],
+ bio: data["summary"]
+ }
+
+ {:ok, user_data}
+ end
+
+ def fetch_and_prepare_user_from_ap_id(ap_id) do
+ with {:ok, %{status_code: 200, body: body}} <-
+ @httpoison.get(ap_id, Accept: "application/activity+json"),
+ {:ok, data} <- Jason.decode(body) do
+ user_data_from_user_object(data)
+ else
+ e -> Logger.error("Could not decode user at fetch #{ap_id}, #{inspect(e)}")
+ end
+ end
+