New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@bettercorp/service-base-plugin-smtp-server

Package Overview
Dependencies
Maintainers
2
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bettercorp/service-base-plugin-smtp-server - npm Package Compare versions

Comparing version 1.0.20211016193422 to 2.0.20220128233959

26

lib/plugins/smtp-server/plugin.d.ts

@@ -1,2 +0,2 @@

import { CPlugin, CPluginClient } from '@bettercorp/service-base/lib/ILib';
import { CPlugin, CPluginClient } from '@bettercorp/service-base/lib/interfaces/plugins';
import { ISMTPServerConfig } from './config';

@@ -20,10 +20,18 @@ export interface ISMTPServerOnAuthRequest extends ISMTPServerOnRequest {

readonly _pluginName: string;
onError(listener: (err: any) => void): void;
onAuth(listener: (resolve: PromiseResolve<any, void>, reject: PromiseResolve<any, void>, request: ISMTPServerOnAuthRequest) => void): void;
onConnect(listener: (resolve: PromiseResolve<any, void>, reject: PromiseResolve<any, void>, request: ISMTPServerOnRequest) => void): void;
onClose(listener: (request: ISMTPServerOnRequest) => void): void;
onEmail(listener: (request: ISMTPServerOnMailRequest) => void): void;
onEmailSpecific(emailAddress: string, listener: (request: ISMTPServerOnMailRequest) => void): void;
onMailFrom(listener: (resolve: PromiseResolve<any, void>, reject: PromiseResolve<any, void>, request: ISMTPServerOnMailFromRequest) => void): void;
onRcptTo(listener: (resolve: PromiseResolve<any, void>, reject: PromiseResolve<any, void>, request: ISMTPServerOnMailFromRequest) => void): void;
onError(listener: (err: any) => void): Promise<void>;
onAuth(listener: {
(request?: ISMTPServerOnAuthRequest): Promise<void>;
}): Promise<void>;
onConnect(listener: {
(request?: ISMTPServerOnRequest): Promise<void>;
}): Promise<void>;
onClose(listener: (request: ISMTPServerOnRequest) => void): Promise<void>;
onEmail(listener: (request: ISMTPServerOnMailRequest) => void): Promise<void>;
onEmailSpecific(emailAddress: string, listener: (request: ISMTPServerOnMailRequest) => void): Promise<void>;
onMailFrom(listener: {
(request?: ISMTPServerOnMailFromRequest): Promise<void>;
}): Promise<void>;
onRcptTo(listener: {
(request?: ISMTPServerOnMailFromRequest): Promise<void>;
}): Promise<void>;
}

