Merge branch 'release_23.2' into release_24.0

This commit is contained in:
mvdbeek
2024-05-09 13:08:39 +02:00
6 changed files with 34 additions and 18 deletions
+8 -2
View File
@@ -12303,9 +12303,11 @@ export interface components {
UserDeletionPayload: {
/**
* Purge user
* @description Purge the user
* @deprecated
* @description Purge the user. Deprecated, please use the `purge` query parameter instead.
* @default false
*/
purge: boolean;
purge?: boolean;
};
/** UserEmail */
UserEmail: {
@@ -22242,6 +22244,10 @@ export interface operations {
delete_user_api_users__user_id__delete: {
/** Delete a user. Only admins can delete others or purge users. */
parameters: {
/** @description Whether to definitely remove this user. Only deleted users can be purged. */
query?: {
purge?: boolean;
};
/** @description The user ID that will be used to effectively make this API call. Only admins and designated users can make API calls on behalf of other users. */
header?: {
"run-as"?: string | null;
+4 -3
View File
@@ -243,9 +243,10 @@ class UserManager(base.ModelManager, deletable.PurgableManagerMixin):
if self.app.config.redact_email_during_deletion:
role.name = role.name.replace(user.email, email_hash)
role.description = role.description.replace(user.email, email_hash)
private_role.name = email_hash
private_role.description = f"Private Role for {email_hash}"
self.session().add(private_role)
self.session().add(role)
private_role.name = email_hash
private_role.description = f"Private Role for {email_hash}"
self.session().add(private_role)
# Redact user's email and username
user.email = email_hash
user.username = uname_hash
+6 -1
View File
@@ -383,7 +383,12 @@ class RemoteUserCreationPayload(Model):
class UserDeletionPayload(Model):
purge: bool = Field(default=..., title="Purge user", description="Purge the user")
purge: bool = Field(
default=False,
title="Purge user",
description="Purge the user. Deprecated, please use the `purge` query parameter instead.",
deprecated=True,
)
class FavoriteObject(Model):
+2 -2
View File
@@ -938,10 +938,10 @@ class GalaxyInteractorApi:
kwd["timeout"] = kwd.pop("timeout", util.DEFAULT_SOCKET_TIMEOUT)
return requests.post(url, **kwd)
def _delete(self, path, data=None, key=None, headers=None, admin=False, anon=False, json=False):
def _delete(self, path, data=None, key=None, headers=None, admin=False, anon=False, json=False, params=None):
headers = self.api_key_header(key=key, admin=admin, anon=anon, headers=headers)
url = self.get_api_url(path)
kwd = self._prepare_request_params(data=data, as_json=json, headers=headers)
kwd = self._prepare_request_params(data=data, as_json=json, params=params, headers=headers)
kwd["timeout"] = kwd.pop("timeout", util.DEFAULT_SOCKET_TIMEOUT)
return requests.delete(url, **kwd)
+10 -6
View File
@@ -22,6 +22,7 @@ from fastapi import (
status,
)
from markupsafe import escape
from typing_extensions import Annotated
from galaxy import (
exceptions,
@@ -133,7 +134,6 @@ RecalculateDiskUsageResponseDescriptions = {
},
}
UserDeletionBody = Body(default=None, title="Purge user", description="Purge the user.")
UserUpdateBody = Body(default=..., title="Update user", description="The user values to update.")
FavoriteObjectBody = Body(
default=..., title="Set favorite", description="The id of an object the user wants to favorite."
@@ -676,13 +676,17 @@ class FastAPIUsers:
self,
user_id: UserIdPathParam,
trans: ProvidesUserContext = DependsOnTrans,
payload: Optional[UserDeletionPayload] = UserDeletionBody,
purge: Annotated[
bool,
Query(
title="Purge user",
description="Whether to definitely remove this user. Only deleted users can be purged.",
),
] = False,
payload: Optional[UserDeletionPayload] = None,
) -> DetailedUserModel:
user_to_update = self.service.user_manager.by_id(user_id)
if payload:
purge = payload.purge
else:
purge = False
purge = payload and payload.purge or purge
if trans.user_is_admin:
if purge:
log.debug("Purging user %s", user_to_update)
+4 -4
View File
@@ -113,11 +113,11 @@ class TestUsersApi(ApiTestCase):
user = self._setup_user(TEST_USER_EMAIL_PURGE)
response = self._delete(f"users/{user['id']}", admin=True)
self._assert_status_code_is_ok(response)
data = dict(purge="True")
response = self._delete(f"users/{user['id']}", data=data, admin=True, json=True)
params = dict(purge="True")
response = self._delete(f"users/{user['id']}", params=params, admin=True, json=True)
self._assert_status_code_is_ok(response)
payload = {"deleted": "True"}
purged_user = self._get(f"users/{user['id']}", payload, admin=True).json()
params = {"deleted": "True"}
purged_user = self._get(f"users/{user['id']}", params, admin=True).json()
assert purged_user["deleted"] is True, purged_user
assert purged_user["purged"] is True, purged_user