X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fo_auth%2Fscopes.ex;h=d5e7c29d678666e017f479244271b8a9501eb293;hb=233c4bb3bae19b0a45501bf73b68278e3a134eba;hp=7fe04b9127fd9905bb01b5738a58b33c57ed643f;hpb=b8be8192fbfe8c27b457094e8d64ccb1c3a29f7f;p=akkoma diff --git a/lib/pleroma/web/o_auth/scopes.ex b/lib/pleroma/web/o_auth/scopes.ex index 7fe04b912..d5e7c29d6 100644 --- a/lib/pleroma/web/o_auth/scopes.ex +++ b/lib/pleroma/web/o_auth/scopes.ex @@ -62,11 +62,18 @@ defmodule Pleroma.Web.OAuth.Scopes do do: {:error, :missing_scopes} def validate(scopes, app_scopes, %Pleroma.User{is_admin: is_admin}) do - if !is_admin && contains_admin_scopes?(scopes) do - {:error, :user_is_not_an_admin} - else - validate_scopes_are_supported(scopes, app_scopes) - end + validate_scopes_are_supported(scopes, app_scopes) + end + + @spec filter_admin_scopes([String.t()], Pleroma.User.t()) :: [String.t()] + @doc """ + Remove admin scopes for non-admins + """ + def filter_admin_scopes(scopes, %Pleroma.User{is_admin: true}), do: scopes + + def filter_admin_scopes(scopes, _user) do + drop_scopes = OAuthScopesPlug.filter_descendants(scopes, ["admin"]) + Enum.reject(scopes, fn scope -> Enum.member?(drop_scopes, scope) end) end defp validate_scopes_are_supported(scopes, app_scopes) do