Packages
indieweb
0.0.65
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.56
0.0.55
0.0.54
0.0.53
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.3
0.0.2
0.0.1
Collection of common IndieWeb utilites like authorship resolution, Webmention, post type discovery and IndieAuth.
Current section
Files
Jump to
Current section
Files
lib/indieweb/microsub.ex
defmodule IndieWeb.Microsub do
@moduledoc false
@action_modules %{
"timeline" => IndieWeb.Microsub.Timeline,
"channels" => IndieWeb.Microsub.Channel,
"follow" => IndieWeb.Microsub.Follow,
# "unfollow" => IndieWeb.Microsub.Unfollow,
"mute" => IndieWeb.Microsub.Mute,
# "unmute" => IndieWeb.Microsub.Unmute,
"block" => IndieWeb.Microsub.Block,
"search" => IndieWeb.Microsub.Search
# "unblock" => IndieWeb.Microsub.Unblock,
}
@known_actions Map.keys(@action_modules)
require Logger
alias IndieWeb.LinkRel
defmodule Action do
@doc "Defines the default action to take."
@callback default_method() :: binary()
@doc "Handles the action with provided parameters."
@callback invoke(action :: binary(), params :: map()) ::
{:ok, keyword()} | {:error, keyword()}
end
def invoke(action, params)
def invoke({action, _method}, params) when action in @known_actions do
_cursor = %{
before: Map.get(params, "before"),
after: Map.get(params, "after")
}
case Map.get(@action_modules, action, :no_module) do
:no_module ->
{:error, reason: :action_not_supported}
specified_module ->
method =
Map.get(
params,
"method",
specified_module.default_method()
)
Logger.info("Invoking the module with parameters.",
action: action,
method: method,
module: specified_module
)
specified_module.invoke(method, Map.drop(params, ~w(action method)))
end
end
def invoke(action, _params) do
{:error, reason: :action_not_supported, action: action}
end
@doc "Fetches the Microsub endpoint for the provided site."
@spec endpoint_for(binary()) :: binary()
def endpoint_for(url) when is_binary(url) do
List.first(LinkRel.find(url, "microsub"))
end
def endpoint_for(_url), do: nil
end