mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge branch 'release_23.2' into release_24.0
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user