@@ -30,0 +38,0 @@ export declare class Plugin extends CPlugin<ISMTPServerConfig> {

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Plugin = exports.smtpServer = void 0;
const ILib_1 = require("@bettercorp/service-base/lib/ILib");
const plugins_1 = require("@bettercorp/service-base/lib/interfaces/plugins");
const config_1 = require("./config");

@@ -18,3 +9,3 @@ const SMTPServer = require("smtp-server").SMTPServer;

const SPF = require('spf-check');
class smtpServer extends ILib_1.CPluginClient {
class smtpServer extends plugins_1.CPluginClient {
constructor() {

@@ -24,29 +15,29 @@ super(...arguments);

}
onError(listener) {
this.onEvent(config_1.ISMTPServerEvents.onError, listener);
async onError(listener) {
await this.onEvent(config_1.ISMTPServerEvents.onError, listener);
}
onAuth(listener) {
this.onReturnableEvent(config_1.ISMTPServerEvents.onAuth, listener);
async onAuth(listener) {
await this.onReturnableEvent(config_1.ISMTPServerEvents.onAuth, listener);
}
onConnect(listener) {
this.onReturnableEvent(config_1.ISMTPServerEvents.onConnect, listener);
async onConnect(listener) {
await this.onReturnableEvent(config_1.ISMTPServerEvents.onConnect, listener);
}
onClose(listener) {
this.onEvent(config_1.ISMTPServerEvents.onClose, listener);
async onClose(listener) {
await this.onEvent(config_1.ISMTPServerEvents.onClose, listener);
}
onEmail(listener) {
this.onEvent(config_1.ISMTPServerEvents.onEmail, listener);
async onEmail(listener) {
await this.onEvent(config_1.ISMTPServerEvents.onEmail, listener);
}
onEmailSpecific(emailAddress, listener) {
this.onEvent((0, config_1.getEmailSpecific)(emailAddress), listener);
async onEmailSpecific(emailAddress, listener) {
await this.onEvent((0, config_1.getEmailSpecific)(emailAddress), listener);
}
onMailFrom(listener) {
this.onReturnableEvent(config_1.ISMTPServerEvents.onMailFrom, listener);
async onMailFrom(listener) {
await this.onReturnableEvent(config_1.ISMTPServerEvents.onMailFrom, listener);
}
onRcptTo(listener) {
this.onReturnableEvent(config_1.ISMTPServerEvents.onRcptTo, listener);
async onRcptTo(listener) {
await this.onReturnableEvent(config_1.ISMTPServerEvents.onRcptTo, listener);
}
}
exports.smtpServer = smtpServer;
class Plugin extends ILib_1.CPlugin {
class Plugin extends plugins_1.CPlugin {
constructor() {

@@ -58,5 +49,5 @@ super(...arguments);

const self = this;
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
return new Promise(async (resolve) => {
let SMTP_SERVER = null;
SMTP_SERVER = new SMTPServer(Object.assign({ banner: (yield self.getPluginConfig()).banner || 'BetterCorp SMTP Server', onAuth: self.onAuth, onConnect: self.onConnect, onClose: self.onClose, onMailFrom: self.onMailFrom, onRcptTo: self.onRcptTo, onData: self.onData }, ((yield self.getPluginConfig()).serverOptions || {})));
SMTP_SERVER = new SMTPServer(Object.assign({ banner: (await self.getPluginConfig()).banner || 'BetterCorp SMTP Server', onAuth: self.onAuth, onConnect: self.onConnect, onClose: self.onClose, onMailFrom: self.onMailFrom, onRcptTo: self.onRcptTo, onData: self.onData }, ((await self.getPluginConfig()).serverOptions || {})));
SMTP_SERVER.on("error", (err) => {

@@ -66,6 +57,6 @@ self.log.info("Error %s", err.message);

});
SMTP_SERVER.listen((yield self.getPluginConfig()).port || 2525);
self.log.info(`Server started on port ${(yield self.getPluginConfig()).port || 2525}`);
SMTP_SERVER.listen((await self.getPluginConfig()).port || 2525);
self.log.info(`Server started on port ${(await self.getPluginConfig()).port || 2525}`);
resolve();
}));
});
}

@@ -88,96 +79,78 @@ CleanData(data) {

;
// TODO: Fix SPF Validation
SPFValidate(email, clientIp) {
return __awaiter(this, void 0, void 0, function* () {
/*return new Promise((resolve) => {
resolve({
result: SPF.Neutral
});
});*/
let cleanEmail = this.CleanData(email);
let emailData = cleanEmail.split('@');
return new SPF.SPF(emailData[1], cleanEmail, (yield this.getPluginConfig()).spfOptions || {}).check(clientIp);
});
async SPFValidate(email, clientIp) {
let cleanEmail = this.CleanData(email);
let emailData = cleanEmail.split('@');
return new SPF.SPF(emailData[1], cleanEmail, (await this.getPluginConfig()).spfOptions || {}).check(clientIp);
}
onAuth(auth, session, callback) {
return __awaiter(this, void 0, void 0, function* () {
this.log.info('Auth Request');
this.log.debug(auth);
if ((yield this.getPluginConfig()).events.onAuth === true) {
return this.emitEventAndReturn(null, config_1.ISMTPServerEvents.onAuth, {
auth: auth,
session: session
}).then(x => callback(null, x)).catch(x => callback(x || new Error('Unknown Error')));
}
return callback(new Error("Invalid username or password"));
});
async onAuth(auth, session, callback) {
this.log.info('Auth Request');
this.log.debug(auth);
if ((await this.getPluginConfig()).events.onAuth === true) {
return this.emitEventAndReturn(null, config_1.ISMTPServerEvents.onAuth, {
auth: auth,
session: session
}).then(x => callback(null, x)).catch(x => callback(x || new Error('Unknown Error')));
}
return callback(new Error("Invalid username or password"));
}
onConnect(session, callback) {
return __awaiter(this, void 0, void 0, function* () {
this.log.info(`Received SMTP request from ${session.remoteAddress}`);
if ((yield this.getPluginConfig()).events.onConnect === true) {
return this.emitEventAndReturn(null, config_1.ISMTPServerEvents.onConnect, {
session: session
}).then(x => callback()).catch(x => callback(x || new Error('Unknown Error')));
}
return callback();
});
async onConnect(session, callback) {
this.log.info(`Received SMTP request from ${session.remoteAddress}`);
if ((await this.getPluginConfig()).events.onConnect === true) {
return this.emitEventAndReturn(null, config_1.ISMTPServerEvents.onConnect, {
session: session
}).then(x => callback()).catch(x => callback(x || new Error('Unknown Error')));
}
return callback();
}
onClose(session) {
return __awaiter(this, void 0, void 0, function* () {
this.log.info(`Received SMTP request from ${session.remoteAddress} - CLOSED`);
if ((yield this.getPluginConfig()).events.onClose === true)
return this.emitEvent(null, config_1.ISMTPServerEvents.onClose, {
session: session
});
});
}
onMailFrom(address, session, callback) {
return __awaiter(this, void 0, void 0, function* () {
const self = this;
this.log.info(`Received SMTP request from ${session.remoteAddress} {FROM} ${address.address}`);
session._sender = address;
if ((yield this.getPluginConfig()).events.onMailFrom === true)
return this.emitEventAndReturn(null, config_1.ISMTPServerEvents.onMailFrom, {
address: address,
session: session
}).then(x => callback()).catch(x => callback(x || new Error('Unknown Error')));
return this.SPFValidate(address.address, session.remoteAddress).then(result => {
if (result.result === SPF.Pass || result.result === SPF.Neutral) {
self.log.info(`Received SMTP request from ${session.remoteAddress} {FROM} ${address.address} - SPF PASS: ${result.result}`);
return callback();
}
self.log.error(`Received SMTP request from ${session.remoteAddress} {FROM} ${address.address} - SPF FAILED: ${result.result}`);
return callback(new Error("Server error occured!"));
}).catch(x => {
self.log.error(`Received SMTP request from ${session.remoteAddress} {FROM} ${address.address} - SPF FAILED ERR`);
self.log.error(x);
return callback(new Error("Server error occured!"));
async onClose(session) {
this.log.info(`Received SMTP request from ${session.remoteAddress} - CLOSED`);
if ((await this.getPluginConfig()).events.onClose === true)
return this.emitEvent(null, config_1.ISMTPServerEvents.onClose, {
session: session
});
});
}
onRcptTo(address, session, callback) {
return __awaiter(this, void 0, void 0, function* () {
this.log.info(`Received SMTP request from ${session.remoteAddress} {TO} ${address.address}`);
session._receiver = address;
if ((yield this.getPluginConfig()).events.onRcptTo === true)
return this.emitEventAndReturn(null, config_1.ISMTPServerEvents.onRcptTo, {
address: address,
session: session
}).then(x => callback()).catch(x => callback(x || new Error('Unknown Error')));
//if (features.runningInDebug)
// return callback();
let cleanEmail = this.CleanData(address.address);
let emailData = cleanEmail.split('@');
for (let mailHost of ((yield this.getPluginConfig()) || {}).domains || []) {
let debugHost = emailData[1].toLowerCase();
this.log.debug(`Received SMTP request from ${session.remoteAddress} {TO} ${address.address} - [${debugHost}] ==? [${mailHost}]`);
if (mailHost === debugHost) {
return callback();
}
async onMailFrom(address, session, callback) {
const self = this;
this.log.info(`Received SMTP request from ${session.remoteAddress} {FROM} ${address.address}`);
session._sender = address;
if ((await this.getPluginConfig()).events.onMailFrom === true)
return this.emitEventAndReturn(null, config_1.ISMTPServerEvents.onMailFrom, {
address: address,
session: session
}).then(x => callback()).catch(x => callback(x || new Error('Unknown Error')));
return this.SPFValidate(address.address, session.remoteAddress).then(result => {
if (result.result === SPF.Pass || result.result === SPF.Neutral) {
self.log.info(`Received SMTP request from ${session.remoteAddress} {FROM} ${address.address} - SPF PASS: ${result.result}`);
return callback();
}
this.log.error(`Received SMTP request from ${session.remoteAddress} {TO} ${address.address} - DOMAIN NOT VALID`);
self.log.error(`Received SMTP request from ${session.remoteAddress} {FROM} ${address.address} - SPF FAILED: ${result.result}`);
return callback(new Error("Server error occured!"));
}).catch(x => {
self.log.error(`Received SMTP request from ${session.remoteAddress} {FROM} ${address.address} - SPF FAILED ERR`);
self.log.error(x);
return callback(new Error("Server error occured!"));
});
}
async onRcptTo(address, session, callback) {
this.log.info(`Received SMTP request from ${session.remoteAddress} {TO} ${address.address}`);
session._receiver = address;
if ((await this.getPluginConfig()).events.onRcptTo === true)
return this.emitEventAndReturn(null, config_1.ISMTPServerEvents.onRcptTo, {
address: address,
session: session
}).then(x => callback()).catch(x => callback(x || new Error('Unknown Error')));
//if (features.runningInDebug)
// return callback();
let cleanEmail = this.CleanData(address.address);
let emailData = cleanEmail.split('@');
for (let mailHost of ((await this.getPluginConfig()) || {}).domains || []) {
let debugHost = emailData[1].toLowerCase();
this.log.debug(`Received SMTP request from ${session.remoteAddress} {TO} ${address.address} - [${debugHost}] ==? [${mailHost}]`);
if (mailHost === debugHost) {
return callback();
}
}
this.log.error(`Received SMTP request from ${session.remoteAddress} {TO} ${address.address} - DOMAIN NOT VALID`);
return callback(new Error("Server error occured!"));
}
onData(stream, session, callback) {

@@ -191,3 +164,3 @@ if (session._quiet === true) {

let dataOkay = false;
this.streamToString(stream).then((x) => __awaiter(this, void 0, void 0, function* () {
this.streamToString(stream).then(async (x) => {
if (!dataOkay) {

@@ -220,3 +193,3 @@ return self.log.info(`Received SMTP request from ${session.remoteAddress} {BODY} - TOO LARGE, NO PASS`);

});
})).catch((err) => {
}).catch((err) => {
self.log.info(`Received SMTP request from ${session.remoteAddress} {BODY} - BODY FAILED TO PARSE`);

@@ -223,0 +196,0 @@ self.log.error(err);

@@ -1,1 +0,1 @@

{"name":"@bettercorp/service-base-plugin-smtp-server","license":"AGPL-3.0-only","repository":{"url":"https://gitlab.com/BetterCorp/public/service-base-plugin-smtp-server"},"scripts":{"build":"tsc","version":"node ./node_modules/@bettercorp/service-base/build/version.js $0","create":"ts-node node_modules/@bettercorp/service-base/lib/bootstrap.js $0"},"files":["lib/**/*"],"main":"lib/index.js","version":"1.0.20211016193422","dependencies":{"@bettercorp/service-base":"^6.0.20211016180933","@bettercorp/tools":"^1.1.20210611181403","@types/node":"^14.17.7","mailparser":"^3.4.0","smtp-server":"^3.9.0","spf-check":"^0.4.3"},"devDependencies":{"ts-node":"^10.3.0","tslint":"^6.1.3","typescript":"^4.4.4"},"bsb_project":true}
{"name":"@bettercorp/service-base-plugin-smtp-server","license":"AGPL-3.0-only","repository":{"url":"https://gitlab.com/BetterCorp/public/service-base-plugin-smtp-server"},"scripts":{"build":"tsc","dev":"nodemon --config node_modules/@bettercorp/service-base/build/nodemon.json","start":"ts-node node_modules/@bettercorp/service-base/lib/index.js","create":"ts-node node_modules/@bettercorp/service-base/lib/bootstrap.js $0","version":"node ./node_modules/@bettercorp/service-base/build/version-bcorp.js $0"},"files":["lib/**/*"],"main":"lib/index.js","version":"2.0.20220128233959","bsb_project":true,"devDependencies":{"eslint":"^8.8.0","ts-node":"^10.4.0","typescript":"^4.5.5"},"dependencies":{"@bettercorp/service-base":"^7.4.20220115132048","@bettercorp/tools":"^1.3.20220126151136","@types/node":"^17.0.13","mailparser":"^3.4.0","smtp-server":"^3.9.0","spf-check":"^0.4.3"}}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc