Files
2026-07-26 18:25:37 +09:00

87 lines
2.5 KiB
JavaScript

import { Signins, UserProfiles, Users } from "../../../../models/index.js";
import define from "../../define.js";
export const meta = {
tags: [
"admin"
],
requireCredential: true,
requireModerator: true,
res: {
type: "object",
nullable: false,
optional: false
}
};
export const paramDef = {
type: "object",
properties: {
userId: {
type: "string",
format: "misskey:id"
}
},
required: [
"userId"
]
};
export default define(meta, paramDef, async (ps, me)=>{
const [user, profile] = await Promise.all([
Users.findOneBy({
id: ps.userId
}),
UserProfiles.findOneBy({
userId: ps.userId
})
]);
if (user == null || profile == null) {
throw new Error("user not found");
}
const _me = await Users.findOneByOrFail({
id: me.id
});
if (_me.isModerator && !_me.isAdmin && user.isAdmin) {
throw new Error("cannot show info of admin");
}
if (!_me.isAdmin) {
return {
isModerator: user.isModerator,
isSilenced: user.isSilenced,
isSuspended: user.isSuspended,
moderationNote: profile.moderationNote
};
}
const maskedKeys = [
"accessToken",
"accessTokenSecret",
"refreshToken"
];
Object.keys(profile.integrations).forEach((integration)=>{
maskedKeys.forEach((key)=>profile.integrations[integration][key] = "<MASKED>");
});
const signins = await Signins.findBy({
userId: user.id
});
return {
email: profile.email,
emailVerified: profile.emailVerified,
autoAcceptFollowed: profile.autoAcceptFollowed,
noCrawle: profile.noCrawle,
preventAiLearning: profile.preventAiLearning,
alwaysMarkNsfw: profile.alwaysMarkNsfw,
carefulBot: profile.carefulBot,
injectFeaturedNote: profile.injectFeaturedNote,
receiveAnnouncementEmail: profile.receiveAnnouncementEmail,
integrations: profile.integrations,
mutedWords: profile.mutedWords,
mutedInstances: profile.mutedInstances,
mutingNotificationTypes: profile.mutingNotificationTypes,
isModerator: user.isModerator,
isVerified: user.isVerified,
isSilenced: user.isSilenced,
isSuspended: user.isSuspended,
lastActiveDate: user.lastActiveDate,
moderationNote: profile.moderationNote,
signins
};
});