fix: update Reference type to be lifetime parameterized in admin API functions

This commit is contained in:
ispik
2026-04-11 01:01:57 +03:00
parent 85ad261cc3
commit a152d825a2
22 changed files with 38 additions and 37 deletions

View File

@@ -134,7 +134,7 @@ impl<'a> JsonSchema for Reference<'a> {
} }
#[cfg(feature = "rocket-impl")] #[cfg(feature = "rocket-impl")]
impl<'r> FromFormField<'r> for Reference { impl<'r> FromFormField<'r> for Reference<'r> {
fn from_value(field: rocket::form::ValueField<'r>) -> rocket::form::Result<'r, Self> { fn from_value(field: rocket::form::ValueField<'r>) -> rocket::form::Result<'r, Self> {
Ok(Reference::from_unchecked(field.value.into())) Ok(Reference::from_unchecked(field.value.into()))
} }

View File

@@ -157,9 +157,4 @@ auto_derived!(
pub user: crate::v0::User, pub user: crate::v0::User,
pub member: Member, pub member: Member,
} }
pub struct MemberWithUserResponse {
pub user: crate::v0::User,
pub member: Member,
}
); );

View File

@@ -17,7 +17,7 @@ use crate::routes::admin::util::{
pub async fn admin_comment_edit( pub async fn admin_comment_edit(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
body: Json<v0::AdminCommentEdit>, body: Json<v0::AdminCommentEdit>,
) -> Result<EmptyResponse> { ) -> Result<EmptyResponse> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);

View File

@@ -13,7 +13,7 @@ use crate::routes::admin::util::{
pub async fn admin_comment_fetch_case( pub async fn admin_comment_fetch_case(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
) -> Result<Json<Vec<v0::AdminComment>>> { ) -> Result<Json<Vec<v0::AdminComment>>> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);
if !user_has_permission(user, v0::AdminUserPermissionFlags::Comments) { if !user_has_permission(user, v0::AdminUserPermissionFlags::Comments) {

View File

@@ -13,7 +13,7 @@ use crate::routes::admin::util::{
pub async fn admin_comment_fetch_object( pub async fn admin_comment_fetch_object(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
) -> Result<Json<Vec<v0::AdminComment>>> { ) -> Result<Json<Vec<v0::AdminComment>>> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);
if !user_has_permission(user, v0::AdminUserPermissionFlags::Comments) { if !user_has_permission(user, v0::AdminUserPermissionFlags::Comments) {

View File

@@ -12,7 +12,7 @@ use crate::routes::admin::util::{flatten_authorized_user, user_has_permission};
pub async fn admin_edit_user( pub async fn admin_edit_user(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
target: Reference, target: Reference<'_>,
body: Json<v0::AdminUserEdit>, body: Json<v0::AdminUserEdit>,
) -> Result<EmptyResponse> { ) -> Result<EmptyResponse> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);

View File

@@ -13,7 +13,7 @@ use crate::routes::admin::util::user_has_permission;
pub async fn admin_revoke_token( pub async fn admin_revoke_token(
db: &State<Database>, db: &State<Database>,
auth: AdminMachineToken, auth: AdminMachineToken,
token: Reference, token: Reference<'_>,
) -> Result<EmptyResponse> { ) -> Result<EmptyResponse> {
if !user_has_permission( if !user_has_permission(
&auth.on_behalf_of, &auth.on_behalf_of,

View File

@@ -15,9 +15,9 @@ use crate::routes::admin::util::{
pub async fn admin_server_add_member( pub async fn admin_server_add_member(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
user_id: Reference, user_id: Reference<'_>,
suppress_alerts: bool, suppress_alerts: bool,
) -> Result<Json<v0::MemberWithUserResponse>> { ) -> Result<Json<v0::MemberWithUserResponse>> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);

View File

@@ -19,9 +19,9 @@ use crate::routes::admin::util::{
pub async fn admin_server_ban_member( pub async fn admin_server_ban_member(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
user_id: Reference, user_id: Reference<'_>,
suppress_alerts: bool, suppress_alerts: bool,
body: Json<v0::DataBanCreate>, body: Json<v0::DataBanCreate>,
) -> Result<Json<v0::ServerBan>> { ) -> Result<Json<v0::ServerBan>> {

View File

@@ -16,9 +16,9 @@ use crate::routes::admin::util::{
pub async fn admin_server_change_owner( pub async fn admin_server_change_owner(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
user_id: Reference, user_id: Reference<'_>,
) -> Result<EmptyResponse> { ) -> Result<EmptyResponse> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);
if !user_has_permission(user, v0::AdminUserPermissionFlags::ManageServers) { if !user_has_permission(user, v0::AdminUserPermissionFlags::ManageServers) {

View File

@@ -15,8 +15,8 @@ use crate::routes::admin::util::{
pub async fn admin_server_create_invite( pub async fn admin_server_create_invite(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
channel_id: Reference, channel_id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
slug: Option<&str>, slug: Option<&str>,
) -> Result<Json<v0::Invite>> { ) -> Result<Json<v0::Invite>> {

View File

@@ -15,7 +15,7 @@ use crate::routes::admin::util::{
pub async fn admin_server_delete( pub async fn admin_server_delete(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
) -> Result<EmptyResponse> { ) -> Result<EmptyResponse> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);

View File

@@ -16,9 +16,9 @@ use crate::routes::admin::util::{
pub async fn admin_server_delete_invites( pub async fn admin_server_delete_invites(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
slug: Option<Reference>, slug: Option<Reference<'_>>,
) -> Result<EmptyResponse> { ) -> Result<EmptyResponse> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);
if !user_has_permission(user, v0::AdminUserPermissionFlags::ManageServers) { if !user_has_permission(user, v0::AdminUserPermissionFlags::ManageServers) {

View File

@@ -16,7 +16,7 @@ use crate::routes::admin::util::{
pub async fn admin_server_edit( pub async fn admin_server_edit(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
body: Json<v0::DataEditServer>, body: Json<v0::DataEditServer>,
) -> Result<Json<v0::Server>> { ) -> Result<Json<v0::Server>> {

View File

@@ -16,9 +16,9 @@ use crate::routes::admin::util::{
pub async fn admin_server_remove_members( pub async fn admin_server_remove_members(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
user_id: Vec<Reference>, user_id: Vec<Reference<'_>>,
suppress_alerts: bool, suppress_alerts: bool,
) -> Result<EmptyResponse> { ) -> Result<EmptyResponse> {
let admin_user = flatten_authorized_user(&auth); let admin_user = flatten_authorized_user(&auth);

View File

@@ -18,9 +18,9 @@ use crate::routes::admin::util::{
pub async fn admin_server_unban_member( pub async fn admin_server_unban_member(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
user_id: Reference, user_id: Reference<'_>,
suppress_alerts: bool, suppress_alerts: bool,
body: Json<v0::DataBanCreate>, body: Json<v0::DataBanCreate>,
) -> Result<EmptyResponse> { ) -> Result<EmptyResponse> {

View File

@@ -14,7 +14,7 @@ use crate::routes::admin::util::{
pub async fn admin_server_get( pub async fn admin_server_get(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
) -> Result<Json<v0::AdminServerResponse>> { ) -> Result<Json<v0::AdminServerResponse>> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);

View File

@@ -16,7 +16,7 @@ use crate::routes::admin::util::{
pub async fn admin_server_get_members( pub async fn admin_server_get_members(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
after: Option<usize>, after: Option<usize>,
) -> Result<Json<v0::AdminMemberWithUserAndOffsetResponse>> { ) -> Result<Json<v0::AdminMemberWithUserAndOffsetResponse>> {

View File

@@ -15,7 +15,7 @@ use crate::routes::admin::util::{
pub async fn admin_server_get_participants( pub async fn admin_server_get_participants(
db: &State<Database>, db: &State<Database>,
auth: AdminAuthorization, auth: AdminAuthorization,
id: Reference, id: Reference<'_>,
case: Option<&str>, case: Option<&str>,
) -> Result<Json<Vec<(v0::User, Option<v0::Member>)>>> { ) -> Result<Json<Vec<(v0::User, Option<v0::Member>)>>> {
let user = flatten_authorized_user(&auth); let user = flatten_authorized_user(&auth);

View File

@@ -96,7 +96,7 @@ mod test {
.await .await
.expect("Failed to create test server"); .expect("Failed to create test server");
let (member, channels) = Member::create(&harness.db, &server, &user, Some(channels)) let (member, channels) = Member::create(&harness.db, &server, &user, Some(channels), false)
.await .await
.expect("Failed to create member"); .expect("Failed to create member");
let channel = &channels[0]; let channel = &channels[0];

View File

@@ -238,7 +238,7 @@ mod test {
.await .await
.expect("Failed to update the channel permissions for special role"); .expect("Failed to update the channel permissions for special role");
Member::create(&harness.db, &server, &user, Some(channels.clone())) Member::create(&harness.db, &server, &user, Some(channels.clone()), false)
.await .await
.expect("Failed to create member"); .expect("Failed to create member");
let member = Reference::from_unchecked(&user.id) let member = Reference::from_unchecked(&user.id)
@@ -278,9 +278,15 @@ mod test {
"Mention failed to be scrubbed when the user is not part of the server" "Mention failed to be scrubbed when the user is not part of the server"
); );
Member::create(&harness.db, &server, &second_user, Some(channels.clone())) Member::create(
.await &harness.db,
.expect("Failed to create second member"); &server,
&second_user,
Some(channels.clone()),
false,
)
.await
.expect("Failed to create second member");
let mut second_member = Reference::from_unchecked(&second_user.id) let mut second_member = Reference::from_unchecked(&second_user.id)
.as_member(&harness.db, &server.id) .as_member(&harness.db, &server.id)
.await .await
@@ -544,7 +550,7 @@ mod test {
}), }),
) )
.await; .await;
let (mut other_member, _) = Member::create(&harness.db, &server, &other_user, None) let (mut other_member, _) = Member::create(&harness.db, &server, &other_user, None, false)
.await .await
.expect("Failed to add test member"); .expect("Failed to add test member");

View File

@@ -91,7 +91,7 @@ mod test {
let channel = &channels[0]; let channel = &channels[0];
Member::create(&harness.db, &server, &user, Some(channels.clone())) Member::create(&harness.db, &server, &user, Some(channels.clone()), false)
.await .await
.expect("Failed to create member"); .expect("Failed to create member");
let member = Reference::from_unchecked(&user.id) let member = Reference::from_unchecked(&user.id)