User moderation details (#8762)
* add more user details for admins to see * fix some issues * small style fix as suggested by Johann150 Co-authored-by: Johann150 <johann@qwertqwefsday.eu> * fix Co-authored-by: Johann150 <johann@qwertqwefsday.eu> Co-authored-by: Johann150 <johann@qwertqwefsday.eu>
This commit is contained in:
parent
71c230b7b7
commit
6061937996
|
@ -1,5 +1,5 @@
|
||||||
|
import { Signins, UserProfiles, Users } from '@/models/index.js';
|
||||||
import define from '../../define.js';
|
import define from '../../define.js';
|
||||||
import { Users } from '@/models/index.js';
|
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
@ -23,9 +23,12 @@ export const paramDef = {
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-default-export
|
// eslint-disable-next-line import/no-default-export
|
||||||
export default define(meta, paramDef, async (ps, me) => {
|
export default define(meta, paramDef, async (ps, me) => {
|
||||||
const user = await Users.findOneBy({ id: ps.userId });
|
const [user, profile] = await Promise.all([
|
||||||
|
Users.findOneBy({ id: ps.userId }),
|
||||||
|
UserProfiles.findOneBy({ userId: ps.userId })
|
||||||
|
]);
|
||||||
|
|
||||||
if (user == null) {
|
if (user == null || profile == null) {
|
||||||
throw new Error('user not found');
|
throw new Error('user not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,8 +37,37 @@ export default define(meta, paramDef, async (ps, me) => {
|
||||||
throw new Error('cannot show info of admin');
|
throw new Error('cannot show info of admin');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!_me.isAdmin) {
|
||||||
return {
|
return {
|
||||||
...user,
|
isModerator: user.isModerator,
|
||||||
token: user.token != null ? '<MASKED>' : user.token,
|
isSilenced: user.isSilenced,
|
||||||
|
isSuspended: user.isSuspended,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
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,
|
||||||
|
isSilenced: user.isSilenced,
|
||||||
|
isSuspended: user.isSuspended,
|
||||||
|
signins,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -54,6 +54,9 @@
|
||||||
<FormButton v-if="user.host != null" class="_formBlock" @click="updateRemoteUser"><i class="fas fa-sync"></i> {{ $ts.updateRemoteUser }}</FormButton>
|
<FormButton v-if="user.host != null" class="_formBlock" @click="updateRemoteUser"><i class="fas fa-sync"></i> {{ $ts.updateRemoteUser }}</FormButton>
|
||||||
</FormSection>
|
</FormSection>
|
||||||
|
|
||||||
|
<MkObjectView v-if="info && $i.isAdmin" tall :value="info">
|
||||||
|
</MkObjectView>
|
||||||
|
|
||||||
<MkObjectView tall :value="user">
|
<MkObjectView tall :value="user">
|
||||||
</MkObjectView>
|
</MkObjectView>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue