From e281dc92e31b3a4d41fc868e4d18a318982969ce Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Mon, 3 Feb 2025 10:08:39 -0500 Subject: [PATCH] dev: add mail module --- src/backend/src/modules/mail/MailModule.js | 14 +++++ .../src/modules/mail/UserSendMailService.js | 53 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/backend/src/modules/mail/MailModule.js create mode 100644 src/backend/src/modules/mail/UserSendMailService.js diff --git a/src/backend/src/modules/mail/MailModule.js b/src/backend/src/modules/mail/MailModule.js new file mode 100644 index 000000000..87142fc29 --- /dev/null +++ b/src/backend/src/modules/mail/MailModule.js @@ -0,0 +1,14 @@ +const { AdvancedBase } = require("@heyputer/putility"); + +class MailModule extends AdvancedBase { + async install (context) { + const services = context.get('services'); + + const { UserSendMailService } = require('./UserSendMailService'); + services.registerService('user-send-mail', UserSendMailService); + } +} + +module.exports = { + MailModule, +}; diff --git a/src/backend/src/modules/mail/UserSendMailService.js b/src/backend/src/modules/mail/UserSendMailService.js new file mode 100644 index 000000000..89eca6b33 --- /dev/null +++ b/src/backend/src/modules/mail/UserSendMailService.js @@ -0,0 +1,53 @@ +const BaseService = require("../../services/BaseService"); + +class UserSendMailService extends BaseService { + async ['__on_driver.register.interfaces'] () { + const svc_registry = this.services.get('registry'); + const col_interfaces = svc_registry.get('interfaces'); + + col_interfaces.set('puter-send-mail', { + description: 'Send an email.', + methods: { + send: { + description: 'Recognize text in an image or document.', + parameters: { + to: { + type: 'string', + }, + subject: { + type: 'string', + }, + html: { + type: 'string', + }, + }, + result: { type: 'json' }, + }, + } + }); + } + static IMPLEMENTS = { + 'puter-send-mail': { + async send ({ to, subject, html }) { + const actor = this.context.get('actor'); + const svc_email = this.services.get('email'); + + if ( ! actor.type.user ) { + throw new Error('Only users can send email.'); + } + const user = actor.type.user; + + const transporter = svc_email.get_transport_(); + const o = { + from: `${user.username}@${this.config.domain}`, // sender address + to, subject, html, + }; + await transporter.sendMail(o); + } + } + } +} + +module.exports = { + UserSendMailService, +};