parse-dashboard 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,619 @@
1
+ # Parse Dashboard <!-- omit in toc -->
2
+
3
+ [![Greenkeeper badge](https://badges.greenkeeper.io/parse-community/parse-dashboard.svg)](https://greenkeeper.io/)
4
+ [![Build Status](https://img.shields.io/travis/parse-community/parse-dashboard/master.svg?style=flat)](https://travis-ci.org/parse-community/parse-dashboard)
5
+ [![npm version](https://img.shields.io/npm/v/parse-dashboard.svg?style=flat)](https://www.npmjs.com/package/parse-dashboard)
6
+ [![Join The Conversation](https://img.shields.io/discourse/https/community.parseplatform.org/topics.svg)](https://community.parseplatform.org/c/parse-server)
7
+ [![Backers on Open Collective](https://opencollective.com/parse-server/backers/badge.svg)][open-collective-link]
8
+ [![Sponsors on Open Collective](https://opencollective.com/parse-server/sponsors/badge.svg)][open-collective-link]
9
+ [![License][license-svg]][license-link]
10
+ [![Twitter Follow](https://img.shields.io/twitter/follow/ParsePlatform.svg?label=Follow%20us%20on%20Twitter&style=social)](https://twitter.com/intent/follow?screen_name=ParsePlatform)
11
+
12
+ Parse Dashboard is a standalone dashboard for managing your [Parse Server](https://github.com/ParsePlatform/parse-server) apps.
13
+
14
+ - [Getting Started](#getting-started)
15
+ - [Local Installation](#local-installation)
16
+ - [Configuring Parse Dashboard](#configuring-parse-dashboard)
17
+ - [File](#file)
18
+ - [Environment variables](#environment-variables)
19
+ - [Multiple apps](#multiple-apps)
20
+ - [Single app](#single-app)
21
+ - [Managing Multiple Apps](#managing-multiple-apps)
22
+ - [GraphQL Playground](#graphql-playground)
23
+ - [App Icon Configuration](#app-icon-configuration)
24
+ - [App Background Color Configuration](#app-background-color-configuration)
25
+ - [Other Configuration Options](#other-configuration-options)
26
+ - [Prevent columns sorting](#prevent-columns-sorting)
27
+ - [Running as Express Middleware](#running-as-express-middleware)
28
+ - [Deploying Parse Dashboard](#deploying-parse-dashboard)
29
+ - [Preparing for Deployment](#preparing-for-deployment)
30
+ - [Security Considerations](#security-considerations)
31
+ - [Configuring Basic Authentication](#configuring-basic-authentication)
32
+ - [Multi-Factor Authentication (One-Time Password)](#multi-factor-authentication-one-time-password)
33
+ - [Separating App Access Based on User Identity](#separating-app-access-based-on-user-identity)
34
+ - [Use Read-Only masterKey](#use-read-only-masterkey)
35
+ - [Making an app read-only for all users](#making-an-app-read-only-for-all-users)
36
+ - [Makings users read-only](#makings-users-read-only)
37
+ - [Making user's apps readOnly](#making-users-apps-readonly)
38
+ - [Configuring Localized Push Notifications](#configuring-localized-push-notifications)
39
+ - [Run with Docker](#run-with-docker)
40
+ - [Features](#features)
41
+ - [Browse as User](#browse-as-user)
42
+ - [CSV Export](#csv-export)
43
+ - [Contributing](#contributing)
44
+
45
+ # Getting Started
46
+
47
+ [Node.js](https://nodejs.org) version >= 12 is required to run the dashboard. You also need to be using Parse Server version 2.1.4 or higher.
48
+
49
+ # Local Installation
50
+
51
+ Install the dashboard from `npm`.
52
+
53
+ ```
54
+ npm install -g parse-dashboard
55
+ ```
56
+
57
+ You can launch the dashboard for an app with a single command by supplying an app ID, master key, URL, and name like this:
58
+
59
+ ```
60
+ parse-dashboard --dev --appId yourAppId --masterKey yourMasterKey --serverURL "https://example.com/parse" --appName optionalName
61
+ ```
62
+
63
+ You may set the host, port and mount path by supplying the `--host`, `--port` and `--mountPath` options to parse-dashboard. You can use anything you want as the app name, or leave it out in which case the app ID will be used.
64
+
65
+ NB: the `--dev` parameter is disabling production-ready security features, do not use this parameter when starting the dashboard in production. This parameter is useful if you are running on docker.
66
+
67
+ After starting the dashboard, you can visit http://localhost:4040 in your browser:
68
+
69
+ ![Parse Dashboard](.github/dash-shot.png)
70
+
71
+ ## Configuring Parse Dashboard
72
+
73
+ ### File
74
+
75
+ You can also start the dashboard from the command line with a config file. To do this, create a new file called `parse-dashboard-config.json` inside your local Parse Dashboard directory hierarchy. The file should match the following format:
76
+
77
+ ```json
78
+ {
79
+ "apps": [
80
+ {
81
+ "serverURL": "http://localhost:1337/parse",
82
+ "appId": "myAppId",
83
+ "masterKey": "myMasterKey",
84
+ "appName": "MyApp"
85
+ }
86
+ ]
87
+ }
88
+ ```
89
+
90
+ You can then start the dashboard using `parse-dashboard --config parse-dashboard-config.json`.
91
+
92
+ ### Environment variables
93
+
94
+ > This only works when starting the app using the `parse-dashboard` command
95
+
96
+ There are also two methods you can use to configure the dashboard using environment variables.
97
+
98
+ #### Multiple apps
99
+
100
+ Provide the entire JSON configuration in `PARSE_DASHBOARD_CONFIG` and it will be parsed just like the config file.
101
+
102
+ #### Single app
103
+
104
+ You can also define each configuration option individually.
105
+
106
+ ```
107
+ HOST: "0.0.0.0"
108
+ PORT: "4040"
109
+ MOUNT_PATH: "/"
110
+ PARSE_DASHBOARD_TRUST_PROXY: undefined // Or "1" to trust connection info from a proxy's X-Forwarded-* headers
111
+ PARSE_DASHBOARD_SERVER_URL: "http://localhost:1337/parse"
112
+ PARSE_DASHBOARD_MASTER_KEY: "myMasterKey"
113
+ PARSE_DASHBOARD_APP_ID: "myAppId"
114
+ PARSE_DASHBOARD_APP_NAME: "MyApp"
115
+ PARSE_DASHBOARD_USER_ID: "user1"
116
+ PARSE_DASHBOARD_USER_PASSWORD: "pass"
117
+ PARSE_DASHBOARD_SSL_KEY: "sslKey"
118
+ PARSE_DASHBOARD_SSL_CERT: "sslCert"
119
+ PARSE_DASHBOARD_CONFIG: undefined // Only for reference, it must not exist
120
+ PARSE_DASHBOARD_COOKIE_SESSION_SECRET: undefined // set the cookie session secret, defaults to a random string. Use this option if you want sessions to work across multiple servers, or across restarts
121
+
122
+ ```
123
+
124
+ ## Managing Multiple Apps
125
+
126
+ Managing multiple apps from the same dashboard is also possible. Simply add additional entries into the `parse-dashboard-config.json` file's `"apps"` array:
127
+
128
+ ```json
129
+ {
130
+ "apps": [
131
+ {
132
+ "serverURL": "http://localhost:1337/parse", // Self-hosted Parse Server
133
+ "appId": "myAppId",
134
+ "masterKey": "myMasterKey",
135
+ "appName": "My Parse Server App"
136
+ },
137
+ {
138
+ "serverURL": "http://localhost:1337/parse2", // Self-hosted Parse Server
139
+ "appId": "myAppId",
140
+ "masterKey": "myMasterKey",
141
+ "appName": "My Parse Server App 2"
142
+ }
143
+ ]
144
+ }
145
+ ```
146
+
147
+ ## GraphQL Playground
148
+
149
+ Parse Dashboard has a built-in GraphQL Playground to play with the auto-generated [Parse GraphQL API](https://github.com/parse-community/parse-server#graphql).
150
+
151
+ You can setup the GraphQL Playground by passing the `--graphQLServerURL` option to the `parse-dashboard` CLI:
152
+
153
+ ```
154
+ parse-dashboard --dev --appId yourAppId --masterKey yourMasterKey --serverURL "https://example.com/parse" --graphQLServerURL "https://example.com/graphql" --appName optionalName
155
+ ```
156
+
157
+ The `graphQLServerURL` option is also available through an environment variable called `PARSE_DASHBOARD_GRAPHQL_SERVER_URL`:
158
+
159
+ ```
160
+ HOST: "0.0.0.0"
161
+ PORT: "4040"
162
+ MOUNT_PATH: "/"
163
+ PARSE_DASHBOARD_SERVER_URL: "http://localhost:1337/parse"
164
+ PARSE_DASHBOARD_GRAPHQL_SERVER_URL: "http://localhost:1337/graphql"
165
+ PARSE_DASHBOARD_MASTER_KEY: "myMasterKey"
166
+ PARSE_DASHBOARD_APP_ID: "myAppId"
167
+ PARSE_DASHBOARD_APP_NAME: "MyApp"
168
+ ```
169
+
170
+ You can also setup the GraphQL Playground in your `parse-dashboard-config.json` file:
171
+
172
+ ```json
173
+ {
174
+ "apps": [
175
+ {
176
+ "serverURL": "http://localhost:1337/parse",
177
+ "graphQLServerURL": "http://localhost:1337/graphql",
178
+ "appId": "myAppId",
179
+ "masterKey": "myMasterKey",
180
+ "appName": "My Parse Server App"
181
+ },
182
+ {
183
+ "serverURL": "http://localhost:1337/parse2",
184
+ "graphQLServerURL": "http://localhost:1337/graphql2",
185
+ "appId": "myAppId",
186
+ "masterKey": "myMasterKey",
187
+ "appName": "My Parse Server App 2"
188
+ }
189
+ ]
190
+ }
191
+ ```
192
+
193
+ After starting the dashboard, you can visit http://0.0.0.0:4040/apps/MyTestApp/api_console/graphql in your browser:
194
+
195
+ ![Parse Dashboard GraphQL Playground](.github/graphql-playground.png)
196
+
197
+ ## App Icon Configuration
198
+
199
+ Parse Dashboard supports adding an optional icon for each app, so you can identify them easier in the list. To do so, you *must* use the configuration file, define an `iconsFolder` in it, and define the `iconName` parameter for each app (including the extension). The path of the `iconsFolder` is relative to the configuration file. If you have installed ParseDashboard globally you need to use the full path as value for the `iconsFolder`. To visualize what it means, in the following example `icons` is a directory located under the same directory as the configuration file:
200
+
201
+ ```json
202
+ {
203
+ "apps": [
204
+ {
205
+ "serverURL": "http://localhost:1337/parse",
206
+ "appId": "myAppId",
207
+ "masterKey": "myMasterKey",
208
+ "appName": "My Parse Server App",
209
+ "iconName": "MyAppIcon.png",
210
+ }
211
+ ],
212
+ "iconsFolder": "icons"
213
+ }
214
+ ```
215
+
216
+ ## App Background Color Configuration
217
+
218
+ Parse Dashboard supports adding an optional background color for each app, so you can identify them easier in the list. To do so, you *must* use the configuration file, define an `primaryBackgroundColor` and `secondaryBackgroundColor` in it, parameter for each app. It is `CSS style`. To visualize what it means, in the following example `backgroundColor` is a configuration file:
219
+
220
+ ```json
221
+ {
222
+ "apps": [
223
+ {
224
+ "serverURL": "http://localhost:1337/parse",
225
+ "appId": "myAppId",
226
+ "masterKey": "myMasterKey",
227
+ "appName": "My Parse Server App",
228
+ "primaryBackgroundColor": "#FFA500", // Orange
229
+ "secondaryBackgroundColor": "#FF4500" // OrangeRed
230
+ },
231
+ {
232
+ "serverURL": "http://localhost:1337/parse",
233
+ "appId": "myAppId",
234
+ "masterKey": "myMasterKey",
235
+ "appName": "My Parse Server App [2]",
236
+ "primaryBackgroundColor": "rgb(255, 0, 0)", // Red
237
+ "secondaryBackgroundColor": "rgb(204, 0, 0)" // DarkRed
238
+ }
239
+ ]
240
+ }
241
+ ```
242
+
243
+ ## Other Configuration Options
244
+
245
+ You can set `appNameForURL` in the config file for each app to control the url of your app within the dashboard. This can make it easier to use bookmarks or share links on your dashboard.
246
+
247
+ To change the app to production, simply set `production` to `true` in your config file. The default value is false if not specified.
248
+
249
+ ### Prevent columns sorting
250
+
251
+ You can prevent some columns to be sortable by adding `preventSort` to columnPreference options in each app configuration
252
+
253
+ ```json
254
+
255
+ "apps": [
256
+ {
257
+ "appId": "local_app_id",
258
+ "columnPreference": {
259
+ "_User": [
260
+ {
261
+ "name": "createdAt",
262
+ "visible": true,
263
+ "preventSort": true
264
+ },
265
+ {
266
+ "name": "updatedAt",
267
+ "visible": true,
268
+ "preventSort": false
269
+ },
270
+ ]
271
+ }
272
+ }
273
+ ]
274
+ ```
275
+
276
+ # Running as Express Middleware
277
+
278
+ Instead of starting Parse Dashboard with the CLI, you can also run it as an [express](https://github.com/expressjs/express) middleware.
279
+
280
+ ```javascript
281
+ var express = require('express');
282
+ var ParseDashboard = require('parse-dashboard');
283
+
284
+ var dashboard = new ParseDashboard({
285
+ "apps": [
286
+ {
287
+ "serverURL": "http://localhost:1337/parse",
288
+ "appId": "myAppId",
289
+ "masterKey": "myMasterKey",
290
+ "appName": "MyApp"
291
+ }
292
+ ]
293
+ });
294
+
295
+ var app = express();
296
+
297
+ // make the Parse Dashboard available at /dashboard
298
+ app.use('/dashboard', dashboard);
299
+
300
+ var httpServer = require('http').createServer(app);
301
+ httpServer.listen(4040);
302
+ ```
303
+
304
+ If you want to run both [Parse Server](https://github.com/ParsePlatform/parse-server) and Parse Dashboard on the same server/port, you can run them both as express middleware:
305
+
306
+ ```javascript
307
+ var express = require('express');
308
+ var ParseServer = require('parse-server').ParseServer;
309
+ var ParseDashboard = require('parse-dashboard');
310
+
311
+ var api = new ParseServer({
312
+ // Parse Server settings
313
+ });
314
+
315
+ var options = { allowInsecureHTTP: false };
316
+
317
+ var dashboard = new ParseDashboard({
318
+ // Parse Dashboard settings
319
+ }, options);
320
+
321
+ var app = express();
322
+
323
+ // make the Parse Server available at /parse
324
+ app.use('/parse', api);
325
+
326
+ // make the Parse Dashboard available at /dashboard
327
+ app.use('/dashboard', dashboard);
328
+
329
+ var httpServer = require('http').createServer(app);
330
+ httpServer.listen(4040);
331
+ ```
332
+
333
+ # Deploying Parse Dashboard
334
+
335
+ ## Preparing for Deployment
336
+
337
+ Make sure the server URLs for your apps can be accessed by your browser. If you are deploying the dashboard, then `localhost` urls will not work.
338
+
339
+ ## Security Considerations
340
+ In order to securely deploy the dashboard without leaking your apps master key, you will need to use HTTPS and Basic Authentication.
341
+
342
+ The deployed dashboard detects if you are using a secure connection. If you are deploying the dashboard behind a load balancer or front-facing proxy, then the app won't be able to detect that the connection is secure. In this case, you can start the dashboard with the `--trustProxy=1` option (or set the PARSE_DASHBOARD_TRUST_PROXY config var to 1) to rely on the X-Forwarded-* headers for the client's connection security. This is useful for hosting on services like Heroku, where you can trust the provided proxy headers to correctly determine whether you're using HTTP or HTTPS. You can also turn on this setting when using the dashboard as [express](https://github.com/expressjs/express) middleware:
343
+
344
+ ```javascript
345
+ var trustProxy = true;
346
+ var dashboard = new ParseDashboard({
347
+ "apps": [
348
+ {
349
+ "serverURL": "http://localhost:1337/parse",
350
+ "appId": "myAppId",
351
+ "masterKey": "myMasterKey",
352
+ "appName": "MyApp"
353
+ }
354
+ ],
355
+ "trustProxy": 1
356
+ });
357
+ ```
358
+
359
+
360
+
361
+ ### Configuring Basic Authentication
362
+ You can configure your dashboard for Basic Authentication by adding usernames and passwords your `parse-dashboard-config.json` configuration file:
363
+
364
+ ```json
365
+ {
366
+ "apps": [{"...": "..."}],
367
+ "users": [
368
+ {
369
+ "user":"user1",
370
+ "pass":"pass"
371
+ },
372
+ {
373
+ "user":"user2",
374
+ "pass":"pass"
375
+ }
376
+ ],
377
+ "useEncryptedPasswords": true | false
378
+ }
379
+ ```
380
+
381
+ You can store the password in either `plain text` or `bcrypt` formats. To use the `bcrypt` format, you must set the config `useEncryptedPasswords` parameter to `true`.
382
+ You can generate encrypted passwords by using `parse-dashboard --createUser`, and pasting the result in your users config.
383
+
384
+ ### Multi-Factor Authentication (One-Time Password)
385
+
386
+ You can add an additional layer of security for a user account by requiring multi-factor authentication (MFA) for the user to login.
387
+
388
+ With MFA enabled, a user must provide a one-time password that is typically bound to a physical device, in addition to their login password. This means in addition to knowing the login password, the user needs to have physical access to a device to generate the one-time password. This one-time password is time-based (TOTP) and only valid for a short amount of time, typically 30 seconds, until it expires.
389
+
390
+ The user requires an authenticator app to generate the one-time password. These apps are provided by many 3rd parties and mostly for free.
391
+
392
+ If you create a new user by running `parse-dashboard --createUser`, you will be asked whether you want to enable MFA for the new user. To enable MFA for an existing user,
393
+ run `parse-dashboard --createMFA` to generate a `mfa` secret that you then add to the existing user configuration, for example:
394
+
395
+ ```json
396
+ {
397
+ "apps": [{"...": "..."}],
398
+ "users": [
399
+ {
400
+ "user":"user1",
401
+ "pass":"pass",
402
+ "mfa": "lmvmOIZGMTQklhOIhveqkumss"
403
+ }
404
+ ]
405
+ }
406
+ ```
407
+
408
+ Parse Dashboard follows the industry standard and supports the common OTP algorithm `SHA-1` by default, to be compatible with most authenticator apps. If you have specific security requirements regarding TOTP characteristics (algorithm, digit length, time period) you can customize them by using the guided configuration mentioned above.
409
+
410
+ ### Separating App Access Based on User Identity
411
+ If you have configured your dashboard to manage multiple applications, you can restrict the management of apps based on user identity.
412
+
413
+ To do so, update your `parse-dashboard-config.json` configuration file to match the following format:
414
+
415
+ ```json
416
+ {
417
+ "apps": [{"...": "..."}],
418
+ "users": [
419
+ {
420
+ "user":"user1",
421
+ "pass":"pass1",
422
+ "apps": [{"appId": "myAppId1"}, {"appId": "myAppId2"}]
423
+ },
424
+ {
425
+ "user":"user2",
426
+ "pass":"pass2",
427
+ "apps": [{"appId": "myAppId1"}]
428
+ } ]
429
+ }
430
+ ```
431
+ The effect of such a configuration is as follows:
432
+
433
+ When `user1` logs in, he/she will be able to manage `myAppId1` and `myAppId2` from the dashboard.
434
+
435
+ When *`user2`* logs in, he/she will only be able to manage *`myAppId1`* from the dashboard.
436
+
437
+ ## Use Read-Only masterKey
438
+
439
+ Starting parse-server 2.6.5, it is possible to provide a `readOnlyMasterKey` to parse-server to prevent mutations on objects from a client.
440
+ If you want to protect your dashboard with this feature, just use the `readOnlyMasterKey` instead of the `masterKey`. All write calls will fail.
441
+
442
+ ### Making an app read-only for all users
443
+
444
+ Start your `parse-server` with
445
+
446
+ ```json
447
+ {
448
+ "masterKey": "YOUR_MASTER_KEY_HERE",
449
+ "readOnlyMasterKey": "YOUR_READ_ONLY_MASTER_KEY",
450
+ }
451
+ ```
452
+
453
+ Then in your dashboard configuration:
454
+
455
+ ```javascript
456
+ var trustProxy = true;
457
+ var dashboard = new ParseDashboard({
458
+ "apps": [
459
+ {
460
+ "serverURL": "http://localhost:1337/parse",
461
+ "appId": "myAppId",
462
+ "masterKey": "YOUR_READ_ONLY_MASTER_KEY",
463
+ "appName": "MyApp"
464
+ }
465
+ ],
466
+ "trustProxy": 1
467
+ });
468
+ ```
469
+
470
+ ### Makings users read-only
471
+
472
+ Make sure you specify the `readOnlyMasterKey` for the apps that you want to use read-only feature in "apps" configuration.
473
+ You can mark a user as a read-only user:
474
+
475
+ ```json
476
+ {
477
+ "apps": [
478
+ {
479
+ "appId": "myAppId1",
480
+ "masterKey": "myMasterKey1",
481
+ "readOnlyMasterKey": "myReadOnlyMasterKey1",
482
+ "serverURL": "myURL1",
483
+ "port": 4040,
484
+ "production": true
485
+ },
486
+ {
487
+ "appId": "myAppId2",
488
+ "masterKey": "myMasterKey2",
489
+ "readOnlyMasterKey": "myReadOnlyMasterKey2",
490
+ "serverURL": "myURL2",
491
+ "port": 4041,
492
+ "production": true
493
+ }
494
+ ],
495
+ "users": [
496
+ {
497
+ "user":"user1",
498
+ "pass":"pass1",
499
+ "readOnly": true,
500
+ "apps": [{"appId": "myAppId1"}, {"appId": "myAppId2"}]
501
+ },
502
+ {
503
+ "user":"user2",
504
+ "pass":"pass2",
505
+ "apps": [{"appId": "myAppId1"}]
506
+ }
507
+ ]
508
+ }
509
+ ```
510
+
511
+ This way `user1` will have a readOnly access to `myAppId1` and `myAppId2`
512
+
513
+ ### Making user's apps readOnly
514
+
515
+ Make sure you specify the `readOnlyMasterKey` for the apps that you want to use read-only feature in "apps" configuration.
516
+ You can give read only access to a user on a per-app basis:
517
+
518
+ ```json
519
+ {
520
+ "apps": [
521
+ {
522
+ "appId": "myAppId1",
523
+ "masterKey": "myMasterKey1",
524
+ "readOnlyMasterKey": "myReadOnlyMasterKey1",
525
+ "serverURL": "myURL",
526
+ "port": 4040,
527
+ "production": true
528
+ },
529
+ {"...": "..."}
530
+ ],
531
+ "users": [
532
+ {
533
+ "user":"user",
534
+ "pass":"pass",
535
+ "apps": [{"appId": "myAppId", "readOnly": true}, {"appId": "myAppId2"}]
536
+ }
537
+ ]
538
+ }
539
+ ```
540
+
541
+ With this configuration, user1 will have read only access to `myAppId1` and read/write access to `myAppId2`.
542
+
543
+ ## Configuring Localized Push Notifications
544
+
545
+ With the latest version of the [dashboard](https://www.npmjs.com/package/parse-dashboard), it is possible to send localized messages for push notifications.
546
+ You can provide a list of locales or languages you want to support for your dashboard users.
547
+
548
+ ```json
549
+ {
550
+ "apps": [
551
+ {
552
+ "serverURL": "http://localhost:1337/parse",
553
+ "appId": "myAppId",
554
+ "masterKey": "myMasterKey",
555
+ "appName": "My Parse Server App",
556
+ "iconName": "MyAppIcon.png",
557
+ "supportedPushLocales": ["en", "ru", "fr"]
558
+ }
559
+ ],
560
+ "iconsFolder": "icons"
561
+ }
562
+ ```
563
+
564
+ ## Run with Docker
565
+
566
+ The official docker image is published on [docker hub](https://hub.docker.com/r/parseplatform/parse-dashboard)
567
+
568
+ Run the image with your ``config.json`` mounted as a volume
569
+
570
+ ```
571
+ docker run -d -p 8080:4040 -v host/path/to/config.json:/src/Parse-Dashboard/parse-dashboard-config.json parseplatform/parse-dashboard --dev
572
+ ```
573
+
574
+ You can also pass the appId, masterKey and serverURL as arguments:
575
+
576
+ ```
577
+ docker run -d -p 4040:4040 parseplatform/parse-dashboard --dev --appId $APP_ID --masterKey $MASTER_KEY --serverURL $SERVER_URL
578
+ ```
579
+
580
+ By default, the container will start the app at port 4040 inside the container. However, you can run custom command as well (see ``Deploying in production`` for custom setup).
581
+
582
+ In this example, we want to run the application in production mode at port 80 of the host machine.
583
+
584
+ ```
585
+ docker run -d -p 80:8080 -v host/path/to/config.json:/src/Parse-Dashboard/parse-dashboard-config.json parse-dashboard --port 8080 --dev
586
+ ```
587
+
588
+ If you are not familiar with Docker, ``--port 8080`` will be passed in as argument to the entrypoint to form the full command ``npm start -- --port 8080``. The application will start at port 8080 inside the container and port ``8080`` will be mounted to port ``80`` on your host machine.
589
+
590
+ # Features
591
+ *(The following is not a complete list of features but a work in progress to build a comprehensive feature list.)*
592
+
593
+ ## Browse as User
594
+
595
+ ▶️ *Core > Browser > Browse*
596
+
597
+ This feature allows you to use the data browser as another user, respecting that user's data permissions. For example, you will only see records and fields the user has permission to see.
598
+
599
+ > ⚠️ Logging in as another user will trigger the same Cloud Triggers as if the user logged in themselves using any other login method. Logging in as another user requires to enter that user's password.
600
+
601
+ ## CSV Export
602
+
603
+ ▶️ *Core > Browser > Export*
604
+
605
+ This feature will take either selected rows or all rows of an individual class and saves them to a CSV file, which is then downloaded. CSV headers are added to the top of the file matching the column names.
606
+
607
+ > ⚠️ There is currently a 10,000 row limit when exporting all data. If more than 10,000 rows are present in the class, the CSV file will only contain 10,000 rows.
608
+
609
+ # Contributing
610
+
611
+ We really want Parse to be yours, to see it grow and thrive in the open source community. Please see the [Contributing to Parse Dashboard guide](CONTRIBUTING.md).
612
+
613
+ -----
614
+
615
+ As of April 5, 2017, Parse, LLC has transferred this code to the parse-community organization, and will no longer be contributing to or distributing this code.
616
+
617
+ [license-svg]: https://img.shields.io/badge/license-BSD-lightgrey.svg
618
+ [license-link]: LICENSE
619
+ [open-collective-link]: https://opencollective.com/parse-server
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../Parse-Dashboard');