summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-09-29 02:38:35 +0200
committerRory& <root@rory.gay>2025-09-29 18:38:06 +0200
commitba612ab2ba50250bb62a3c9ee13e686e62d3cbee (patch)
tree084d2f5951baff477df5f31a5cf1ed4ee42af21b /src
parentAdd fetching guild profiles (diff)
downloadserver-ts-ba612ab2ba50250bb62a3c9ee13e686e62d3cbee.tar.xz
Delete expired invites
Diffstat (limited to 'src')
-rw-r--r--src/api/routes/guilds/#guild_id/invites.ts6
-rw-r--r--src/util/entities/Invite.ts13
2 files changed, 17 insertions, 2 deletions
diff --git a/src/api/routes/guilds/#guild_id/invites.ts b/src/api/routes/guilds/#guild_id/invites.ts

index a0ffa3f4..f190b021 100644 --- a/src/api/routes/guilds/#guild_id/invites.ts +++ b/src/api/routes/guilds/#guild_id/invites.ts
@@ -40,6 +40,12 @@ router.get( relations: PublicInviteRelation, }); + await invites + .filter((i) => i.isExpired()) + .forEachAsync(async (i) => { + await Invite.delete({ code: i.code }); + }); + return res.json(invites); }, ); diff --git a/src/util/entities/Invite.ts b/src/util/entities/Invite.ts
index 4bf43b94..9dbdd04f 100644 --- a/src/util/entities/Invite.ts +++ b/src/util/entities/Invite.ts
@@ -16,7 +16,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ -import { Column, Entity, JoinColumn, ManyToOne, RelationId } from "typeorm"; +import { AfterLoad, Column, Entity, JoinColumn, ManyToOne, RelationId } from "typeorm"; import { BaseClassWithoutId, PrimaryIdColumn } from "./BaseClass"; import { Channel } from "./Channel"; import { Guild } from "./Guild"; @@ -104,10 +104,19 @@ export class Invite extends BaseClassWithoutId { @Column() flags: number; + isExpired() { + if (this.max_age !== 0 && this.expires_at && this.expires_at < new Date()) return true; + if (this.max_uses !== 0 && this.uses >= this.max_uses) return true; + return false; + } + static async joinGuild(user_id: string, code: string) { const invite = await Invite.findOneOrFail({ where: { code } }); - if (invite.uses++ >= invite.max_uses && invite.max_uses !== 0) + if (invite.isExpired()) { await Invite.delete({ code }); + throw new Error("Invite is expired"); + } + if (invite.uses++ >= invite.max_uses && invite.max_uses !== 0) await Invite.delete({ code }); else await invite.save(); await Member.addToGuild(user_id, invite.guild_id);