mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-10-10 13:17:05 +08:00
[isomorphic-core] extract AuthHelpers to DRY
This commit is contained in:
parent
7468e8123e
commit
896f981408
4 changed files with 48 additions and 45 deletions
|
@ -5,11 +5,12 @@ module.exports = {
|
||||||
IMAP: 'imap',
|
IMAP: 'imap',
|
||||||
},
|
},
|
||||||
Imap: require('imap'),
|
Imap: require('imap'),
|
||||||
IMAPConnection: require('./src/imap-connection'),
|
|
||||||
IMAPErrors: require('./src/imap-errors'),
|
IMAPErrors: require('./src/imap-errors'),
|
||||||
|
loadModels: require('./src/load-models'),
|
||||||
|
AuthHelpers: require('./src/auth-helpers'),
|
||||||
PromiseUtils: require('./src/promise-utils'),
|
PromiseUtils: require('./src/promise-utils'),
|
||||||
DatabaseTypes: require('./src/database-types'),
|
DatabaseTypes: require('./src/database-types'),
|
||||||
loadModels: require('./src/load-models'),
|
IMAPConnection: require('./src/imap-connection'),
|
||||||
DeltaStreamBuilder: require('./src/delta-stream-builder'),
|
DeltaStreamBuilder: require('./src/delta-stream-builder'),
|
||||||
HookTransactionLog: require('./src/hook-transaction-log'),
|
HookTransactionLog: require('./src/hook-transaction-log'),
|
||||||
HookIncrementVersionOnSave: require('./src/hook-increment-version-on-save'),
|
HookIncrementVersionOnSave: require('./src/hook-increment-version-on-save'),
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"imap": "0.8.18",
|
"imap": "0.8.18",
|
||||||
|
"joi": "8.4.2",
|
||||||
"promise-props": "1.0.0",
|
"promise-props": "1.0.0",
|
||||||
"promise.prototype.finally": "1.0.1",
|
"promise.prototype.finally": "1.0.1",
|
||||||
"rx": "4.1.0",
|
"rx": "4.1.0",
|
||||||
|
|
41
packages/isomorphic-core/src/auth-helpers.js
Normal file
41
packages/isomorphic-core/src/auth-helpers.js
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
const Joi = require('joi');
|
||||||
|
|
||||||
|
const imapSmtpSettings = Joi.object().keys({
|
||||||
|
imap_host: [Joi.string().ip().required(), Joi.string().hostname().required()],
|
||||||
|
imap_port: Joi.number().integer().required(),
|
||||||
|
imap_username: Joi.string().required(),
|
||||||
|
imap_password: Joi.string().required(),
|
||||||
|
smtp_host: [Joi.string().ip().required(), Joi.string().hostname().required()],
|
||||||
|
smtp_port: Joi.number().integer().required(),
|
||||||
|
smtp_username: Joi.string().required(),
|
||||||
|
smtp_password: Joi.string().required(),
|
||||||
|
ssl_required: Joi.boolean().required(),
|
||||||
|
}).required();
|
||||||
|
|
||||||
|
const resolvedGmailSettings = Joi.object().keys({
|
||||||
|
xoauth2: Joi.string().required(),
|
||||||
|
}).required();
|
||||||
|
|
||||||
|
const exchangeSettings = Joi.object().keys({
|
||||||
|
username: Joi.string().required(),
|
||||||
|
password: Joi.string().required(),
|
||||||
|
eas_server_host: [Joi.string().ip().required(), Joi.string().hostname().required()],
|
||||||
|
}).required();
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
authPostConfig() {
|
||||||
|
return {
|
||||||
|
description: 'Authenticates a new account.',
|
||||||
|
tags: ['accounts'],
|
||||||
|
auth: false,
|
||||||
|
validate: {
|
||||||
|
payload: {
|
||||||
|
email: Joi.string().email().required(),
|
||||||
|
name: Joi.string().required(),
|
||||||
|
provider: Joi.string().valid('imap', 'gmail').required(),
|
||||||
|
settings: Joi.alternatives().try(imapSmtpSettings, exchangeSettings, resolvedGmailSettings),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
|
@ -3,35 +3,14 @@ const _ = require('underscore');
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
const Serialization = require('../serialization');
|
const Serialization = require('../serialization');
|
||||||
const {
|
const {
|
||||||
IMAPConnection,
|
|
||||||
IMAPErrors,
|
IMAPErrors,
|
||||||
|
AuthHelpers,
|
||||||
|
IMAPConnection,
|
||||||
} = require('isomorphic-core');
|
} = require('isomorphic-core');
|
||||||
const DefaultSyncPolicy = require('../default-sync-policy')
|
const DefaultSyncPolicy = require('../default-sync-policy')
|
||||||
const LocalDatabaseConnector = require('../../shared/local-database-connector')
|
const LocalDatabaseConnector = require('../../shared/local-database-connector')
|
||||||
const SyncProcessManager = require('../../local-sync-worker/sync-process-manager')
|
const SyncProcessManager = require('../../local-sync-worker/sync-process-manager')
|
||||||
|
|
||||||
const imapSmtpSettings = Joi.object().keys({
|
|
||||||
imap_host: [Joi.string().ip().required(), Joi.string().hostname().required()],
|
|
||||||
imap_port: Joi.number().integer().required(),
|
|
||||||
imap_username: Joi.string().required(),
|
|
||||||
imap_password: Joi.string().required(),
|
|
||||||
smtp_host: [Joi.string().ip().required(), Joi.string().hostname().required()],
|
|
||||||
smtp_port: Joi.number().integer().required(),
|
|
||||||
smtp_username: Joi.string().required(),
|
|
||||||
smtp_password: Joi.string().required(),
|
|
||||||
ssl_required: Joi.boolean().required(),
|
|
||||||
}).required();
|
|
||||||
|
|
||||||
const resolvedGmailSettings = Joi.object().keys({
|
|
||||||
xoauth2: Joi.string().required(),
|
|
||||||
}).required();
|
|
||||||
|
|
||||||
const exchangeSettings = Joi.object().keys({
|
|
||||||
username: Joi.string().required(),
|
|
||||||
password: Joi.string().required(),
|
|
||||||
eas_server_host: [Joi.string().ip().required(), Joi.string().hostname().required()],
|
|
||||||
}).required();
|
|
||||||
|
|
||||||
const buildAccountWith = ({name, email, provider, settings, credentials}) => {
|
const buildAccountWith = ({name, email, provider, settings, credentials}) => {
|
||||||
return LocalDatabaseConnector.forShared().then((db) => {
|
return LocalDatabaseConnector.forShared().then((db) => {
|
||||||
const {AccountToken, Account} = db;
|
const {AccountToken, Account} = db;
|
||||||
|
@ -69,26 +48,7 @@ module.exports = (server) => {
|
||||||
server.route({
|
server.route({
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
path: '/auth',
|
path: '/auth',
|
||||||
config: {
|
config: AuthHelpers.authPostConfig(),
|
||||||
description: 'Authenticates a new account.',
|
|
||||||
notes: 'Notes go here',
|
|
||||||
tags: ['accounts'],
|
|
||||||
auth: false,
|
|
||||||
validate: {
|
|
||||||
payload: {
|
|
||||||
email: Joi.string().email().required(),
|
|
||||||
name: Joi.string().required(),
|
|
||||||
provider: Joi.string().valid('imap', 'gmail').required(),
|
|
||||||
settings: Joi.alternatives().try(imapSmtpSettings, exchangeSettings, resolvedGmailSettings),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
response: {
|
|
||||||
schema: Joi.alternatives().try(
|
|
||||||
Serialization.jsonSchema('Account'),
|
|
||||||
Serialization.jsonSchema('Error')
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
handler: (request, reply) => {
|
handler: (request, reply) => {
|
||||||
const dbStub = {};
|
const dbStub = {};
|
||||||
const connectionChecks = [];
|
const connectionChecks = [];
|
||||||
|
|
Loading…
Add table
Reference in a new issue