diff options
author | lain <lain@soykaf.club> | 2019-12-10 13:44:06 +0000 |
---|---|---|
committer | lain <lain@soykaf.club> | 2019-12-10 13:44:06 +0000 |
commit | aac0187ec13078d2756db1671e644d6eb9c0947b (patch) | |
tree | 1e0b4fa5d7ca5d12ac2d41ee5a077f669f64fb43 /lib/pleroma/user.ex | |
parent | 54b1b2c9c0c24165b5b32c352fa684eed28bfa93 (diff) | |
parent | 1ae976ac51d5ad7c224fa4d1ddee0bbd007d6787 (diff) | |
download | pleroma-aac0187ec13078d2756db1671e644d6eb9c0947b.tar.gz |
Merge branch '1427-oauth-admin-scopes' into 'develop'
[#1427] OAuth admin scopes
Closes #1427
See merge request pleroma/pleroma!2025
Diffstat (limited to 'lib/pleroma/user.ex')
-rw-r--r-- | lib/pleroma/user.ex | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 694f1f110..6b556e8e1 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1839,13 +1839,28 @@ defmodule Pleroma.User do end def admin_api_update(user, params) do - user - |> cast(params, [ - :is_moderator, - :is_admin, - :show_role - ]) - |> update_and_set_cache() + changeset = + cast(user, params, [ + :is_moderator, + :is_admin, + :show_role + ]) + + with {:ok, updated_user} <- update_and_set_cache(changeset) do + if user.is_admin && !updated_user.is_admin do + # Tokens & authorizations containing any admin scopes must be revoked (revoking all). + # This is an extra safety measure (tokens' admin scopes won't be accepted for non-admins). + global_sign_out(user) + end + + {:ok, updated_user} + end + end + + @doc "Signs user out of all applications" + def global_sign_out(user) do + OAuth.Authorization.delete_user_authorizations(user) + OAuth.Token.delete_user_tokens(user) end def mascot_update(user, url) do |