Report Server Version so Dashboard can consume it
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
var request = require('request');
|
var request = require('request');
|
||||||
|
var parseServerPackage = require('../package.json');
|
||||||
var MockEmailAdapterWithOptions = require('./MockEmailAdapterWithOptions');
|
var MockEmailAdapterWithOptions = require('./MockEmailAdapterWithOptions');
|
||||||
|
|
||||||
describe('server', () => {
|
describe('server', () => {
|
||||||
@@ -153,4 +154,18 @@ describe('server', () => {
|
|||||||
})).toThrow('SimpleMailgunAdapter requires an API Key and domain.');
|
})).toThrow('SimpleMailgunAdapter requires an API Key and domain.');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('can report the server version', done => {
|
||||||
|
request.get({
|
||||||
|
url: 'http://localhost:8378/1/features',
|
||||||
|
headers: {
|
||||||
|
'X-Parse-Application-Id': 'test',
|
||||||
|
'X-Parse-Master-Key': 'test',
|
||||||
|
},
|
||||||
|
json: true,
|
||||||
|
}, (error, response, body) => {
|
||||||
|
expect(body.serverVersion).toEqual(parseServerPackage.version);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ let features = {
|
|||||||
|
|
||||||
// master switch for features
|
// master switch for features
|
||||||
let featuresSwitch = {
|
let featuresSwitch = {
|
||||||
|
serverVersion: true,
|
||||||
globalConfig: true,
|
globalConfig: true,
|
||||||
hooks: true,
|
hooks: true,
|
||||||
logs: true,
|
logs: true,
|
||||||
|
|||||||
38
src/index.js
38
src/index.js
@@ -10,12 +10,13 @@ var batch = require('./batch'),
|
|||||||
multer = require('multer'),
|
multer = require('multer'),
|
||||||
Parse = require('parse/node').Parse;
|
Parse = require('parse/node').Parse;
|
||||||
|
|
||||||
|
//import passwordReset from './passwordReset';
|
||||||
import cache from './cache';
|
import cache from './cache';
|
||||||
import Config from './Config';
|
import Config from './Config';
|
||||||
|
import parseServerPackage from '../package.json';
|
||||||
import ParsePushAdapter from './Adapters/Push/ParsePushAdapter';
|
import ParsePushAdapter from './Adapters/Push/ParsePushAdapter';
|
||||||
//import passwordReset from './passwordReset';
|
|
||||||
import PromiseRouter from './PromiseRouter';
|
import PromiseRouter from './PromiseRouter';
|
||||||
|
import requiredParameter from './requiredParameter';
|
||||||
import { AnalyticsRouter } from './Routers/AnalyticsRouter';
|
import { AnalyticsRouter } from './Routers/AnalyticsRouter';
|
||||||
import { ClassesRouter } from './Routers/ClassesRouter';
|
import { ClassesRouter } from './Routers/ClassesRouter';
|
||||||
import { FeaturesRouter } from './Routers/FeaturesRouter';
|
import { FeaturesRouter } from './Routers/FeaturesRouter';
|
||||||
@@ -23,28 +24,27 @@ import { FileLoggerAdapter } from './Adapters/Logger/FileLoggerAdapter';
|
|||||||
import { FilesController } from './Controllers/FilesController';
|
import { FilesController } from './Controllers/FilesController';
|
||||||
import { FilesRouter } from './Routers/FilesRouter';
|
import { FilesRouter } from './Routers/FilesRouter';
|
||||||
import { FunctionsRouter } from './Routers/FunctionsRouter';
|
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 { PublicAPIRouter } from './Routers/PublicAPIRouter';
|
|
||||||
import { GlobalConfigRouter } from './Routers/GlobalConfigRouter';
|
import { GlobalConfigRouter } from './Routers/GlobalConfigRouter';
|
||||||
|
import { GridStoreAdapter } from './Adapters/Files/GridStoreAdapter';
|
||||||
import { HooksController } from './Controllers/HooksController';
|
import { HooksController } from './Controllers/HooksController';
|
||||||
import { UserController } from './Controllers/UserController';
|
import { HooksRouter } from './Routers/HooksRouter';
|
||||||
|
import { IAPValidationRouter } from './Routers/IAPValidationRouter';
|
||||||
import { InstallationsRouter } from './Routers/InstallationsRouter';
|
import { InstallationsRouter } from './Routers/InstallationsRouter';
|
||||||
import { loadAdapter } from './Adapters/AdapterLoader';
|
import { loadAdapter } from './Adapters/AdapterLoader';
|
||||||
import { LoggerController } from './Controllers/LoggerController';
|
import { LoggerController } from './Controllers/LoggerController';
|
||||||
|
import { LogsRouter } from './Routers/LogsRouter';
|
||||||
|
import { PublicAPIRouter } from './Routers/PublicAPIRouter';
|
||||||
import { PushController } from './Controllers/PushController';
|
import { PushController } from './Controllers/PushController';
|
||||||
import { PushRouter } from './Routers/PushRouter';
|
import { PushRouter } from './Routers/PushRouter';
|
||||||
|
import { randomString } from './cryptoUtils';
|
||||||
import { RolesRouter } from './Routers/RolesRouter';
|
import { RolesRouter } from './Routers/RolesRouter';
|
||||||
import { S3Adapter } from './Adapters/Files/S3Adapter';
|
import { S3Adapter } from './Adapters/Files/S3Adapter';
|
||||||
import { SchemasRouter } from './Routers/SchemasRouter';
|
import { SchemasRouter } from './Routers/SchemasRouter';
|
||||||
import { SessionsRouter } from './Routers/SessionsRouter';
|
import { SessionsRouter } from './Routers/SessionsRouter';
|
||||||
|
import { setFeature } from './features';
|
||||||
|
import { UserController } from './Controllers/UserController';
|
||||||
import { UsersRouter } from './Routers/UsersRouter';
|
import { UsersRouter } from './Routers/UsersRouter';
|
||||||
|
|
||||||
import requiredParameter from './requiredParameter';
|
|
||||||
import { randomString } from './cryptoUtils';
|
|
||||||
// Mutate the Parse object to add the Cloud Code handlers
|
// Mutate the Parse object to add the Cloud Code handlers
|
||||||
addParseCloud();
|
addParseCloud();
|
||||||
|
|
||||||
@@ -106,11 +106,11 @@ function ParseServer({
|
|||||||
passwordResetSuccess: undefined
|
passwordResetSuccess: undefined
|
||||||
},
|
},
|
||||||
}) {
|
}) {
|
||||||
|
setFeature('serverVersion', parseServerPackage.version);
|
||||||
// Initialize the node client SDK automatically
|
// Initialize the node client SDK automatically
|
||||||
Parse.initialize(appId, javascriptKey || 'unused', masterKey);
|
Parse.initialize(appId, javascriptKey || 'unused', masterKey);
|
||||||
Parse.serverURL = serverURL;
|
Parse.serverURL = serverURL;
|
||||||
|
|
||||||
if (databaseAdapter) {
|
if (databaseAdapter) {
|
||||||
DatabaseAdapter.setAdapter(databaseAdapter);
|
DatabaseAdapter.setAdapter(databaseAdapter);
|
||||||
}
|
}
|
||||||
@@ -144,7 +144,7 @@ function ParseServer({
|
|||||||
const hooksController = new HooksController(appId, collectionPrefix);
|
const hooksController = new HooksController(appId, collectionPrefix);
|
||||||
const userController = new UserController(emailControllerAdapter, appId, { verifyUserEmails });
|
const userController = new UserController(emailControllerAdapter, appId, { verifyUserEmails });
|
||||||
|
|
||||||
|
|
||||||
cache.apps.set(appId, {
|
cache.apps.set(appId, {
|
||||||
masterKey: masterKey,
|
masterKey: masterKey,
|
||||||
serverURL: serverURL,
|
serverURL: serverURL,
|
||||||
@@ -173,7 +173,7 @@ function ParseServer({
|
|||||||
if (process.env.FACEBOOK_APP_ID) {
|
if (process.env.FACEBOOK_APP_ID) {
|
||||||
cache.apps.get(appId)['facebookAppIds'].push(process.env.FACEBOOK_APP_ID);
|
cache.apps.get(appId)['facebookAppIds'].push(process.env.FACEBOOK_APP_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
Config.validate(cache.apps.get(appId));
|
Config.validate(cache.apps.get(appId));
|
||||||
|
|
||||||
// This app serves the Parse API directly.
|
// This app serves the Parse API directly.
|
||||||
@@ -186,7 +186,7 @@ function ParseServer({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
api.use('/', bodyParser.urlencoded({extended: false}), new PublicAPIRouter().expressApp());
|
api.use('/', bodyParser.urlencoded({extended: false}), new PublicAPIRouter().expressApp());
|
||||||
|
|
||||||
// TODO: separate this from the regular ParseServer object
|
// TODO: separate this from the regular ParseServer object
|
||||||
if (process.env.TESTING == 1) {
|
if (process.env.TESTING == 1) {
|
||||||
api.use('/', require('./testing-routes').router);
|
api.use('/', require('./testing-routes').router);
|
||||||
@@ -215,17 +215,17 @@ function ParseServer({
|
|||||||
if (process.env.PARSE_EXPERIMENTAL_CONFIG_ENABLED || process.env.TESTING) {
|
if (process.env.PARSE_EXPERIMENTAL_CONFIG_ENABLED || process.env.TESTING) {
|
||||||
routers.push(new GlobalConfigRouter());
|
routers.push(new GlobalConfigRouter());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.env.PARSE_EXPERIMENTAL_HOOKS_ENABLED || process.env.TESTING) {
|
if (process.env.PARSE_EXPERIMENTAL_HOOKS_ENABLED || process.env.TESTING) {
|
||||||
routers.push(new HooksRouter());
|
routers.push(new HooksRouter());
|
||||||
}
|
}
|
||||||
|
|
||||||
let routes = routers.reduce((memo, router) => {
|
let routes = routers.reduce((memo, router) => {
|
||||||
return memo.concat(router.routes);
|
return memo.concat(router.routes);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
let appRouter = new PromiseRouter(routes);
|
let appRouter = new PromiseRouter(routes);
|
||||||
|
|
||||||
batch.mountOnto(appRouter);
|
batch.mountOnto(appRouter);
|
||||||
|
|
||||||
api.use(appRouter.expressApp());
|
api.use(appRouter.expressApp());
|
||||||
|
|||||||
Reference in New Issue
Block a user