Skip to content

Commit 8151985

Browse files
committed
Report Server Version so Dashboard can consume it
1 parent 5219e0b commit 8151985

File tree

3 files changed

+35
-19
lines changed

3 files changed

+35
-19
lines changed

spec/index.spec.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
var request = require('request');
2+
var parseServerPackage = require('../package.json');
23
var MockEmailAdapterWithOptions = require('./MockEmailAdapterWithOptions');
34

45
describe('server', () => {
@@ -153,4 +154,18 @@ describe('server', () => {
153154
})).toThrow('SimpleMailgunAdapter requires an API Key and domain.');
154155
done();
155156
});
157+
158+
it('can report the server version', done => {
159+
request.get({
160+
url: 'http://localhost:8378/1/features',
161+
headers: {
162+
'X-Parse-Application-Id': 'test',
163+
'X-Parse-Master-Key': 'test',
164+
},
165+
json: true,
166+
}, (error, response, body) => {
167+
expect(body.serverVersion).toEqual(parseServerPackage.version);
168+
done();
169+
})
170+
});
156171
});

src/features.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ let features = {
5858

5959
// master switch for features
6060
let featuresSwitch = {
61+
serverVersion: true,
6162
globalConfig: true,
6263
hooks: true,
6364
logs: true,

src/index.js

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,41 +10,41 @@ var batch = require('./batch'),
1010
multer = require('multer'),
1111
Parse = require('parse/node').Parse;
1212

13+
//import passwordReset from './passwordReset';
1314
import cache from './cache';
1415
import Config from './Config';
15-
16+
import parseServerPackage from '../package.json';
1617
import ParsePushAdapter from './Adapters/Push/ParsePushAdapter';
17-
//import passwordReset from './passwordReset';
1818
import PromiseRouter from './PromiseRouter';
19+
import requiredParameter from './requiredParameter';
1920
import { AnalyticsRouter } from './Routers/AnalyticsRouter';
2021
import { ClassesRouter } from './Routers/ClassesRouter';
2122
import { FeaturesRouter } from './Routers/FeaturesRouter';
2223
import { FileLoggerAdapter } from './Adapters/Logger/FileLoggerAdapter';
2324
import { FilesController } from './Controllers/FilesController';
2425
import { FilesRouter } from './Routers/FilesRouter';
2526
import { FunctionsRouter } from './Routers/FunctionsRouter';
26-
import { GridStoreAdapter } from './Adapters/Files/GridStoreAdapter';
27-
import { IAPValidationRouter } from './Routers/IAPValidationRouter';
28-
import { LogsRouter } from './Routers/LogsRouter';
29-
import { HooksRouter } from './Routers/HooksRouter';
30-
import { PublicAPIRouter } from './Routers/PublicAPIRouter';
3127
import { GlobalConfigRouter } from './Routers/GlobalConfigRouter';
32-
28+
import { GridStoreAdapter } from './Adapters/Files/GridStoreAdapter';
3329
import { HooksController } from './Controllers/HooksController';
34-
import { UserController } from './Controllers/UserController';
30+
import { HooksRouter } from './Routers/HooksRouter';
31+
import { IAPValidationRouter } from './Routers/IAPValidationRouter';
3532
import { InstallationsRouter } from './Routers/InstallationsRouter';
3633
import { loadAdapter } from './Adapters/AdapterLoader';
3734
import { LoggerController } from './Controllers/LoggerController';
35+
import { LogsRouter } from './Routers/LogsRouter';
36+
import { PublicAPIRouter } from './Routers/PublicAPIRouter';
3837
import { PushController } from './Controllers/PushController';
3938
import { PushRouter } from './Routers/PushRouter';
39+
import { randomString } from './cryptoUtils';
4040
import { RolesRouter } from './Routers/RolesRouter';
4141
import { S3Adapter } from './Adapters/Files/S3Adapter';
4242
import { SchemasRouter } from './Routers/SchemasRouter';
4343
import { SessionsRouter } from './Routers/SessionsRouter';
44+
import { setFeature } from './features';
45+
import { UserController } from './Controllers/UserController';
4446
import { UsersRouter } from './Routers/UsersRouter';
4547

46-
import requiredParameter from './requiredParameter';
47-
import { randomString } from './cryptoUtils';
4848
// Mutate the Parse object to add the Cloud Code handlers
4949
addParseCloud();
5050

@@ -106,11 +106,11 @@ function ParseServer({
106106
passwordResetSuccess: undefined
107107
},
108108
}) {
109-
109+
setFeature('serverVersion', parseServerPackage.version);
110110
// Initialize the node client SDK automatically
111111
Parse.initialize(appId, javascriptKey || 'unused', masterKey);
112112
Parse.serverURL = serverURL;
113-
113+
114114
if (databaseAdapter) {
115115
DatabaseAdapter.setAdapter(databaseAdapter);
116116
}
@@ -144,7 +144,7 @@ function ParseServer({
144144
const hooksController = new HooksController(appId, collectionPrefix);
145145
const userController = new UserController(emailControllerAdapter, appId, { verifyUserEmails });
146146

147-
147+
148148
cache.apps.set(appId, {
149149
masterKey: masterKey,
150150
serverURL: serverURL,
@@ -173,7 +173,7 @@ function ParseServer({
173173
if (process.env.FACEBOOK_APP_ID) {
174174
cache.apps.get(appId)['facebookAppIds'].push(process.env.FACEBOOK_APP_ID);
175175
}
176-
176+
177177
Config.validate(cache.apps.get(appId));
178178

179179
// This app serves the Parse API directly.
@@ -186,7 +186,7 @@ function ParseServer({
186186
}));
187187

188188
api.use('/', bodyParser.urlencoded({extended: false}), new PublicAPIRouter().expressApp());
189-
189+
190190
// TODO: separate this from the regular ParseServer object
191191
if (process.env.TESTING == 1) {
192192
api.use('/', require('./testing-routes').router);
@@ -215,17 +215,17 @@ function ParseServer({
215215
if (process.env.PARSE_EXPERIMENTAL_CONFIG_ENABLED || process.env.TESTING) {
216216
routers.push(new GlobalConfigRouter());
217217
}
218-
218+
219219
if (process.env.PARSE_EXPERIMENTAL_HOOKS_ENABLED || process.env.TESTING) {
220220
routers.push(new HooksRouter());
221221
}
222-
222+
223223
let routes = routers.reduce((memo, router) => {
224224
return memo.concat(router.routes);
225225
}, []);
226226

227227
let appRouter = new PromiseRouter(routes);
228-
228+
229229
batch.mountOnto(appRouter);
230230

231231
api.use(appRouter.expressApp());

0 commit comments

Comments
 (0)