Packages
indieweb
0.0.50
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/auth/scope.ex
defmodule IndieWeb.Auth.Scope do
@moduledoc """
Handles scope information and referencing for the IndieAuth flow.
"""
@separator " "
defmodule Adapter do
@moduledoc "Provides an abstraction regarding code actions for IndieAuth."
@callback get(code :: binary(), options :: keyword()) :: binary() | nil
@callback persist(code :: binary(), scope :: binary(), options :: keyword()) :: :ok | {:error, any()}
end
@spec persist!(binary(), binary(), keyword()) :: :ok
def persist!(code, scope, options \\ [])
def persist!(code, "", options) do
persist!(code, "read", options)
end
def persist!(code, scope, options) when is_list(scope) do
persist!(code, __MODULE__.to_string(scope), options)
end
def persist!(code, scope, options) do
adapter(options).persist(code, scope, options)
end
@spec get(binary(), keyword()) :: binary() | nil
def get(code, options \\ []) do
case adapter(options).get(code, options) do
scope when is_binary(scope) -> scope |> from_string
_ -> nil
end
end
@spec from_string(binary) :: [binary]
def from_string(scope_string) when is_binary(scope_string) do
String.split(scope_string, @separator, trim: true)
end
@spec to_string([binary]) :: binary
def to_string(scopes) when is_list(scopes) do
Enum.join(scopes, @separator)
end
@spec can_upload?([binary]) :: boolean
def can_upload?(scope) when is_list(scope) do
Enum.member?(scope, "media")
end
defp adapter(options) do
options
|> Keyword.get(:adapters, [])
|> Keyword.get(:scope, IndieWeb.Auth.DefaultScopeAdapter)
end
end