
* Add eslint, switch to lint-staged for precommit * Fix all ESLint errors * Update GH workflow to check prettier and eslint
213 lines
5.2 KiB
TypeScript
213 lines
5.2 KiB
TypeScript
/*
|
|
Fosscord: A FOSS re-implementation and extension of the Discord.com backend.
|
|
Copyright (C) 2023 Fosscord and Fosscord Contributors
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as published
|
|
by the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
import { Column, Entity, JoinColumn, ManyToOne, RelationId } from "typeorm";
|
|
import { BaseClass } from "./BaseClass";
|
|
import { ChannelPermissionOverwrite } from "./Channel";
|
|
import { User } from "./User";
|
|
|
|
export enum AuditLogEvents {
|
|
// guild level
|
|
GUILD_UPDATE = 1,
|
|
GUILD_IMPORT = 2,
|
|
GUILD_EXPORTED = 3,
|
|
GUILD_ARCHIVE = 4,
|
|
GUILD_UNARCHIVE = 5,
|
|
// join-leave
|
|
USER_JOIN = 6,
|
|
USER_LEAVE = 7,
|
|
// channels
|
|
CHANNEL_CREATE = 10,
|
|
CHANNEL_UPDATE = 11,
|
|
CHANNEL_DELETE = 12,
|
|
// permission overrides
|
|
CHANNEL_OVERWRITE_CREATE = 13,
|
|
CHANNEL_OVERWRITE_UPDATE = 14,
|
|
CHANNEL_OVERWRITE_DELETE = 15,
|
|
// kick and ban
|
|
MEMBER_KICK = 20,
|
|
MEMBER_PRUNE = 21,
|
|
MEMBER_BAN_ADD = 22,
|
|
MEMBER_BAN_REMOVE = 23,
|
|
// member updates
|
|
MEMBER_UPDATE = 24,
|
|
MEMBER_ROLE_UPDATE = 25,
|
|
MEMBER_MOVE = 26,
|
|
MEMBER_DISCONNECT = 27,
|
|
BOT_ADD = 28,
|
|
// roles
|
|
ROLE_CREATE = 30,
|
|
ROLE_UPDATE = 31,
|
|
ROLE_DELETE = 32,
|
|
ROLE_SWAP = 33,
|
|
// invites
|
|
INVITE_CREATE = 40,
|
|
INVITE_UPDATE = 41,
|
|
INVITE_DELETE = 42,
|
|
// webhooks
|
|
WEBHOOK_CREATE = 50,
|
|
WEBHOOK_UPDATE = 51,
|
|
WEBHOOK_DELETE = 52,
|
|
WEBHOOK_SWAP = 53,
|
|
// custom emojis
|
|
EMOJI_CREATE = 60,
|
|
EMOJI_UPDATE = 61,
|
|
EMOJI_DELETE = 62,
|
|
EMOJI_SWAP = 63,
|
|
// deletion
|
|
MESSAGE_CREATE = 70, // messages sent using non-primary seat of the user only
|
|
MESSAGE_EDIT = 71, // non-self edits only
|
|
MESSAGE_DELETE = 72,
|
|
MESSAGE_BULK_DELETE = 73,
|
|
// pinning
|
|
MESSAGE_PIN = 74,
|
|
MESSAGE_UNPIN = 75,
|
|
// integrations
|
|
INTEGRATION_CREATE = 80,
|
|
INTEGRATION_UPDATE = 81,
|
|
INTEGRATION_DELETE = 82,
|
|
// stage actions
|
|
STAGE_INSTANCE_CREATE = 83,
|
|
STAGE_INSTANCE_UPDATE = 84,
|
|
STAGE_INSTANCE_DELETE = 85,
|
|
// stickers
|
|
STICKER_CREATE = 90,
|
|
STICKER_UPDATE = 91,
|
|
STICKER_DELETE = 92,
|
|
STICKER_SWAP = 93,
|
|
// threads
|
|
THREAD_CREATE = 110,
|
|
THREAD_UPDATE = 111,
|
|
THREAD_DELETE = 112,
|
|
// application commands
|
|
APPLICATION_COMMAND_PERMISSION_UPDATE = 121,
|
|
// automod
|
|
POLICY_CREATE = 140,
|
|
POLICY_UPDATE = 141,
|
|
POLICY_DELETE = 142,
|
|
MESSAGE_BLOCKED_BY_POLICIES = 143, // in fosscord, blocked messages are stealth-dropped
|
|
// instance policies affecting the guild
|
|
GUILD_AFFECTED_BY_POLICIES = 216,
|
|
// message moves
|
|
IN_GUILD_MESSAGE_MOVE = 223,
|
|
CROSS_GUILD_MESSAGE_MOVE = 224,
|
|
// message routing
|
|
ROUTE_CREATE = 225,
|
|
ROUTE_UPDATE = 226,
|
|
}
|
|
|
|
@Entity("audit_logs")
|
|
export class AuditLog extends BaseClass {
|
|
@JoinColumn({ name: "target_id" })
|
|
@ManyToOne(() => User)
|
|
target?: User;
|
|
|
|
@Column({ nullable: true })
|
|
@RelationId((auditlog: AuditLog) => auditlog.user)
|
|
user_id: string;
|
|
|
|
@JoinColumn({ name: "user_id" })
|
|
@ManyToOne(() => User, (user: User) => user.id)
|
|
user: User;
|
|
|
|
@Column({ type: "int" })
|
|
action_type: AuditLogEvents;
|
|
|
|
@Column({ type: "simple-json", nullable: true })
|
|
options?: {
|
|
delete_member_days?: string;
|
|
members_removed?: string;
|
|
channel_id?: string;
|
|
messaged_id?: string;
|
|
count?: string;
|
|
id?: string;
|
|
type?: string;
|
|
role_name?: string;
|
|
};
|
|
|
|
@Column()
|
|
@Column({ type: "simple-json" })
|
|
changes: AuditLogChange[];
|
|
|
|
@Column({ nullable: true })
|
|
reason?: string;
|
|
}
|
|
|
|
export interface AuditLogChange {
|
|
new_value?: AuditLogChangeValue;
|
|
old_value?: AuditLogChangeValue;
|
|
key: string;
|
|
}
|
|
|
|
export interface AuditLogChangeValue {
|
|
name?: string;
|
|
description?: string;
|
|
icon_hash?: string;
|
|
splash_hash?: string;
|
|
discovery_splash_hash?: string;
|
|
banner_hash?: string;
|
|
owner_id?: string;
|
|
region?: string;
|
|
preferred_locale?: string;
|
|
afk_channel_id?: string;
|
|
afk_timeout?: number;
|
|
rules_channel_id?: string;
|
|
public_updates_channel_id?: string;
|
|
mfa_level?: number;
|
|
verification_level?: number;
|
|
explicit_content_filter?: number;
|
|
default_message_notifications?: number;
|
|
vanity_url_code?: string;
|
|
$add?: object[]; // TODO: These types are bad.
|
|
$remove?: object[];
|
|
prune_delete_days?: number;
|
|
widget_enabled?: boolean;
|
|
widget_channel_id?: string;
|
|
system_channel_id?: string;
|
|
position?: number;
|
|
topic?: string;
|
|
bitrate?: number;
|
|
permission_overwrites?: ChannelPermissionOverwrite[];
|
|
nsfw?: boolean;
|
|
application_id?: string;
|
|
rate_limit_per_user?: number;
|
|
permissions?: string;
|
|
color?: number;
|
|
hoist?: boolean;
|
|
mentionable?: boolean;
|
|
allow?: string;
|
|
deny?: string;
|
|
code?: string;
|
|
channel_id?: string;
|
|
inviter_id?: string;
|
|
max_uses?: number;
|
|
uses?: number;
|
|
max_age?: number;
|
|
temporary?: boolean;
|
|
deaf?: boolean;
|
|
mute?: boolean;
|
|
nick?: string;
|
|
avatar_hash?: string;
|
|
id?: string;
|
|
type?: number;
|
|
enable_emoticons?: boolean;
|
|
expire_behavior?: number;
|
|
expire_grace_period?: number;
|
|
user_limit?: number;
|
|
}
|