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] = ""); }); 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 }; });