Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel 2020-05-11 09:12:13 +02:00
parent aea63436f7
commit 14f24b1839
No known key found for this signature in database
GPG Key ID: A061B9DDE0CA0773
5 changed files with 23 additions and 22 deletions

View File

@ -5,12 +5,12 @@ defmodule Mobilizon.GraphQL.Resolvers.Resource do
alias Mobilizon.{Actors, Resources, Users} alias Mobilizon.{Actors, Resources, Users}
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
alias Mobilizon.Federation.ActivityPub
alias Mobilizon.Resources.Resource alias Mobilizon.Resources.Resource
alias Mobilizon.Resources.Resource.Metadata alias Mobilizon.Resources.Resource.Metadata
alias Mobilizon.Service.RichMedia.Parser
alias Mobilizon.Storage.Page alias Mobilizon.Storage.Page
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias Mobilizon.Federation.ActivityPub
alias Mobilizon.Service.RichMedia.Parser
require Logger require Logger

View File

@ -139,7 +139,7 @@ defmodule Mobilizon.Config do
:enabled :enabled
] ]
def instance_resource_providers() do def instance_resource_providers do
types = get_in(Application.get_env(:mobilizon, Mobilizon.Service.ResourceProviders), [:types]) types = get_in(Application.get_env(:mobilizon, Mobilizon.Service.ResourceProviders), [:types])
providers = providers =

View File

@ -2,11 +2,12 @@ defmodule Mobilizon.Resources do
@moduledoc """ @moduledoc """
The Resources context. The Resources context.
""" """
alias Ecto.Adapters.SQL
alias Ecto.Multi
alias Mobilizon.Actors alias Mobilizon.Actors
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
alias Mobilizon.Resources.Resource alias Mobilizon.Resources.Resource
alias Mobilizon.Storage.{Page, Repo} alias Mobilizon.Storage.{Page, Repo}
alias Ecto.Multi
import Ecto.Query import Ecto.Query
require Logger require Logger
@ -172,7 +173,7 @@ defmodule Mobilizon.Resources do
["#{path}/#{title}/", actor_id, old_parent_id]} ["#{path}/#{title}/", actor_id, old_parent_id]}
end end
Ecto.Adapters.SQL.query!( SQL.query!(
repo, repo,
query, query,
params params

View File

@ -16,6 +16,7 @@ defmodule Mobilizon.Service.RichMedia.Parser do
alias Mobilizon.Config alias Mobilizon.Config
alias Mobilizon.Service.RichMedia.Favicon alias Mobilizon.Service.RichMedia.Favicon
alias Plug.Conn.Utils
require Logger require Logger
defp parsers do defp parsers do
@ -26,23 +27,21 @@ defmodule Mobilizon.Service.RichMedia.Parser do
@spec parse(String.t()) :: {:ok, map()} | {:error, any()} @spec parse(String.t()) :: {:ok, map()} | {:error, any()}
def parse(url) do def parse(url) do
try do case Cachex.fetch(:rich_media_cache, url, fn _ ->
case Cachex.fetch(:rich_media_cache, url, fn _ -> case parse_url(url) do
case parse_url(url) do {:ok, data} -> {:commit, data}
{:ok, data} -> {:commit, data} {:error, err} -> {:ignore, err}
{:error, err} -> {:ignore, err} end
end end) do
end) do {status, value} when status in [:ok, :commit] ->
{status, value} when status in [:ok, :commit] -> {:ok, value}
{:ok, value}
{_, err} -> {_, err} ->
{:error, err} {:error, err}
end
rescue
e ->
{:error, "Cachex error: #{inspect(e)}"}
end end
rescue
e ->
{:error, "Cachex error: #{inspect(e)}"}
end end
@spec parse_url(String.t(), List.t()) :: {:ok, map()} | {:error, any()} @spec parse_url(String.t(), List.t()) :: {:ok, map()} | {:error, any()}
@ -154,7 +153,7 @@ defmodule Mobilizon.Service.RichMedia.Parser do
@spec parse_content_disposition(String.t()) :: String.t() | nil @spec parse_content_disposition(String.t()) :: String.t() | nil
defp parse_content_disposition(disposition) do defp parse_content_disposition(disposition) do
with [_, params] <- :binary.split(disposition, ";"), with [_, params] <- :binary.split(disposition, ";"),
%{"name" => _name} = params <- Plug.Conn.Utils.params(params) do %{"name" => _name} = params <- Utils.params(params) do
handle_disposition(params) handle_disposition(params)
else else
_ -> nil _ -> nil

View File

@ -8,12 +8,13 @@ defmodule Mobilizon.Service.RichMedia.Parsers.OGP do
Module to parse OpenGraph data in HTML pages Module to parse OpenGraph data in HTML pages
""" """
require Logger require Logger
alias Mobilizon.Service.RichMedia.Parsers.MetaTagsParser
def parse(html, data) do def parse(html, data) do
Logger.debug("Using OpenGraph card parser") Logger.debug("Using OpenGraph card parser")
with {:ok, data} <- with {:ok, data} <-
Mobilizon.Service.RichMedia.Parsers.MetaTagsParser.parse( MetaTagsParser.parse(
html, html,
data, data,
"og", "og",