diff options
Diffstat (limited to 'lib/pleroma/web/oauth/scopes.ex')
| -rw-r--r-- | lib/pleroma/web/oauth/scopes.ex | 22 | 
1 files changed, 15 insertions, 7 deletions
| diff --git a/lib/pleroma/web/oauth/scopes.ex b/lib/pleroma/web/oauth/scopes.ex index ad9dfb260..151467494 100644 --- a/lib/pleroma/web/oauth/scopes.ex +++ b/lib/pleroma/web/oauth/scopes.ex @@ -7,8 +7,10 @@ defmodule Pleroma.Web.OAuth.Scopes do    Functions for dealing with scopes.    """ +  alias Pleroma.Plugs.OAuthScopesPlug +    @doc """ -  Fetch scopes from requiest params. +  Fetch scopes from request params.    Note: `scopes` is used by Mastodon — supporting it but sticking to    OAuth's standard `scope` wherever we control it @@ -53,15 +55,21 @@ defmodule Pleroma.Web.OAuth.Scopes do    @doc """    Validates scopes.    """ -  @spec validates(list() | nil, list()) :: +  @spec validate(list() | nil, list()) ::            {:ok, list()} | {:error, :missing_scopes | :unsupported_scopes} -  def validates([], _app_scopes), do: {:error, :missing_scopes} -  def validates(nil, _app_scopes), do: {:error, :missing_scopes} +  def validate(blank_scopes, _app_scopes) when blank_scopes in [nil, []], +    do: {:error, :missing_scopes} -  def validates(scopes, app_scopes) do -    case scopes -- app_scopes do -      [] -> {:ok, scopes} +  def validate(scopes, app_scopes) do +    case OAuthScopesPlug.filter_descendants(scopes, app_scopes) do +      ^scopes -> {:ok, scopes}        _ -> {:error, :unsupported_scopes}      end    end + +  def contains_admin_scopes?(scopes) do +    scopes +    |> OAuthScopesPlug.filter_descendants(["admin"]) +    |> Enum.any?() +  end  end | 
