Don't allow banned users to view or use invites.
This commit is contained in:
@@ -94,15 +94,33 @@ pub fn get_member(guild_id: &String, member: &String) -> Option<Member> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_invite(code: &String) -> Option<(String, String, Invite)> {
|
pub fn get_invite<U: Into<Option<String>>>(
|
||||||
if let Ok(result) = database::get_collection("guilds").find_one(
|
code: &String,
|
||||||
doc! {
|
user: U,
|
||||||
"invites": {
|
) -> Option<(String, String, Invite)> {
|
||||||
"$elemMatch": {
|
let mut doc = doc! {
|
||||||
"code": &code
|
"invites": {
|
||||||
}
|
"$elemMatch": {
|
||||||
|
"code": &code
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Some(user_id) = user.into() {
|
||||||
|
doc.insert(
|
||||||
|
"bans",
|
||||||
|
doc! {
|
||||||
|
"$not": {
|
||||||
|
"$elemMatch": {
|
||||||
|
"id": user_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Ok(result) = database::get_collection("guilds").find_one(
|
||||||
|
doc,
|
||||||
FindOneOptions::builder()
|
FindOneOptions::builder()
|
||||||
.projection(doc! {
|
.projection(doc! {
|
||||||
"_id": 1,
|
"_id": 1,
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ pub fn create_invite(
|
|||||||
pub fn remove_invite(user: UserRef, target: GuildRef, code: String) -> Option<Response> {
|
pub fn remove_invite(user: UserRef, target: GuildRef, code: String) -> Option<Response> {
|
||||||
let (permissions, _) = with_permissions!(user, target);
|
let (permissions, _) = with_permissions!(user, target);
|
||||||
|
|
||||||
if let Some((guild_id, _, invite)) = get_invite(&code) {
|
if let Some((guild_id, _, invite)) = get_invite(&code, None) {
|
||||||
if invite.creator != user.id {
|
if invite.creator != user.id {
|
||||||
if !permissions.get_manage_server() {
|
if !permissions.get_manage_server() {
|
||||||
return Some(Response::LackingPermission(Permission::ManageServer));
|
return Some(Response::LackingPermission(Permission::ManageServer));
|
||||||
@@ -303,8 +303,8 @@ pub fn fetch_invites(user: UserRef, target: GuildRef) -> Option<Response> {
|
|||||||
|
|
||||||
/// view an invite before joining
|
/// view an invite before joining
|
||||||
#[get("/join/<code>", rank = 1)]
|
#[get("/join/<code>", rank = 1)]
|
||||||
pub fn fetch_invite(_user: UserRef, code: String) -> Response {
|
pub fn fetch_invite(user: UserRef, code: String) -> Response {
|
||||||
if let Some((guild_id, name, invite)) = get_invite(&code) {
|
if let Some((guild_id, name, invite)) = get_invite(&code, user.id) {
|
||||||
if let Some(channel) = ChannelRef::from(invite.channel) {
|
if let Some(channel) = ChannelRef::from(invite.channel) {
|
||||||
Response::Success(json!({
|
Response::Success(json!({
|
||||||
"guild": {
|
"guild": {
|
||||||
@@ -327,7 +327,7 @@ pub fn fetch_invite(_user: UserRef, code: String) -> Response {
|
|||||||
/// join a guild using an invite
|
/// join a guild using an invite
|
||||||
#[post("/join/<code>", rank = 1)]
|
#[post("/join/<code>", rank = 1)]
|
||||||
pub fn use_invite(user: UserRef, code: String) -> Response {
|
pub fn use_invite(user: UserRef, code: String) -> Response {
|
||||||
if let Some((guild_id, _, invite)) = get_invite(&code) {
|
if let Some((guild_id, _, invite)) = get_invite(&code, Some(user.id.clone())) {
|
||||||
if let Ok(result) = database::get_collection("members").find_one(
|
if let Ok(result) = database::get_collection("members").find_one(
|
||||||
doc! {
|
doc! {
|
||||||
"_id.guild": &guild_id,
|
"_id.guild": &guild_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user