mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-10-03 09:54:54 +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: require('imap'),
|
||||
IMAPConnection: require('./src/imap-connection'),
|
||||
IMAPErrors: require('./src/imap-errors'),
|
||||
loadModels: require('./src/load-models'),
|
||||
AuthHelpers: require('./src/auth-helpers'),
|
||||
PromiseUtils: require('./src/promise-utils'),
|
||||
DatabaseTypes: require('./src/database-types'),
|
||||
loadModels: require('./src/load-models'),
|
||||
IMAPConnection: require('./src/imap-connection'),
|
||||
DeltaStreamBuilder: require('./src/delta-stream-builder'),
|
||||
HookTransactionLog: require('./src/hook-transaction-log'),
|
||||
HookIncrementVersionOnSave: require('./src/hook-increment-version-on-save'),
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"imap": "0.8.18",
|
||||
"joi": "8.4.2",
|
||||
"promise-props": "1.0.0",
|
||||
"promise.prototype.finally": "1.0.1",
|
||||
"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 Serialization = require('../serialization');
|
||||
const {
|
||||
IMAPConnection,
|
||||
IMAPErrors,
|
||||
AuthHelpers,
|
||||
IMAPConnection,
|
||||
} = require('isomorphic-core');
|
||||
const DefaultSyncPolicy = require('../default-sync-policy')
|
||||
const LocalDatabaseConnector = require('../../shared/local-database-connector')
|
||||
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}) => {
|
||||
return LocalDatabaseConnector.forShared().then((db) => {
|
||||
const {AccountToken, Account} = db;
|
||||
|
@ -69,26 +48,7 @@ module.exports = (server) => {
|
|||
server.route({
|
||||
method: 'POST',
|
||||
path: '/auth',
|
||||
config: {
|
||||
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')
|
||||
),
|
||||
},
|
||||
},
|
||||
config: AuthHelpers.authPostConfig(),
|
||||
handler: (request, reply) => {
|
||||
const dbStub = {};
|
||||
const connectionChecks = [];
|
||||
|
|
Loading…
Add table
Reference in a new issue