Files
habitica/website/server/libs/chatReporting/chatReporter.js
2019-10-10 20:11:50 +02:00

65 lines
2.1 KiB
JavaScript

import { getGroupUrl, getUserInfo } from '../email';
import { getAuthorEmailFromMessage } from '../chat';
export default class ChatReporter {
constructor (req, res) {
this.req = req;
this.res = res;
}
async validate () { // eslint-disable-line class-methods-use-this
throw new Error('Not implemented');
}
async getMessageVariables (group, message) {
const reporterEmail = getUserInfo(this.user, ['email']).email;
const authorVariables = await this.getAuthorVariables(message);
const groupUrl = getGroupUrl(group);
return [
{ name: 'MESSAGE_TIME', content: (new Date(message.timestamp)).toString() },
{ name: 'MESSAGE_TEXT', content: message.text },
{ name: 'REPORTER_DISPLAY_NAME', content: this.user.profile.name },
{ name: 'REPORTER_USERNAME', content: this.user.auth.local.username },
{ name: 'REPORTER_UUID', content: this.user._id },
{ name: 'REPORTER_EMAIL', content: reporterEmail },
{ name: 'REPORTER_MODAL_URL', content: `/static/front/#?memberId=${this.user._id}` },
...authorVariables,
{ name: 'GROUP_NAME', content: group.name },
{ name: 'GROUP_TYPE', content: group.type },
{ name: 'GROUP_ID', content: group._id },
{ name: 'GROUP_URL', content: groupUrl || 'N/A' },
];
}
createGenericAuthorVariables (prefix, { // eslint-disable-line class-methods-use-this
user, username, uuid, email,
}) {
return [
{ name: `${prefix}_DISPLAY_NAME`, content: user },
{ name: `${prefix}_USERNAME`, content: username },
{ name: `${prefix}_UUID`, content: uuid },
{ name: `${prefix}_EMAIL`, content: email },
{ name: `${prefix}_MODAL_URL`, content: `/static/front/#?memberId=${uuid}` },
];
}
async getAuthorVariables (message) {
this.authorEmail = await getAuthorEmailFromMessage(message);
return this.createGenericAuthorVariables('AUTHOR', {
user: message.user,
username: message.username,
uuid: message.uuid,
email: this.authorEmail,
});
}
async flag () { // eslint-disable-line class-methods-use-this
throw new Error('Flag must be implemented');
}
}