diff --git a/app/controllers/admin/announcement.js b/app/controllers/admin/announcement.js index 86a7106..30bee40 100644 --- a/app/controllers/admin/announcement.js +++ b/app/controllers/admin/announcement.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController } = require('../../../lib/site-lib'); -class AnnouncementAdminController extends SiteController { +class AdminAnnouncementController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -160,6 +160,6 @@ class AnnouncementAdminController extends SiteController { module.exports = { logId: 'ctl:admin:announcement', index: 'adminAnnouncement', - className: 'AnnouncementAdminController', - create: async (dtp) => { return new AnnouncementAdminController(dtp); }, + className: 'AdminAnnouncementController', + create: async (dtp) => { return new AdminAnnouncementController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/attachment.js b/app/controllers/admin/attachment.js index 688e919..f1c621a 100644 --- a/app/controllers/admin/attachment.js +++ b/app/controllers/admin/attachment.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController } = require('../../../lib/site-lib'); -class AttachmentAdminController extends SiteController { +class AdminAttachmentController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -132,6 +132,6 @@ class AttachmentAdminController extends SiteController { module.exports = { logId: 'ctl:admin:attachment', index: 'adminAttachment', - className: 'AttachmentAdminController', - create: async (dtp) => { return new AttachmentAdminController(dtp); }, + className: 'AdminAttachmentController', + create: async (dtp) => { return new AdminAttachmentController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/content-report.js b/app/controllers/admin/content-report.js index e1c4774..65af3aa 100644 --- a/app/controllers/admin/content-report.js +++ b/app/controllers/admin/content-report.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController } = require('../../../lib/site-lib'); -class ContentReportAdminController extends SiteController { +class AdminContentReportController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -89,6 +89,6 @@ class ContentReportAdminController extends SiteController { module.exports = { logId: 'ctl:admin:content-report', index: 'adminContentReport', - className: 'ContentReportAdminController', - create: async (dtp) => { return new ContentReportAdminController(dtp); }, + className: 'AdminContentReportController', + create: async (dtp) => { return new AdminContentReportController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/core-node.js b/app/controllers/admin/core-node.js index 772eec4..33f7f7c 100644 --- a/app/controllers/admin/core-node.js +++ b/app/controllers/admin/core-node.js @@ -9,7 +9,7 @@ const express = require('express'); const { SiteController, SiteError } = require('../../../lib/site-lib'); -class CoreNodeAdminController extends SiteController { +class AdminCoreNodeController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -161,6 +161,6 @@ class CoreNodeAdminController extends SiteController { module.exports = { logId: 'ctl:admin:core-node', index: 'adminCoreNode', - className: 'CoreNodeAdminController', - create: async (dtp) => { return new CoreNodeAdminController(dtp); }, + className: 'AdminCoreNodeController', + create: async (dtp) => { return new AdminCoreNodeController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/core-user.js b/app/controllers/admin/core-user.js index f3c9479..6984833 100644 --- a/app/controllers/admin/core-user.js +++ b/app/controllers/admin/core-user.js @@ -9,7 +9,7 @@ const express = require('express'); const { SiteController, SiteError } = require('../../../lib/site-lib'); -class CoreUserAdminController extends SiteController { +class AdminCoreUserController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -90,6 +90,6 @@ class CoreUserAdminController extends SiteController { module.exports = { logId: 'ctl:admin:core-user', index: 'adminCoreUser', - className: 'CoreUserAdminController', - create: async (dtp) => { return new CoreUserAdminController(dtp); }, + className: 'AdminCoreUserController', + create: async (dtp) => { return new AdminCoreUserController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/host.js b/app/controllers/admin/host.js index 147a50b..aff860d 100644 --- a/app/controllers/admin/host.js +++ b/app/controllers/admin/host.js @@ -12,7 +12,7 @@ const NetHostStats = mongoose.model('NetHostStats'); const { /*SiteError,*/ SiteController } = require('../../../lib/site-lib'); -class HostAdminController extends SiteController { +class AdminHostController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -118,6 +118,6 @@ class HostAdminController extends SiteController { module.exports = { logId: 'ctl:admin:host', index: 'adminHost', - className: 'HostAdminController', - create: async (dtp) => { return new HostAdminController(dtp); }, + className: 'AdminHostController', + create: async (dtp) => { return new AdminHostController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/image.js b/app/controllers/admin/image.js index f033683..7bab8c9 100644 --- a/app/controllers/admin/image.js +++ b/app/controllers/admin/image.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController, SiteError } = require('../../../lib/site-lib'); -class ImageAdminController extends SiteController { +class AdminImageController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -116,6 +116,6 @@ class ImageAdminController extends SiteController { module.exports = { logId: 'ctl:admin:image', index: 'adminImage', - className: 'ImageAdminController', - create: async (dtp) => { return new ImageAdminController(dtp); }, + className: 'AdminImageController', + create: async (dtp) => { return new AdminImageController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/job-queue.js b/app/controllers/admin/job-queue.js index 4f43260..7e3eda3 100644 --- a/app/controllers/admin/job-queue.js +++ b/app/controllers/admin/job-queue.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController, SiteError } = require('../../../lib/site-lib'); -class JobQueueAdminController extends SiteController { +class AdminJobQueueController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -121,6 +121,6 @@ class JobQueueAdminController extends SiteController { module.exports = { logId: 'ctl:admin:job-queue', index: 'adminJobQueue', - className: 'JobQueueAdminController', - create: async (dtp) => { return new JobQueueAdminController(dtp); }, + className: 'AdminJobQueueController', + create: async (dtp) => { return new AdminJobQueueController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/log.js b/app/controllers/admin/log.js index 311634e..8648cdb 100644 --- a/app/controllers/admin/log.js +++ b/app/controllers/admin/log.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController } = require('../../../lib/site-lib'); -class LogAdminController extends SiteController { +class AdminLogController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -53,6 +53,6 @@ class LogAdminController extends SiteController { module.exports = { logId: 'ctl:admin:log', index: 'adminLog', - className: 'LogAdminController', - create: async (dtp) => { return new LogAdminController(dtp); }, + className: 'AdminLogController', + create: async (dtp) => { return new AdminLogController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/newsletter.js b/app/controllers/admin/newsletter.js index ffa1325..e8a9152 100644 --- a/app/controllers/admin/newsletter.js +++ b/app/controllers/admin/newsletter.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController, SiteError } = require('../../../lib/site-lib'); -class NewsletterAdminController extends SiteController { +class AdminNewsletterController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -169,6 +169,6 @@ class NewsletterAdminController extends SiteController { module.exports = { logId: 'ctl:admin:newsletter', index: 'adminNewsletter', - className: 'NewsletterAdminController', - create: async (dtp) => { return new NewsletterAdminController(dtp); }, + className: 'AdminNewsletterController', + create: async (dtp) => { return new AdminNewsletterController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/newsroom.js b/app/controllers/admin/newsroom.js index 9cac7af..dfa7909 100644 --- a/app/controllers/admin/newsroom.js +++ b/app/controllers/admin/newsroom.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController, SiteError } = require('../../../lib/site-lib'); -class NewsroomAdminController extends SiteController { +class AdminNewsroomController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -160,6 +160,6 @@ class NewsroomAdminController extends SiteController { module.exports = { logId: 'ctl:admin:newsroom', index: 'adminNewsroomAdmin', - className: 'NewsroomAdminController', - create: async (dtp) => { return new NewsroomAdminController(dtp); }, + className: 'AdminNewsroomController', + create: async (dtp) => { return new AdminNewsroomController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/otp.js b/app/controllers/admin/otp.js index e858e66..139b903 100644 --- a/app/controllers/admin/otp.js +++ b/app/controllers/admin/otp.js @@ -9,7 +9,7 @@ const express = require('express'); const { SiteController, SiteError } = require('../../../lib/site-lib'); -class OtpAdminController extends SiteController { +class AdminOtpController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -51,6 +51,6 @@ class OtpAdminController extends SiteController { module.exports = { logId: 'ctl:admin:otp', index: 'adminOtp', - className: 'OtpAdminController', - create: async (dtp) => { return new OtpAdminController(dtp); }, + className: 'AdminOtpController', + create: async (dtp) => { return new AdminOtpController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/service-node.js b/app/controllers/admin/service-node.js index efdef07..2958ac3 100644 --- a/app/controllers/admin/service-node.js +++ b/app/controllers/admin/service-node.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController, SiteError } = require('../../../lib/site-lib'); -class ServiceNodeAdminController extends SiteController { +class AdminServiceNodeController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -130,6 +130,6 @@ class ServiceNodeAdminController extends SiteController { module.exports = { logId: 'ctl:admin:service-node', index: 'adminServiceNode', - className: 'ServiceNodeAdminController', - create: async (dtp) => { return new ServiceNodeAdminController(dtp); }, + className: 'AdminServiceNodeController', + create: async (dtp) => { return new AdminServiceNodeController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/settings.js b/app/controllers/admin/settings.js index 4ceee53..09b0925 100644 --- a/app/controllers/admin/settings.js +++ b/app/controllers/admin/settings.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController } = require('../../../lib/site-lib'); -class SettingsAdminController extends SiteController { +class AdminSettingsController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -94,12 +94,11 @@ class SettingsAdminController extends SiteController { }); } } - } module.exports = { logId: 'ctl:admin:settings', index: 'adminSettings', - className: 'SettingsAdminController', - create: async (dtp) => { return new SettingsAdminController(dtp); }, + className: 'AdminSettingsController', + create: async (dtp) => { return new AdminSettingsController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/admin/user.js b/app/controllers/admin/user.js index 5020140..3545f43 100644 --- a/app/controllers/admin/user.js +++ b/app/controllers/admin/user.js @@ -8,7 +8,7 @@ const express = require('express'); const { SiteController, SiteError } = require('../../../lib/site-lib'); -class UserAdminController extends SiteController { +class AdminUserController extends SiteController { constructor (dtp) { super(dtp, module.exports); @@ -340,6 +340,6 @@ class UserAdminController extends SiteController { module.exports = { logId: 'ctl:admin:user', index: 'adminUser', - className: 'UserAdminController', - create: async (dtp) => { return new UserAdminController(dtp); }, + className: 'AdminUserController', + create: async (dtp) => { return new AdminUserController(dtp); }, }; \ No newline at end of file diff --git a/app/controllers/content-report.js b/app/controllers/content-report.js new file mode 100644 index 0000000..7f64d5e --- /dev/null +++ b/app/controllers/content-report.js @@ -0,0 +1,107 @@ +// content-report.js +// Copyright (C) 2021 Digital Telepresence, LLC +// License: Apache-2.0 + +'use strict'; + +const express = require('express'); +const multer = require('multer'); + +const { SiteController } = require('../../lib/site-lib'); + +class ContentReportController extends SiteController { + + constructor (dtp) { + super(dtp, module.exports); + } + + async start ( ) { + const { dtp } = this; + const { limiter: limiterService, session: sessionService } = dtp.services; + + const authRequired = sessionService.authCheckMiddleware({ requiredLogin: true }); + const upload = multer({ dest: `/tmp/${this.dtp.config.site.domainKey}/uploads` }); + + const router = express.Router(); + dtp.app.use('/content-report', router); + + router.use(async (req, res, next) => { + res.locals.currentView = 'content-report'; + return next(); + }); + + router.post('/comment/form', + limiterService.createMiddleware(limiterService.config.contentReport.postCommentReportForm), + authRequired, + upload.none(), + this.postCommentReportForm.bind(this), + ); + router.post('/comment', + limiterService.createMiddleware(limiterService.config.contentReport.postCommentReport), + authRequired, + upload.none(), + this.postCommentReport.bind(this), + ); + } + + async postCommentReportForm (req, res, next) { + const { comment: commentService } = this.dtp.services; + try { + res.locals.comment = await commentService.getById(req.body.commentId); + res.locals.params = req.body; + res.render('comment/components/report-form'); + } catch (error) { + return next(error); + } + } + + async postCommentReport (req, res) { + const { + contentReport: contentReportService, + comment: commentService, + user: userService, + } = this.dtp.services; + + const displayList = this.createDisplayList('add-recipient'); + + try { + res.locals.report = await contentReportService.create(req.user, { + resourceType: 'Comment', + resourceId: req.body.commentId, + category: req.body.category, + reason: req.body.reason, + }); + displayList.showNotification('Comment reported successfully', 'success', 'bottom-center', 5000); + + if (req.body.blockAuthor === 'on') { + const comment = await commentService.getById(req.body.commentId); + await userService.blockUser(req.user._id, comment.author._id || comment.author); + displayList.showNotification('Comment author blocked successfully', 'success', 'bottom-center', 5000); + } + + res.status(200).json({ success: true, displayList }); + } catch (error) { + this.log.error('failed to post comment report', { error }); + if (error.code === 11000) { + displayList.showNotification( + 'You already reported this comment', + 'primary', + 'bottom-center', + 5000, + ); + return res.status(200).json({ success: true, displayList }); + } + return res.status(error.statusCode || 500).json({ + success: false, + message: error.message, + }); + } + } +} + +module.exports = { + logId: 'svc:content-report', + index: 'contentReport', + className: 'ContentReportController', + create: async (dtp) => { return new ContentReportController(dtp); }, +}; \ No newline at end of file