feat: Implement smtp connection
This commit is contained in:
210
packages/backend/src/apps/smtp/auth/index.ts
Normal file
210
packages/backend/src/apps/smtp/auth/index.ts
Normal file
@@ -0,0 +1,210 @@
|
||||
import verifyCredentials from './verify-credentials';
|
||||
import isStillVerified from './is-still-verified';
|
||||
|
||||
export default {
|
||||
fields: [
|
||||
{
|
||||
key: 'host',
|
||||
label: 'Host',
|
||||
type: 'string',
|
||||
required: true,
|
||||
readOnly: false,
|
||||
value: null,
|
||||
placeholder: null,
|
||||
description: 'The host information Automatisch will connect to.',
|
||||
docUrl: 'https://automatisch.io/docs/smtp#host',
|
||||
clickToCopy: false,
|
||||
},
|
||||
{
|
||||
key: 'username',
|
||||
label: 'Email/Username',
|
||||
type: 'string',
|
||||
required: true,
|
||||
readOnly: false,
|
||||
value: null,
|
||||
placeholder: null,
|
||||
description: 'Your SMTP login credentials.',
|
||||
docUrl: 'https://automatisch.io/docs/smtp#username',
|
||||
clickToCopy: false,
|
||||
},
|
||||
{
|
||||
key: 'password',
|
||||
label: 'Password',
|
||||
type: 'string',
|
||||
required: true,
|
||||
readOnly: false,
|
||||
value: null,
|
||||
placeholder: null,
|
||||
description: null,
|
||||
docUrl: 'https://automatisch.io/docs/smtp#password',
|
||||
clickToCopy: false,
|
||||
},
|
||||
{
|
||||
key: 'useTls',
|
||||
label: 'Use TLS?',
|
||||
type: 'dropdown',
|
||||
required: false,
|
||||
readOnly: false,
|
||||
value: false,
|
||||
placeholder: null,
|
||||
description: null,
|
||||
docUrl: 'https://automatisch.io/docs/smtp#use-tls',
|
||||
clickToCopy: false,
|
||||
options: [
|
||||
{
|
||||
label: 'Yes',
|
||||
value: true,
|
||||
},
|
||||
{
|
||||
label: 'No',
|
||||
value: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'port',
|
||||
label: 'Port',
|
||||
type: 'integer',
|
||||
required: false,
|
||||
readOnly: false,
|
||||
value: 25,
|
||||
placeholder: null,
|
||||
description: null,
|
||||
docUrl: 'https://automatisch.io/docs/smtp#port',
|
||||
clickToCopy: false,
|
||||
},
|
||||
{
|
||||
key: 'fromEmail',
|
||||
label: 'From Email',
|
||||
type: 'string',
|
||||
required: false,
|
||||
readOnly: false,
|
||||
value: null,
|
||||
placeholder: null,
|
||||
description: null,
|
||||
docUrl: 'https://automatisch.io/docs/smtp#from-email',
|
||||
clickToCopy: false,
|
||||
},
|
||||
],
|
||||
authenticationSteps: [
|
||||
{
|
||||
step: 1,
|
||||
type: 'mutation',
|
||||
name: 'createConnection',
|
||||
fields: [
|
||||
{
|
||||
name: 'key',
|
||||
value: '{key}',
|
||||
},
|
||||
{
|
||||
name: 'data',
|
||||
value: null,
|
||||
fields: [
|
||||
{
|
||||
name: 'host',
|
||||
value: '{fields.host}',
|
||||
},
|
||||
{
|
||||
name: 'username',
|
||||
value: '{fields.username}',
|
||||
},
|
||||
{
|
||||
name: 'password',
|
||||
value: '{fields.password}',
|
||||
},
|
||||
{
|
||||
name: 'useTLS',
|
||||
value: '{fields.useTls}',
|
||||
},
|
||||
{
|
||||
name: 'port',
|
||||
value: '{fields.port}',
|
||||
},
|
||||
{
|
||||
name: 'fromEmail',
|
||||
value: '{fields.fromEmail}',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
step: 2,
|
||||
type: 'mutation',
|
||||
name: 'verifyConnection',
|
||||
fields: [
|
||||
{
|
||||
name: 'id',
|
||||
value: '{createConnection.id}',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
reconnectionSteps: [
|
||||
{
|
||||
step: 1,
|
||||
type: 'mutation',
|
||||
name: 'resetConnection',
|
||||
fields: [
|
||||
{
|
||||
name: 'id',
|
||||
value: '{connection.id}',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
step: 2,
|
||||
type: 'mutation',
|
||||
name: 'updateConnection',
|
||||
fields: [
|
||||
{
|
||||
name: 'id',
|
||||
value: '{connection.id}',
|
||||
},
|
||||
{
|
||||
name: 'data',
|
||||
value: null,
|
||||
fields: [
|
||||
{
|
||||
name: 'host',
|
||||
value: '{fields.host}',
|
||||
},
|
||||
{
|
||||
name: 'username',
|
||||
value: '{fields.username}',
|
||||
},
|
||||
{
|
||||
name: 'password',
|
||||
value: '{fields.password}',
|
||||
},
|
||||
{
|
||||
name: 'useTLS',
|
||||
value: '{fields.useTls}',
|
||||
},
|
||||
{
|
||||
name: 'port',
|
||||
value: '{fields.port}',
|
||||
},
|
||||
{
|
||||
name: 'fromEmail',
|
||||
value: '{fields.fromEmail}',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
step: 3,
|
||||
type: 'mutation',
|
||||
name: 'verifyConnection',
|
||||
fields: [
|
||||
{
|
||||
name: 'id',
|
||||
value: '{connection.id}',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
verifyCredentials,
|
||||
isStillVerified,
|
||||
};
|
13
packages/backend/src/apps/smtp/auth/is-still-verified.ts
Normal file
13
packages/backend/src/apps/smtp/auth/is-still-verified.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { IGlobalVariable } from '@automatisch/types';
|
||||
import verifyCredentials from './verify-credentials';
|
||||
|
||||
const isStillVerified = async ($: IGlobalVariable) => {
|
||||
try {
|
||||
await verifyCredentials($);
|
||||
return true;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
export default isStillVerified;
|
22
packages/backend/src/apps/smtp/auth/verify-credentials.ts
Normal file
22
packages/backend/src/apps/smtp/auth/verify-credentials.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { IGlobalVariable } from '@automatisch/types';
|
||||
import nodemailer, { TransportOptions } from 'nodemailer';
|
||||
|
||||
const verifyCredentials = async ($: IGlobalVariable) => {
|
||||
const client = nodemailer.createTransport({
|
||||
host: $.auth.data.host,
|
||||
port: $.auth.data.port,
|
||||
secure: $.auth.data.useTls,
|
||||
auth: {
|
||||
user: $.auth.data.username,
|
||||
pass: $.auth.data.password,
|
||||
},
|
||||
} as TransportOptions);
|
||||
|
||||
await client.verify();
|
||||
|
||||
await $.auth.set({
|
||||
screenName: $.auth.data.username,
|
||||
});
|
||||
};
|
||||
|
||||
export default verifyCredentials;
|
Reference in New Issue
Block a user