526 lines
17 KiB
TypeScript
526 lines
17 KiB
TypeScript
// Metro module 3817 (f3818).
|
|
import ImpersonateStore from "../modules/impersonate/ImpersonateStore";
|
|
import LurkingStore from "../modules/lurker_mode/LurkingStore";
|
|
import StageInstanceStore from "../modules/stage_channels/StageInstanceStore";
|
|
import JoinedThreadsStore from "../modules/threads/JoinedThreadsStore";
|
|
import { ChannelRecordBase, THREAD_CHANNEL_TYPES } from "../records/ChannelRecord";
|
|
import { isGuildOwner, isGuildOwnerWithRequiredMfaLevel } from "../records/GuildRecord";
|
|
import UserRecord from "../records/UserRecord";
|
|
import ChannelStore from "./ChannelStore";
|
|
import GuildMemberStore from "./GuildMemberStore";
|
|
import GuildStore from "./GuildStore";
|
|
import UserStore from "./UserStore";
|
|
import { Permissions } from "../Constants";
|
|
import { MemberSafetyPagePermissions } from "../modules/guild_mod_dash_member_safety/MemberSafetyConstants";
|
|
import * as _PermissionUtils from "../utils/PermissionUtils";
|
|
import { applyThreadPermissions, VIEW_GUILD_SETTINGS } from "../utils/PermissionUtils";
|
|
import Module12 from "../_bundle/Module12";
|
|
import { doesThreadMembersActionAffectMe } from "../modules/threads/ThreadActionUtils";
|
|
import { isGuildRecord } from "../utils/GuildRecordUtils";
|
|
import Module589 from "../_bundle/Module589";
|
|
import { hasAny, has } from "../_bundle/HighLow";
|
|
import BasicPermissionUtils from "../utils/BasicPermissionUtils";
|
|
import Dispatcher from "../Dispatcher";
|
|
let c2156_19, c2156_20, c2156_21, c2156_22, updateGuildVersion, computePermissions2;
|
|
const getUncachedChannelPermissions = function getUncachedChannelPermissions(a0, checkElevated = true) {
|
|
let r35, NONE;
|
|
const currentUser = UserStore.getCurrentUser();
|
|
if (currentUser == null) {
|
|
return _PermissionUtils.NONE;
|
|
}
|
|
const channel = ChannelStore.getChannel(a0);
|
|
if (channel == null) {
|
|
return _PermissionUtils.NONE;
|
|
}
|
|
const guildId = channel.getGuildId();
|
|
const r18 = guildId != null && (LurkingStore.isLurking(guildId) || GuildMemberStore.getMember(guildId, currentUser.id)?.isPending);
|
|
L23: {
|
|
if (!channel.isScheduledForDeletion() && (!r18 && (Module12.isEmpty(channel.permissionOverwrites) && guildId != null))) {
|
|
r35 = c2156_19[guildId];
|
|
if (r35 != null) {
|
|
break L23;
|
|
}
|
|
const currentUser2 = UserStore.getCurrentUser();
|
|
if (currentUser2 == null) {
|
|
r35 = _PermissionUtils.NONE;
|
|
break L23;
|
|
}
|
|
const guild = GuildStore.getGuild(guildId);
|
|
if (guild == null) {
|
|
NONE = _PermissionUtils.NONE;
|
|
} else {
|
|
NONE = _PermissionUtils.computePermissions({
|
|
user: currentUser2,
|
|
context: guild,
|
|
checkElevated: true
|
|
});
|
|
c2156_19[guildId] = NONE;
|
|
}
|
|
r35 = NONE;
|
|
} else {
|
|
r35 = _PermissionUtils.computePermissions({
|
|
user: currentUser,
|
|
context: channel,
|
|
checkElevated
|
|
});
|
|
}
|
|
}
|
|
return r35;
|
|
};
|
|
updateGuildVersion = function updateGuildVersion(a0) {
|
|
if (a0 != null) {
|
|
let r5 = c2156_21[a0];
|
|
if (r5 == null) {
|
|
r5 = 0;
|
|
}
|
|
c2156_21[a0] = r5 + 1;
|
|
}
|
|
};
|
|
const handleConnectionOpen = function handleConnectionOpen() {
|
|
c2156_19 = {};
|
|
c2156_20 = {};
|
|
for (const key in c2156_21) {
|
|
c2156_21[key] = c2156_21[key] + 1;
|
|
}
|
|
c2156_22 = c2156_22 + 1;
|
|
};
|
|
const handleGuild = function handleGuild() {
|
|
c2156_19 = {};
|
|
c2156_20 = {};
|
|
for (const key in c2156_21) {
|
|
c2156_21[key] = c2156_21[key] + 1;
|
|
}
|
|
c2156_22 = c2156_22 + 1;
|
|
};
|
|
const handleGuildMemberUpdate = function handleGuildMemberUpdate(a0) {
|
|
if (a0.user.id !== UserStore.getCurrentUser()?.id) {
|
|
return false;
|
|
}
|
|
c2156_19 = {};
|
|
c2156_20 = {};
|
|
for (const key in c2156_21) {
|
|
c2156_21[key] = c2156_21[key] + 1;
|
|
}
|
|
c2156_22 = c2156_22 + 1;
|
|
};
|
|
const handleThreadAction = function handleThreadAction() {
|
|
return true;
|
|
};
|
|
const handleSearchMessagesSuccess = function handleSearchMessagesSuccess(a0) {
|
|
return a0.data.some((a0) => {
|
|
const messages = a0.messages;
|
|
return a0.threads.length > 0 || messages.some((message) => message.some((item) => item.thread != null));
|
|
});
|
|
};
|
|
const handleGuildRole = function handleGuildRole({ guildId }) {
|
|
delete c2156_19[guildId];
|
|
Module12.forEach(ChannelStore.getMutableBasicGuildChannelsForGuild(guildId), (a0) => {
|
|
delete c2156_20[a0.id];
|
|
});
|
|
c2156_22 = c2156_22 + 1;
|
|
if (guildId != null) {
|
|
let r21 = c2156_21[guildId];
|
|
if (r21 == null) {
|
|
r21 = 0;
|
|
}
|
|
c2156_21[guildId] = r21 + 1;
|
|
}
|
|
};
|
|
const handleStageInstancesChanged = function handleStageInstancesChanged(a0) {
|
|
const channel = ChannelStore.getChannel(a0.instance.channel_id);
|
|
if (channel == null) {
|
|
return false;
|
|
}
|
|
const r20 = _PermissionUtils.computePermissions({
|
|
user: UserStore.getCurrentUser(),
|
|
context: channel
|
|
});
|
|
if (r20 === c2156_20[channel.id]) {
|
|
return false;
|
|
}
|
|
c2156_20[channel.id] = r20;
|
|
c2156_22 = c2156_22 + 1;
|
|
};
|
|
const handleImpersonateUpdate = function handleImpersonateUpdate({ guildId }) {
|
|
delete c2156_19[guildId];
|
|
Module12.forEach(ChannelStore.getMutableBasicGuildChannelsForGuild(guildId), (a0) => {
|
|
delete c2156_20[a0.id];
|
|
});
|
|
c2156_22 = c2156_22 + 1;
|
|
if (guildId != null) {
|
|
let r21 = c2156_21[guildId];
|
|
if (r21 == null) {
|
|
r21 = 0;
|
|
}
|
|
c2156_21[guildId] = r21 + 1;
|
|
}
|
|
};
|
|
computePermissions2 = function computePermissions(a0, a1, a2, a3) {
|
|
let NONE2;
|
|
let NONE = _PermissionUtils.NONE;
|
|
if (a0 instanceof ChannelRecordBase) {
|
|
if (THREAD_CHANNEL_TYPES.has(a0.type)) {
|
|
const channel = ChannelStore.getChannel(a0.parent_id);
|
|
return channel == null ? _PermissionUtils.NONE : applyThreadPermissions(a0, computePermissions2(channel, a1, a2, a3), JoinedThreadsStore.hasJoined(a0.id), GuildMemberStore.isCurrentUserGuest(a0.guild_id));
|
|
}
|
|
const id2 = a0.id;
|
|
let r51 = c2156_20[id2];
|
|
if (r51 == null) {
|
|
const uncachedChannelPermissions = getUncachedChannelPermissions(id2, true);
|
|
c2156_20[id2] = uncachedChannelPermissions;
|
|
r51 = uncachedChannelPermissions;
|
|
}
|
|
NONE = r51;
|
|
} else if (isGuildRecord(a0)) {
|
|
const id = a0.id;
|
|
let r31 = c2156_19[id];
|
|
if (r31 == null) {
|
|
const currentUser = UserStore.getCurrentUser();
|
|
if (currentUser == null) {
|
|
r31 = _PermissionUtils.NONE;
|
|
} else {
|
|
const guild = GuildStore.getGuild(id);
|
|
if (guild == null) {
|
|
NONE2 = _PermissionUtils.NONE;
|
|
} else {
|
|
NONE2 = _PermissionUtils.computePermissions({
|
|
user: currentUser,
|
|
context: guild,
|
|
checkElevated: true
|
|
});
|
|
c2156_19[id] = NONE2;
|
|
}
|
|
r31 = NONE2;
|
|
}
|
|
}
|
|
NONE = r31;
|
|
}
|
|
if (!(a1 === void 0 && (a2 === void 0 && a3 === void 0))) {
|
|
NONE = _PermissionUtils.computePermissions({
|
|
user: UserStore.getCurrentUser(),
|
|
context: a0,
|
|
overwrites: a1,
|
|
roles: a2,
|
|
checkElevated: true,
|
|
excludeGuildPermissions: a3
|
|
});
|
|
}
|
|
return NONE;
|
|
};
|
|
c2156_19 = {};
|
|
c2156_20 = {};
|
|
c2156_21 = {};
|
|
c2156_22 = 0;
|
|
class PermissionStore extends Module589.Store {
|
|
static displayName = "PermissionStore";
|
|
initialize() {
|
|
this.waitFor(ChannelStore, GuildMemberStore, GuildStore, ImpersonateStore, JoinedThreadsStore, LurkingStore, StageInstanceStore, UserStore);
|
|
}
|
|
getChannelPermissions(a0) {
|
|
let r10;
|
|
if (THREAD_CHANNEL_TYPES.has(a0.type)) {
|
|
r10 = getUncachedChannelPermissions(a0.id);
|
|
} else {
|
|
const id = a0.id;
|
|
r10 = c2156_20[id];
|
|
if (r10 == null) {
|
|
const uncachedChannelPermissions = getUncachedChannelPermissions(id, true);
|
|
c2156_20[id] = uncachedChannelPermissions;
|
|
r10 = uncachedChannelPermissions;
|
|
}
|
|
}
|
|
return r10;
|
|
}
|
|
getGuildPermissions({ id }) {
|
|
let NONE;
|
|
let r11 = c2156_19[id];
|
|
if (r11 == null) {
|
|
const currentUser = UserStore.getCurrentUser();
|
|
if (currentUser == null) {
|
|
r11 = _PermissionUtils.NONE;
|
|
} else {
|
|
const guild = GuildStore.getGuild(id);
|
|
if (guild == null) {
|
|
NONE = _PermissionUtils.NONE;
|
|
} else {
|
|
NONE = _PermissionUtils.computePermissions({
|
|
user: currentUser,
|
|
context: guild,
|
|
checkElevated: true
|
|
});
|
|
c2156_19[id] = NONE;
|
|
}
|
|
r11 = NONE;
|
|
}
|
|
}
|
|
return r11;
|
|
}
|
|
getGuildPermissionProps(a0) {
|
|
const currentUser = UserStore.getCurrentUser();
|
|
return {
|
|
canManageGuild: this.can(Permissions.MANAGE_GUILD, a0),
|
|
canManageChannels: this.can(Permissions.MANAGE_CHANNELS, a0),
|
|
canManageRoles: this.can(Permissions.MANAGE_ROLES, a0),
|
|
canManageBans: this.can(Permissions.BAN_MEMBERS, a0),
|
|
canManageNicknames: this.can(Permissions.MANAGE_NICKNAMES, a0),
|
|
canManageGuildExpressions: this.can(Permissions.MANAGE_GUILD_EXPRESSIONS, a0) || this.can(Permissions.CREATE_GUILD_EXPRESSIONS, a0),
|
|
canViewAuditLog: this.can(Permissions.VIEW_AUDIT_LOG, a0),
|
|
canViewAuditLogV2: this.can(Permissions.VIEW_AUDIT_LOG, a0),
|
|
canManageWebhooks: this.can(Permissions.MANAGE_WEBHOOKS, a0),
|
|
canViewGuildAnalytics: this.can(Permissions.VIEW_GUILD_ANALYTICS, a0),
|
|
canAccessMembersPage: this.canAccessMemberSafetyPage(a0),
|
|
isGuildAdmin: this.can(Permissions.ADMINISTRATOR, a0),
|
|
isOwner: currentUser != null && isGuildOwner(a0, currentUser),
|
|
isOwnerWithRequiredMfaLevel: currentUser != null && isGuildOwnerWithRequiredMfaLevel(a0, currentUser),
|
|
guild: a0
|
|
};
|
|
}
|
|
canAccessMemberSafetyPage({ id }) {
|
|
let NONE;
|
|
let r17 = c2156_19[id];
|
|
if (r17 == null) {
|
|
const currentUser = UserStore.getCurrentUser();
|
|
if (currentUser == null) {
|
|
r17 = _PermissionUtils.NONE;
|
|
} else {
|
|
const guild = GuildStore.getGuild(id);
|
|
if (guild == null) {
|
|
NONE = _PermissionUtils.NONE;
|
|
} else {
|
|
NONE = _PermissionUtils.computePermissions({
|
|
user: currentUser,
|
|
context: guild,
|
|
checkElevated: true
|
|
});
|
|
c2156_19[id] = NONE;
|
|
}
|
|
r17 = NONE;
|
|
}
|
|
}
|
|
return hasAny(r17, MemberSafetyPagePermissions);
|
|
}
|
|
canAccessGuildSettings({ id }) {
|
|
let NONE;
|
|
let r16 = c2156_19[id];
|
|
if (r16 == null) {
|
|
const currentUser = UserStore.getCurrentUser();
|
|
if (currentUser == null) {
|
|
r16 = _PermissionUtils.NONE;
|
|
} else {
|
|
const guild = GuildStore.getGuild(id);
|
|
if (guild == null) {
|
|
NONE = _PermissionUtils.NONE;
|
|
} else {
|
|
NONE = _PermissionUtils.computePermissions({
|
|
user: currentUser,
|
|
context: guild,
|
|
checkElevated: true
|
|
});
|
|
c2156_19[id] = NONE;
|
|
}
|
|
r16 = NONE;
|
|
}
|
|
}
|
|
return hasAny(r16, VIEW_GUILD_SETTINGS);
|
|
}
|
|
canWithPartialContext(a0, a1) {
|
|
return "channelId" in a1 && typeof a1.channelId === "string" ? this.can(a0, ChannelStore.getChannel(a1.channelId)) : "guildId" in a1 && typeof a1.guildId === "string" && this.can(a0, GuildStore.getGuild(a1.guildId));
|
|
}
|
|
can(a0, a1, a2, a3, a4) {
|
|
return has(computePermissions2(a1, a2, a3, a4), a0);
|
|
}
|
|
canBasicChannel(a0, a1, a2, a3, a4) {
|
|
return "basicPermissions" in a1 ? BasicPermissionUtils.has(a1.basicPermissions, a0) : has(computePermissions2(a1, a2, a3, a4), BasicPermissionUtils.asBigFlag(a0));
|
|
}
|
|
computePermissions(a0, a1, a2, a3) {
|
|
return computePermissions2(a0, a1, a2, a3);
|
|
}
|
|
computeBasicPermissions(a0) {
|
|
return "basicPermissions" in a0 ? a0.basicPermissions : BasicPermissionUtils.asBasicFlag(computePermissions2(a0));
|
|
}
|
|
canManageUser(a0, a1, a2) {
|
|
const r16 = a1 instanceof UserRecord ? a1.id : a1;
|
|
const isGuildOwner2 = isGuildOwner(a2, r16);
|
|
if (isGuildOwner2) {
|
|
return false;
|
|
}
|
|
const currentUser = UserStore.getCurrentUser();
|
|
if (this.can(a0, a2)) {
|
|
const r8 = currentUser != null ? _PermissionUtils.getHighestRole(a2, currentUser.id) : void 0;
|
|
const highestRole = _PermissionUtils.getHighestRole(a2, r16);
|
|
return currentUser != null && _PermissionUtils.isRoleHigher(a2, currentUser.id, r8, highestRole);
|
|
}
|
|
return false;
|
|
}
|
|
getHighestRole(a0) {
|
|
const currentUser = UserStore.getCurrentUser();
|
|
return currentUser != null ? _PermissionUtils.getHighestRole(a0, currentUser.id) : null;
|
|
}
|
|
isRoleHigher(a0, a1, a2) {
|
|
const currentUser = UserStore.getCurrentUser();
|
|
return _PermissionUtils.isRoleHigher(a0, ImpersonateStore.isViewingRoles(a0.id) ? void 0 : currentUser?.id, a1, a2);
|
|
}
|
|
canImpersonateRole(a0, a1) {
|
|
const highestRole = this.getHighestRole(a0);
|
|
let r9 = this.can(Permissions.MANAGE_GUILD, a0) && this.can(Permissions.MANAGE_ROLES, a0);
|
|
let r14 = this.isRoleHigher(a0, highestRole, a1);
|
|
if (r9) {
|
|
if (!r14) {
|
|
r14 = a1.id === highestRole?.id;
|
|
}
|
|
r9 = r14;
|
|
}
|
|
return r9;
|
|
}
|
|
getGuildVersion(a0) {
|
|
let r5 = c2156_21[a0];
|
|
if (r5 == null) {
|
|
r5 = 0;
|
|
}
|
|
return r5;
|
|
}
|
|
getChannelsVersion() {
|
|
return c2156_22;
|
|
}
|
|
}
|
|
const permissionStore = new PermissionStore(Dispatcher, {
|
|
BACKGROUND_SYNC: handleConnectionOpen,
|
|
CONNECTION_OPEN: handleConnectionOpen,
|
|
OVERLAY_INITIALIZE: handleConnectionOpen,
|
|
CACHE_LOADED: handleConnectionOpen,
|
|
CACHE_LOADED_LAZY: handleConnectionOpen,
|
|
CONNECTION_CLOSED: function handleConnectionClose() {
|
|
c2156_20 = {};
|
|
c2156_19 = {};
|
|
c2156_21 = {};
|
|
c2156_22 = 0;
|
|
},
|
|
GUILD_CREATE: handleGuild,
|
|
GUILD_UPDATE: handleGuild,
|
|
GUILD_DELETE: handleGuild,
|
|
GUILD_MEMBER_ADD: handleGuildMemberUpdate,
|
|
GUILD_MEMBER_UPDATE: handleGuildMemberUpdate,
|
|
CURRENT_USER_UPDATE: handleGuildMemberUpdate,
|
|
CHANNEL_CREATE: function handleChannelCreate(a0) {
|
|
const channel = ChannelStore.getChannel(a0.channel.id);
|
|
if (channel != null && !channel.isPrivate()) {
|
|
const r23 = _PermissionUtils.computePermissions({
|
|
user: UserStore.getCurrentUser(),
|
|
context: channel
|
|
});
|
|
if (c2156_20[channel.id] === r23) {
|
|
return false;
|
|
}
|
|
c2156_20[channel.id] = r23;
|
|
c2156_22 = c2156_22 + 1;
|
|
const guildId = channel.getGuildId();
|
|
if (guildId != null) {
|
|
let r32 = c2156_21[guildId];
|
|
if (r32 == null) {
|
|
r32 = 0;
|
|
}
|
|
c2156_21[guildId] = r32 + 1;
|
|
}
|
|
return void 0;
|
|
}
|
|
return false;
|
|
},
|
|
THREAD_CREATE: handleThreadAction,
|
|
THREAD_UPDATE: handleThreadAction,
|
|
THREAD_LIST_SYNC: handleThreadAction,
|
|
LOAD_THREADS_SUCCESS: handleThreadAction,
|
|
LOAD_ARCHIVED_THREADS_SUCCESS: handleThreadAction,
|
|
CHANNEL_UPDATES: function handleChannelUpdates({ channels }) {
|
|
let r1 = false;
|
|
for (const item of channels) {
|
|
const channel = ChannelStore.getChannel(item.id);
|
|
if (channel != null && !channel.isPrivate()) {
|
|
const currentUser = UserStore.getCurrentUser();
|
|
const context = channel;
|
|
const r45 = _PermissionUtils.computePermissions({
|
|
user: currentUser,
|
|
context
|
|
});
|
|
if (c2156_20[context.id] !== r45) {
|
|
c2156_20[channel.id] = r45;
|
|
updateGuildVersion(channel.getGuildId());
|
|
r1 = true;
|
|
}
|
|
}
|
|
}
|
|
let r61 = !!r1;
|
|
if (r61) {
|
|
c2156_22 = c2156_22 + 1;
|
|
r61 = r1;
|
|
}
|
|
return r61;
|
|
},
|
|
LOAD_MESSAGES_SUCCESS: function handleLoadMessagesSuccess(a0) {
|
|
return a0.messages.some((message) => message.thread != null);
|
|
},
|
|
SEARCH_MESSAGES_SUCCESS: handleSearchMessagesSuccess,
|
|
MOD_VIEW_SEARCH_MESSAGES_SUCCESS: handleSearchMessagesSuccess,
|
|
THREAD_MEMBER_UPDATE: function handleThreadMemberUpdate(a0) {
|
|
let r12 = UserStore.getCurrentUser()?.id === a0.userId;
|
|
if (r12) {
|
|
const guildId = a0.guildId;
|
|
const r4 = guildId != null;
|
|
r12 = true;
|
|
if (r4) {
|
|
let r15 = c2156_21[guildId];
|
|
if (r15 == null) {
|
|
r15 = 0;
|
|
}
|
|
c2156_21[guildId] = r15 + 1;
|
|
r12 = true;
|
|
}
|
|
}
|
|
return r12;
|
|
},
|
|
THREAD_MEMBERS_UPDATE: function handleThreadMembersUpdate(a0) {
|
|
let r14 = !!doesThreadMembersActionAffectMe(a0);
|
|
if (r14) {
|
|
const guildId = a0.guildId;
|
|
const r4 = guildId != null;
|
|
r14 = true;
|
|
if (r4) {
|
|
let r17 = c2156_21[guildId];
|
|
if (r17 == null) {
|
|
r17 = 0;
|
|
}
|
|
c2156_21[guildId] = r17 + 1;
|
|
r14 = true;
|
|
}
|
|
}
|
|
return r14;
|
|
},
|
|
CHANNEL_DELETE: function handleChannelDelete({ channel }) {
|
|
delete c2156_20[channel.id];
|
|
c2156_22 = c2156_22 + 1;
|
|
const guild_id = channel.guild_id;
|
|
if (guild_id != null) {
|
|
let r12 = c2156_21[guild_id];
|
|
if (r12 == null) {
|
|
r12 = 0;
|
|
}
|
|
c2156_21[guild_id] = r12 + 1;
|
|
}
|
|
return false;
|
|
},
|
|
GUILD_ROLE_CREATE: handleGuildRole,
|
|
GUILD_ROLE_UPDATE: handleGuildRole,
|
|
GUILD_ROLE_DELETE: handleGuildRole,
|
|
LOGOUT: function resetState() {
|
|
c2156_20 = {};
|
|
c2156_19 = {};
|
|
c2156_21 = {};
|
|
c2156_22 = 0;
|
|
},
|
|
STAGE_INSTANCE_CREATE: handleStageInstancesChanged,
|
|
STAGE_INSTANCE_UPDATE: handleStageInstancesChanged,
|
|
STAGE_INSTANCE_DELETE: handleStageInstancesChanged,
|
|
IMPERSONATE_UPDATE: handleImpersonateUpdate,
|
|
IMPERSONATE_STOP: handleImpersonateUpdate
|
|
});
|
|
export default permissionStore;
|