mirror of
https://github.com/stoatchat/stoatchat.git
synced 2026-08-30 23:07:27 +00:00
fix: send relationship info for bots (#935)
* fix: send relationship info for bots Signed-off-by: Zomatree <me@zomatree.live> * fix: dont allow bots to block users Signed-off-by: Zomatree <me@zomatree.live> * fix: always allow users to view bot's profile Signed-off-by: Zomatree <me@zomatree.live> --------- Signed-off-by: Zomatree <me@zomatree.live>
This commit is contained in:
@@ -1045,9 +1045,7 @@ impl crate::User {
|
||||
P: Into<Option<&'a crate::User>>,
|
||||
{
|
||||
let perspective = perspective.into();
|
||||
let (relationship, can_see_profile) = if self.bot.is_some() {
|
||||
(RelationshipStatus::None, true)
|
||||
} else if let Some(perspective) = perspective {
|
||||
let (relationship, can_see_profile) = if let Some(perspective) = perspective {
|
||||
let mut query = DatabasePermissionQuery::new(db, perspective).user(&self);
|
||||
|
||||
if perspective.id == self.id {
|
||||
@@ -1126,9 +1124,7 @@ impl crate::User {
|
||||
P: Into<Option<&'a crate::User>>,
|
||||
{
|
||||
let perspective = perspective.into();
|
||||
let (relationship, can_see_profile) = if self.bot.is_some() {
|
||||
(RelationshipStatus::None, true)
|
||||
} else if let Some(perspective) = perspective {
|
||||
let (relationship, can_see_profile) = if let Some(perspective) = perspective {
|
||||
if perspective.id == self.id {
|
||||
(RelationshipStatus::User, true)
|
||||
} else {
|
||||
|
||||
@@ -6,11 +6,7 @@ use crate::{
|
||||
|
||||
/// Calculate permissions against a user
|
||||
pub async fn calculate_user_permissions<P: PermissionQuery>(query: &mut P) -> PermissionValue {
|
||||
if query.are_we_privileged().await {
|
||||
return u64::MAX.into();
|
||||
}
|
||||
|
||||
if query.are_the_users_same().await {
|
||||
if query.are_we_privileged().await || query.are_the_users_same().await {
|
||||
return u64::MAX.into();
|
||||
}
|
||||
|
||||
@@ -26,17 +22,15 @@ pub async fn calculate_user_permissions<P: PermissionQuery>(query: &mut P) -> Pe
|
||||
_ => {}
|
||||
}
|
||||
|
||||
if query.have_mutual_connection().await {
|
||||
if query.have_mutual_connection().await || query.user_is_bot().await {
|
||||
permissions = UserPermission::Access as u64 + UserPermission::ViewProfile as u64;
|
||||
};
|
||||
|
||||
if query.user_is_bot().await || query.are_we_a_bot().await {
|
||||
permissions += UserPermission::SendMessage as u64;
|
||||
}
|
||||
if query.have_mutual_connection().await && (query.are_we_a_bot().await || query.user_is_bot().await) {
|
||||
permissions += UserPermission::SendMessage as u64;
|
||||
};
|
||||
|
||||
permissions.into()
|
||||
} else {
|
||||
permissions.into()
|
||||
}
|
||||
permissions.into()
|
||||
|
||||
// TODO: add boolean switch for permission for users to globally message a user
|
||||
// maybe an enum?
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use revolt_database::util::reference::Reference;
|
||||
use revolt_database::{Database, User};
|
||||
use revolt_models::v0;
|
||||
use revolt_result::Result;
|
||||
use revolt_result::{create_error, Result};
|
||||
use rocket::serde::json::Json;
|
||||
use rocket::State;
|
||||
|
||||
@@ -15,6 +15,10 @@ pub async fn block(
|
||||
mut user: User,
|
||||
target: Reference<'_>,
|
||||
) -> Result<Json<v0::User>> {
|
||||
if user.bot.is_some() {
|
||||
return Err(create_error!(IsBot));
|
||||
}
|
||||
|
||||
let mut target = target.as_user(db).await?;
|
||||
|
||||
user.block_user(db, &mut target).await?;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use revolt_database::util::reference::Reference;
|
||||
use revolt_database::{Database, User};
|
||||
use revolt_models::v0;
|
||||
use revolt_result::Result;
|
||||
use revolt_result::{create_error, Result};
|
||||
use rocket::serde::json::Json;
|
||||
use rocket::State;
|
||||
|
||||
@@ -15,6 +15,10 @@ pub async fn unblock(
|
||||
mut user: User,
|
||||
target: Reference<'_>,
|
||||
) -> Result<Json<v0::User>> {
|
||||
if user.bot.is_some() {
|
||||
return Err(create_error!(IsBot));
|
||||
}
|
||||
|
||||
let mut target = target.as_user(db).await?;
|
||||
|
||||
user.unblock_user(db, &mut target).await?;
|
||||
|
||||
Reference in New Issue
Block a user