Exploring the interface of a mail adapter
Add some tests and demonstrate the adapter loading interface
This commit is contained in:
committed by
Florent Vilmart
parent
d9f1e00345
commit
8dc37b9d30
77
src/index.js
77
src/index.js
@@ -11,32 +11,34 @@ var batch = require('./batch'),
|
||||
Parse = require('parse/node').Parse;
|
||||
|
||||
import cache from './cache';
|
||||
import PromiseRouter from './PromiseRouter';
|
||||
import { GridStoreAdapter } from './Adapters/Files/GridStoreAdapter';
|
||||
import { S3Adapter } from './Adapters/Files/S3Adapter';
|
||||
import { FilesController } from './Controllers/FilesController';
|
||||
|
||||
import ParsePushAdapter from './Adapters/Push/ParsePushAdapter';
|
||||
import { PushController } from './Controllers/PushController';
|
||||
|
||||
import { ClassesRouter } from './Routers/ClassesRouter';
|
||||
import { InstallationsRouter } from './Routers/InstallationsRouter';
|
||||
import { UsersRouter } from './Routers/UsersRouter';
|
||||
import { SessionsRouter } from './Routers/SessionsRouter';
|
||||
import { RolesRouter } from './Routers/RolesRouter';
|
||||
//import passwordReset from './passwordReset';
|
||||
import PromiseRouter from './PromiseRouter';
|
||||
import verifyEmail from './verifyEmail';
|
||||
import loadAdapter from './Adapters/loadAdapter';
|
||||
import { AnalyticsRouter } from './Routers/AnalyticsRouter';
|
||||
import { FunctionsRouter } from './Routers/FunctionsRouter';
|
||||
import { SchemasRouter } from './Routers/SchemasRouter';
|
||||
import { IAPValidationRouter } from './Routers/IAPValidationRouter';
|
||||
import { PushRouter } from './Routers/PushRouter';
|
||||
import { ClassesRouter } from './Routers/ClassesRouter';
|
||||
import { FileLoggerAdapter } from './Adapters/Logger/FileLoggerAdapter';
|
||||
import { FilesController } from './Controllers/FilesController';
|
||||
import { FilesRouter } from './Routers/FilesRouter';
|
||||
import { FunctionsRouter } from './Routers/FunctionsRouter';
|
||||
import { GridStoreAdapter } from './Adapters/Files/GridStoreAdapter';
|
||||
import { IAPValidationRouter } from './Routers/IAPValidationRouter';
|
||||
import { LogsRouter } from './Routers/LogsRouter';
|
||||
import { HooksRouter } from './Routers/HooksRouter';
|
||||
|
||||
import { loadAdapter } from './Adapters/AdapterLoader';
|
||||
import { FileLoggerAdapter } from './Adapters/Logger/FileLoggerAdapter';
|
||||
import { LoggerController } from './Controllers/LoggerController';
|
||||
import { HooksController } from './Controllers/HooksController';
|
||||
import { InstallationsRouter } from './Routers/InstallationsRouter';
|
||||
import { AdapterLoader } from './Adapters/AdapterLoader';
|
||||
import { LoggerController } from './Controllers/LoggerController';
|
||||
import { PushController } from './Controllers/PushController';
|
||||
import { PushRouter } from './Routers/PushRouter';
|
||||
import { RolesRouter } from './Routers/RolesRouter';
|
||||
import { S3Adapter } from './Adapters/Files/S3Adapter';
|
||||
import { SchemasRouter } from './Routers/SchemasRouter';
|
||||
import { SessionsRouter } from './Routers/SessionsRouter';
|
||||
import { UsersRouter } from './Routers/UsersRouter';
|
||||
|
||||
import requiredParameter from './requiredParameter';
|
||||
import { randomString } from './cryptoUtils';
|
||||
@@ -69,9 +71,24 @@ addParseCloud();
|
||||
// "javascriptKey": optional key from Parse dashboard
|
||||
// "push": optional key from configure push
|
||||
|
||||
let validateEmailConfiguration = (verifyUserEmails, appName, emailAdapter) => {
|
||||
if (verifyUserEmails) {
|
||||
if (typeof appName !== 'string') {
|
||||
throw 'An app name is required when using email verification.';
|
||||
}
|
||||
if (!emailAdapter) {
|
||||
throw 'User email verification was enabled, but no email adapter was provided';
|
||||
}
|
||||
if (typeof emailAdapter.sendVerificationEmail !== 'function') {
|
||||
throw 'Invalid email adapter: no sendVerificationEmail() function was provided';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ParseServer({
|
||||
appId = requiredParameter('You must provide an appId!'),
|
||||
masterKey = requiredParameter('You must provide a masterKey!'),
|
||||
appName,
|
||||
databaseAdapter,
|
||||
filesAdapter,
|
||||
push,
|
||||
@@ -89,7 +106,9 @@ function ParseServer({
|
||||
allowClientClassCreation = true,
|
||||
oauth = {},
|
||||
serverURL = requiredParameter('You must provide a serverURL!'),
|
||||
maxUploadSize = '20mb'
|
||||
maxUploadSize = '20mb',
|
||||
verifyUserEmails = false,
|
||||
emailAdapter,
|
||||
}) {
|
||||
|
||||
// Initialize the node client SDK automatically
|
||||
@@ -141,10 +160,18 @@ function ParseServer({
|
||||
hooksController: hooksController,
|
||||
enableAnonymousUsers: enableAnonymousUsers,
|
||||
allowClientClassCreation: allowClientClassCreation,
|
||||
oauth: oauth
|
||||
oauth: oauth,
|
||||
appName: appName,
|
||||
});
|
||||
|
||||
// To maintain compatibility. TODO: Remove in v2.1
|
||||
if (verifyUserEmails && process.env.PARSE_EXPERIMENTAL_EMAIL_VERIFICATION_ENABLED || process.env.TESTING == 1) {
|
||||
emailAdapter = loadAdapter(emailAdapter);
|
||||
validateEmailConfiguration(verifyUserEmails, appName, emailAdapter);
|
||||
cache.apps[appId].verifyUserEmails = verifyUserEmails;
|
||||
cache.apps[appId].emailAdapter = emailAdapter;
|
||||
}
|
||||
|
||||
// To maintain compatibility. TODO: Remove in some version that breaks backwards compatability
|
||||
if (process.env.FACEBOOK_APP_ID) {
|
||||
cache.apps.get(appId)['facebookAppIds'].push(process.env.FACEBOOK_APP_ID);
|
||||
}
|
||||
@@ -158,6 +185,12 @@ function ParseServer({
|
||||
maxUploadSize: maxUploadSize
|
||||
}));
|
||||
|
||||
if (process.env.PARSE_EXPERIMENTAL_EMAIL_VERIFICATION_ENABLED || process.env.TESTING == 1) {
|
||||
//api.use('/request_password_reset', passwordReset.reset(appName, appId));
|
||||
//api.get('/password_reset_success', passwordReset.success);
|
||||
api.get('/verify_email', verifyEmail(appId, serverURL));
|
||||
}
|
||||
|
||||
// TODO: separate this from the regular ParseServer object
|
||||
if (process.env.TESTING == 1) {
|
||||
api.use('/', require('./testing-routes').router);
|
||||
@@ -222,5 +255,5 @@ function addParseCloud() {
|
||||
|
||||
module.exports = {
|
||||
ParseServer: ParseServer,
|
||||
S3Adapter: S3Adapter
|
||||
S3Adapter: S3Adapter,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user