Git Product home page Git Product logo

parse-dashboard's Introduction

parse-repository-header-dashboard


Build Status Build Status Build Status Snyk Badge

Node Version auto-release

npm latest version npm beta version npm alpha version

Backers on Open Collective Sponsors on Open Collective License Forum Twitter


Parse Dashboard is a standalone dashboard for managing your Parse Server apps.


Getting Started

Install the dashboard from npm.

npm install -g parse-dashboard

You can launch the dashboard for an app with a single command by supplying an app ID, master key, URL, and name like this:

parse-dashboard --dev --appId yourAppId --masterKey yourMasterKey --serverURL "https://example.com/parse" --appName optionalName

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.

The --dev parameter disables production-ready security features. This parameter is useful when running Parse Dashboard on Docker. Using this parameter will:

  • allow insecure http connections from anywhere, bypassing the option allowInsecureHTTP
  • allow the Parse Server masterKey to be transmitted in cleartext without encryption
  • allow dashboard access without user authentication

⚠️ Do not use this parameter when deploying Parse Dashboard in a production environment.

After starting the dashboard, you can visit http://localhost:4040 in your browser:

Parse Dashboard

Compatibility

Parse Server

Parse Dashboard is compatible with the following Parse Server versions.

Parse Dashboard Version Parse Server Version Compatible
>=1.0 >= 2.1.4 ✅ Yes

Node.js

Parse Dashboard is continuously tested with the most recent releases of Node.js to ensure compatibility. We follow the Node.js Long Term Support plan and only test against versions that are officially supported and have not reached their end-of-life date.

Version Latest Version End-of-Life Compatible
Node.js 18 18.9.1 May 2025 ✅ Yes
Node.js 20 20.11.1 April 2026 ✅ Yes

Configuring Parse Dashboard

Options

Parameter Type Optional Default Example Description
apps Array<Object> no - [{ ... }, { ... }] The apps that are configured for the dashboard.
apps.scripts Array<Object> yes [] [{ ... }, { ... }] The scripts that can be executed for that app.
apps.scripts.title String no - 'Delete User' The title that will be displayed in the data browser context menu and the script run confirmation dialog.
apps.scripts.classes Array<String> no - ['_User'] The classes of Parse Objects for which the scripts can be executed.
apps.scripts.cloudCodeFunction String no - 'deleteUser' The name of the Parse Cloud Function to execute.
apps.scripts.showConfirmationDialog Bool yes false true Is true if a confirmation dialog should be displayed before the script is executed, false if the script should be executed immediately.
apps.scripts.confirmationDialogStyle String yes info critical The style of the confirmation dialog. Valid values: info (blue style), critical (red style).
apps.cloudConfigHistoryLimit Integer yes 100 100 The number of historic values that should be saved in the Cloud Config change history. Valid values: 0...Number.MAX_SAFE_INTEGER.

File

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:

{
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "MyApp"
    }
  ]
}

You can then start the dashboard using parse-dashboard --config parse-dashboard-config.json.

Environment variables

This only works when starting the app using the parse-dashboard command

There are also two methods you can use to configure the dashboard using environment variables.

Multiple apps

Provide the entire JSON configuration in PARSE_DASHBOARD_CONFIG and it will be parsed just like the config file.

Single app

You can also define each configuration option individually.

HOST: "0.0.0.0"
PORT: "4040"
MOUNT_PATH: "/"
PARSE_DASHBOARD_TRUST_PROXY: undefined // Or "1" to trust connection info from a proxy's X-Forwarded-* headers
PARSE_DASHBOARD_SERVER_URL: "http://localhost:1337/parse"
PARSE_DASHBOARD_MASTER_KEY: "myMasterKey"
PARSE_DASHBOARD_APP_ID: "myAppId"
PARSE_DASHBOARD_APP_NAME: "MyApp"
PARSE_DASHBOARD_USER_ID: "user1"
PARSE_DASHBOARD_USER_PASSWORD: "pass"
PARSE_DASHBOARD_SSL_KEY: "sslKey"
PARSE_DASHBOARD_SSL_CERT: "sslCert"
PARSE_DASHBOARD_CONFIG: undefined // Only for reference, it must not exist
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

Managing Multiple Apps

Managing multiple apps from the same dashboard is also possible. Simply add additional entries into the parse-dashboard-config.json file's "apps" array:

{
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse", // Self-hosted Parse Server
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "My Parse Server App"
    },
    {
      "serverURL": "http://localhost:1337/parse2", // Self-hosted Parse Server
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "My Parse Server App 2"
    }
  ]
}

GraphQL Playground

Parse Dashboard has a built-in GraphQL Playground to play with the auto-generated Parse GraphQL API.

You can setup the GraphQL Playground by passing the --graphQLServerURL option to the parse-dashboard CLI:

parse-dashboard --dev --appId yourAppId --masterKey yourMasterKey --serverURL "https://example.com/parse" --graphQLServerURL "https://example.com/graphql" --appName optionalName

The graphQLServerURL option is also available through an environment variable called PARSE_DASHBOARD_GRAPHQL_SERVER_URL:

HOST: "0.0.0.0"
PORT: "4040"
MOUNT_PATH: "/"
PARSE_DASHBOARD_SERVER_URL: "http://localhost:1337/parse"
PARSE_DASHBOARD_GRAPHQL_SERVER_URL: "http://localhost:1337/graphql"
PARSE_DASHBOARD_MASTER_KEY: "myMasterKey"
PARSE_DASHBOARD_APP_ID: "myAppId"
PARSE_DASHBOARD_APP_NAME: "MyApp"

You can also setup the GraphQL Playground in your parse-dashboard-config.json file:

{
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "graphQLServerURL": "http://localhost:1337/graphql",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "My Parse Server App"
    },
    {
      "serverURL": "http://localhost:1337/parse2",
      "graphQLServerURL": "http://localhost:1337/graphql2",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "My Parse Server App 2"
    }
  ]
}

After starting the dashboard, you can visit http://0.0.0.0:4040/apps/MyTestApp/api_console/graphql in your browser:

Parse Dashboard GraphQL Playground

App Icon Configuration

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:

{
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "My Parse Server App",
      "iconName": "MyAppIcon.png",
    }
  ],
  "iconsFolder": "icons"
}

App Background Color Configuration

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:

{
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "My Parse Server App",
      "primaryBackgroundColor": "#FFA500", // Orange
      "secondaryBackgroundColor": "#FF4500" // OrangeRed
    },
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "My Parse Server App [2]",
      "primaryBackgroundColor": "rgb(255, 0, 0)", // Red
      "secondaryBackgroundColor": "rgb(204, 0, 0)" // DarkRed
    }
  ]
}

Other Configuration Options

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.

To change the app to production, simply set production to true in your config file. The default value is false if not specified.

Prevent columns sorting

You can prevent some columns to be sortable by adding preventSort to columnPreference options in each app configuration

"apps": [
  {
    "appId": "local_app_id",
    "columnPreference": {
        "_User": [
          {
            "name": "createdAt",
            "visible": true,
            "preventSort": true
          },
          {
            "name": "updatedAt",
            "visible": true,
            "preventSort": false
          },
        ]
      }
    }
]

Custom order in the filter popup

If you have classes with a lot of columns and you filter them often with the same columns you can sort those to the top by extending the columnPreference setting with the filterSortToTop option:

"apps": [
  {
    "columnPreference": {
        "_User": [
          {
            "name": "objectId",
            "filterSortToTop": true
          },
          {
            "name": "email",
            "filterSortToTop": true
          }
        ]
      }
    }
]

Persistent Filters

The filters you save in the data browser of Parse Dashboard are only available for the current dashboard user in the current browser session. To make filters permanently available for all dashboard users of an app, you can define filters in the classPreference setting.

For example:

"apps": [{
  "classPreference": {
    "_Role": {
      "filters": [{
        "name": "Filter Name",
        "filter": [
          {
            "field": "objectId",
            "constraint": "exists"
          }
        ]
      }]
    }
  }
}]

You can conveniently create a filter definition without having to write it by hand by first saving a filter in the data browser, then exporting the filter definition under App Settings > Export Class Preferences.

Scripts

You can specify scripts to execute Cloud Functions with the scripts option:

"apps": [
  {
    "scripts": [
      {
        "title": "Delete Account",
        "classes": ["_User"],
        "cloudCodeFunction": "deleteAccount",
        "showConfirmationDialog": true,
        "confirmationDialogStyle": "critical"
      }
    ]
  }
]

You can also specify custom fields with the scrips option:

"apps": [
  {
    "scripts": [
      {
        "title": "Delete account",
        "classes": [
          {
            "name": "_User",
            "fields": [
              { "name": "createdAt", "validator": "value => value > new Date(\"2025\")" }
            ]
          }
        ],
        "cloudCodeFunction": "deleteAccount"
      }
    ]
  }
]

Next, define the Cloud Function in Parse Server that will be called. The object that has been selected in the data browser will be made available as a request parameter:

Parse.Cloud.define('deleteAccount', async (req) => {
  req.params.object.set('deleted', true);
  await req.params.object.save(null, {useMasterKey: true});
}, {
  requireMaster: true
});

The field which the script was invoked on can be accessed by selectedField:

Parse.Cloud.define('deleteAccount', async (req) => {
  if (req.params.selectedField !== 'objectId') {
    throw new Parse.Error(Parse.Error.SCRIPT_FAILED, 'Deleting accounts is only available on the objectId field.');
  }
  req.params.object.set('deleted', true);
  await req.params.object.save(null, {useMasterKey: true});
}, {
  requireMaster: true
});

⚠️ Depending on your Parse Server version you may need to set the Parse Server option encodeParseObjectInCloudFunction to true so that the selected object in the data browser is made available in the Cloud Function as an instance of Parse.Object. If the option is not set, is set to false, or you are using an older version of Parse Server, the object is made available as a plain JavaScript object and needs to be converted from a JSON object to a Parse.Object instance with req.params.object = Parse.Object.fromJSON(req.params.object);, before you can call any Parse.Object properties and methods on it.

For older versions of Parse Server:

Parse Server >=4.4.0 <6.2.0
Parse.Cloud.define('deleteAccount', async (req) => {
  req.params.object = Parse.Object.fromJSON(req.params.object);
  req.params.object.set('deleted', true);
  await req.params.object.save(null, {useMasterKey: true});
}, {
  requireMaster: true
});
Parse Server >=2.1.4 <4.4.0
Parse.Cloud.define('deleteAccount', async (req) => {
  if (!req.master || !req.params.object) {
    throw 'Unauthorized';
  }
  req.params.object = Parse.Object.fromJSON(req.params.object);
  req.params.object.set('deleted', true);
  await req.params.object.save(null, {useMasterKey: true});
});

Running as Express Middleware

Instead of starting Parse Dashboard with the CLI, you can also run it as an express middleware.

var express = require('express');
var ParseDashboard = require('parse-dashboard');

var dashboard = new ParseDashboard({
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "MyApp"
    }
  ]
});

var app = express();

// make the Parse Dashboard available at /dashboard
app.use('/dashboard', dashboard);

var httpServer = require('http').createServer(app);
httpServer.listen(4040);

If you want to run both Parse Server and Parse Dashboard on the same server/port, you can run them both as express middleware:

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var ParseDashboard = require('parse-dashboard');

var api = new ParseServer({
	// Parse Server settings
});

var options = { allowInsecureHTTP: false };

var dashboard = new ParseDashboard({
	// Parse Dashboard settings
}, options);

var app = express();

// make the Parse Server available at /parse
app.use('/parse', api);

// make the Parse Dashboard available at /dashboard
app.use('/dashboard', dashboard);

var httpServer = require('http').createServer(app);
httpServer.listen(4040);

Deploying Parse Dashboard

Preparing for Deployment

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.

Security Considerations

In order to securely deploy the dashboard without leaking your apps master key, you will need to use HTTPS and Basic Authentication.

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 middleware:

var trustProxy = true;
var dashboard = new ParseDashboard({
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "MyApp"
    }
  ],
  "trustProxy": 1
});

Security Checks

You can view the security status of your Parse Server by enabling the dashboard option enableSecurityChecks, and visiting App Settings > Security.

const dashboard = new ParseDashboard({
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "MyApp"
      "enableSecurityChecks": true
    }
  ],
});

Configuring Basic Authentication

You can configure your dashboard for Basic Authentication by adding usernames and passwords your parse-dashboard-config.json configuration file:

{
  "apps": [{"...": "..."}],
  "users": [
    {
      "user":"user1",
      "pass":"pass"
    },
    {
      "user":"user2",
      "pass":"pass"
    }
  ],
  "useEncryptedPasswords": true | false
}

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. You can generate encrypted passwords by using parse-dashboard --createUser, and pasting the result in your users config.

Multi-Factor Authentication (One-Time Password)

You can add an additional layer of security for a user account by requiring multi-factor authentication (MFA) for the user to login.

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.

The user requires an authenticator app to generate the one-time password. These apps are provided by many 3rd parties and mostly for free.

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, run parse-dashboard --createMFA to generate a mfa secret that you then add to the existing user configuration, for example:

{
  "apps": [{"...": "..."}],
  "users": [
    {
      "user":"user1",
      "pass":"pass",
      "mfa": "lmvmOIZGMTQklhOIhveqkumss"
    }
  ]
}

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.

Separating App Access Based on User Identity

If you have configured your dashboard to manage multiple applications, you can restrict the management of apps based on user identity.

To do so, update your parse-dashboard-config.json configuration file to match the following format:

{
  "apps": [{"...": "..."}],
  "users": [
     {
       "user":"user1",
       "pass":"pass1",
       "apps": [{"appId": "myAppId1"}, {"appId": "myAppId2"}]
     },
     {
       "user":"user2",
       "pass":"pass2",
       "apps": [{"appId": "myAppId1"}]
     }  ]
}

The effect of such a configuration is as follows:

When user1 logs in, he/she will be able to manage myAppId1 and myAppId2 from the dashboard.

When user2 logs in, he/she will only be able to manage myAppId1 from the dashboard.

Use Read-Only masterKey

Starting parse-server 2.6.5, it is possible to provide a readOnlyMasterKey to parse-server to prevent mutations on objects from a client. If you want to protect your dashboard with this feature, just use the readOnlyMasterKey instead of the masterKey. All write calls will fail.

Making an app read-only for all users

Start your parse-server with

{
"masterKey": "YOUR_MASTER_KEY_HERE",
"readOnlyMasterKey": "YOUR_READ_ONLY_MASTER_KEY",
}

Then in your dashboard configuration:

var trustProxy = true;
var dashboard = new ParseDashboard({
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "YOUR_READ_ONLY_MASTER_KEY",
      "appName": "MyApp"
    }
  ],
  "trustProxy": 1
});

Makings users read-only

Make sure you specify the readOnlyMasterKey for the apps that you want to use read-only feature in "apps" configuration. You can mark a user as a read-only user:

{
  "apps": [
    {
      "appId": "myAppId1",
      "masterKey": "myMasterKey1",
      "readOnlyMasterKey": "myReadOnlyMasterKey1",
      "serverURL": "myURL1",
      "port": 4040,
      "production": true
    },
    {
      "appId": "myAppId2",
      "masterKey": "myMasterKey2",
      "readOnlyMasterKey": "myReadOnlyMasterKey2",
      "serverURL": "myURL2",
      "port": 4041,
      "production": true
    }
  ],
  "users": [
    {
      "user":"user1",
      "pass":"pass1",
      "readOnly": true,
      "apps": [{"appId": "myAppId1"}, {"appId": "myAppId2"}]
    },
    {
      "user":"user2",
      "pass":"pass2",
      "apps": [{"appId": "myAppId1"}]
    }
  ]
}

This way user1 will have a readOnly access to myAppId1 and myAppId2

Making user's apps readOnly

Make sure you specify the readOnlyMasterKey for the apps that you want to use read-only feature in "apps" configuration. You can give read only access to a user on a per-app basis:

{
  "apps": [
    {
      "appId": "myAppId1",
      "masterKey": "myMasterKey1",
      "readOnlyMasterKey": "myReadOnlyMasterKey1",
      "serverURL": "myURL",
      "port": 4040,
      "production": true
    },
    {"...": "..."}
  ],
  "users": [
    {
      "user":"user",
      "pass":"pass",
      "apps": [{"appId": "myAppId", "readOnly": true}, {"appId": "myAppId2"}]
    }
  ]
}

With this configuration, user1 will have read only access to myAppId1 and read/write access to myAppId2.

Configuring Localized Push Notifications

With the latest version of the dashboard, it is possible to send localized messages for push notifications. You can provide a list of locales or languages you want to support for your dashboard users.

{
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "My Parse Server App",
      "iconName": "MyAppIcon.png",
      "supportedPushLocales": ["en", "ru", "fr"]
    }
  ],
  "iconsFolder": "icons"
}

Run with Docker

The official docker image is published on docker hub

Run the image with your config.json mounted as a volume

docker run -d -p 8080:4040 -v host/path/to/config.json:/src/Parse-Dashboard/parse-dashboard-config.json parseplatform/parse-dashboard --dev

You can also pass the appId, masterKey and serverURL as arguments:

docker run -d -p 4040:4040 parseplatform/parse-dashboard --dev --appId $APP_ID --masterKey $MASTER_KEY --serverURL $SERVER_URL

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).

In this example, we want to run the application in production mode at port 80 of the host machine.

docker run -d -p 80:8080 -v host/path/to/config.json:/src/Parse-Dashboard/parse-dashboard-config.json parse-dashboard --port 8080 --dev

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.

Features

(The following is not a complete list of features but a work in progress to build a comprehensive feature list.)

Browse as User

▶️ Core > Browser > Browse

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.

⚠️ 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.

Change Pointer Key

▶️ Core > Browser > Edit > Change pointer key

This feature allows you to change how a pointer is represented in the browser. By default, a pointer is represented by the objectId of the linked object. You can change this to any other column of the object class. For example, if class Installation has a field that contains a pointer to class User, the pointer will show the objectId of the user by default. You can change this to display the field email of the user, so that a pointer displays the user's email address instead.

Limitations

  • This does not work for an array of pointers; the pointer will always display the objectId.
  • System columns like createdAt, updatedAt, ACL cannot be set as pointer key.
  • This feature uses browser storage; switching to a different browser resets the pointer key to objectId.

⚠️ For each custom pointer key in each row, a server request is triggered to resolve the custom pointer key. For example, if the browser shows a class with 50 rows and each row contains 3 custom pointer keys, a total of 150 separate server requests are triggered.

CSV Export

▶️ Core > Browser > Export

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.

⚠️ 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.

Contributing

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.


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.

parse-dashboard's People

Contributors

404-html avatar alencarlucas avatar ashishbarvaliya avatar bgw avatar damianstasik avatar davimacedo avatar dblythy avatar dependabot[bot] avatar douglasmuraoka avatar dplewis avatar drew-gross avatar dvanwinkle avatar flovilmart avatar fn-faisal avatar gimdongwoo avatar github-actions[bot] avatar greenkeeper[bot] avatar jeremyplease avatar mtrezza avatar natanrolnik avatar parseplatformorg avatar patelmilanun avatar peterdotjs avatar sadakchap avatar semantic-release-bot avatar snyk-bot avatar ssamuli avatar timchunght avatar tomwfox avatar visualfanatic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

parse-dashboard's Issues

Warning: setState(...): Cannot update during an existing state transition ....

I ran my parse dashboard with following commands:
export PARSE_DASHBOARD_ALLOW_INSECURE_HTTP=1
npm run dashboard

I have a semi working parse dashboard, where I can click the first app and it leads me to the next page.

However, when I click the second app....the console on chrome gives me this error and wont let me progress to next page:
Warning: setState(...): Cannot update during an existing state transition (such as within render). Render methods should be a pure function of props and state.

asdasdasd

Please help!

Manage CLPs with Dashboard

Will it eventually be possible to manage Class Level Permissions in the new dashboard like we were able to previously on the hosted dashboard? This would be a very useful feature. Also great job on this, looks great!

Uncaught SyntaxError: Unexpected token <

I get this error:
Uncaught SyntaxError: Unexpected token < dashboard.bundle.js:1

and when I check under Parse-Dashboard this file is missing:

/bundles/dashboard.bundle.js

Migrate Schema

Is there any way to save current schema of classes (with all the fields) and to import it later?

Server not reachable: server version too low

I freshly pulled from this repository for Parse Dashboard and my parse-server module works on heroku...i've been using it with my apps, but I wanted to install the parse dashboard too as a seperate heroku app. Before even trying to push to heroku I get issues locally:

My config file for the parse dashboard has the server url in this format:
http://herokuappname.herokuapp.com/parse

When I check console errors in chrome on the Parse Dashboard it says: "Server not reachable: server version too low" also says in console that it couldnt find the serverInfo page on my parse-server.

Can someone please tell me what im doing wrong? Not sure if server version is too low, since I took the parse-server from github.

use shouldComponentUpdate on stateful components

I looks like there's only one component that uses shouldComponentUpdate.

React provides the shalowCompare addon which provides functionality similar to the react-addons-pure-render-mixin for ES6 classes.

https://facebook.github.io/react/docs/shallow-compare.html

var shallowCompare = require('react-addons-shallow-compare');
export class SampleComponent extends React.Component {
  shouldComponentUpdate(nextProps, nextState) {
    return shallowCompare(this, nextProps, nextState);
  }

  render() {
    return <div className={this.props.className}>foo</div>;
  }
}

If the parse team would be open to adding these checks to stateful components, it's a simple implementation which usually comes with decent performance benefits.

Clicking Class name displays no results. Database has records.

Make sure these boxes are checked before submitting your issue -- thanks for reporting issues back to Parse Dashboard!

  • [YES ] You're running version >=2.1.4 of Parse Server.
  • [ YES] You've searched through existing issues. Chances are that your issue has been reported or resolved before.

Environment Setup

Local

Steps to reproduce

If I inspect the page, I see the following error in the debugger:

XMLHttpRequest cannot load http://serverurlhere/parse/classes/Posts. Origin http://localhost:4040 is not allowed by Access-Control-Allow-Origin.

Logs/Trace

Cloud code doesn't show up in dashboard?

I ran local parse-server-example project. It comes with sample cloud code but it does not appear in dashboard. Unlike project from parse.com, it shows everything in core menu as in parse.com has.

Any idea on this?

Cannot deploy my app to App Engine

I followed all the steps to get the dashboard up and running, it works.

However, its created a problem for me. My app is currently hosted on Google App Engine.

I installed the dashboard files within the same folder where I have my parse server.
Parse Server Directory: dev/appName-server/"server files, cloud code, app.yaml e.t.c
Dashboard Directory: dev/appname-server/parse-dashboard

When I run my command to deploy my server code gcloud preview app deploy I get this problem

Beginning deployment...

ERROR: (gcloud.preview.app.deploy) There is a Dockerfile in the current directory, and the runtime field in /Users/myUserName/Documents/dev/appName-server/app.yaml is currently set to [runtime: nodejs]. To use your Dockerfile to build a custom runtime, set the runtime field in /Users/myUserName/Documents/dev/appName-server/app.yaml to [runtime: custom]. To continue using the [nodejs] runtime, please omit the Dockerfile from this directory. 

Even After removing the DockerFile in my dev/appName-server/ directory, my deployment gets stuck at

Verifying that Managed VMs are enabled and ready.
Provisioning remote build service.
Copying certificates for secure access. You may be prompted to create an SSH keypair.
Building and pushing image for module [default]
--- DOCKER BUILD OUTPUT ---

npm install failed with Node v5.7

I've install Parse Server on Digital Ocean and it's run smoothly but when install parse dashboard I got this error

npm WARN deprecated [email protected]: this package has been reintegrated into npm and is now out of date with respect to npm
npm WARN deprecated [email protected]: lodash@<3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
npm WARN deprecated [email protected]: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.

Server details

Ubuntu 14.04 64bit
NodeJS v. 5.7.1
npm v. 3.6.0

Unable to connect to server

Got everything setup now including one app. I get this error underneath the app that it can't connect to the parse-server on the localhost. If i replace the URL with the parse API url it works great! The parse-server is running on the localhost and apps can read and write from it. Any thoughts?

screen shot 2016-03-04 at 11 16 40 pm

HTTPS required message is displayed even when using HTTPS if dashboard is deployed to Heroku.

I basically cloned the repo and pushed it to Heroku. First, there was an error that Node version wasn't specified. I added Node version in package.json. Then there is this error

remote: > @ preinstall /tmp/build_59a48c67353dd6c9057be7bd1698879f
remote: > git update-index --skip-worktree Parse-Dashboard/parse-dashboard-config.json
remote:
remote: fatal: Not a git repository (or any parent up to mount point /tmp)

Does it need to be deployed another way?

npm ERR! @ dashboard: `node ./Parse-Dashboard/index.js & webpack --config build.config.js --progress --watch`

root@ks3270774 [~/parse-dashboard]# npm run dashboard

@ dashboard /root/parse-dashboard
node ./Parse-Dashboard/index.js & webpack --config build.config.js --progress --watch

/root/parse-dashboard/Parse-Dashboard/index.js:34
.then(config => {
^
SyntaxError: Unexpected token >
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3

/root/parse-dashboard/plugins/svg-prep.js:10
const fs = require('fs');
^^^^^
SyntaxError: Use of const in strict mode.
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object. (/root/parse-dashboard/base.config.js:11:21)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)

npm ERR! @ dashboard: node ./Parse-Dashboard/index.js & webpack --config build.config.js --progress --watch
npm ERR! Exit status 8
npm ERR!
npm ERR! Failed at the @ dashboard script.
npm ERR! This is most likely a problem with the package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node ./Parse-Dashboard/index.js & webpack --config build.config.js --progress --watch
npm ERR! You can get their info via:
npm ERR! npm owner ls
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 3.8.13-xxxx-grs-ipv6-64
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "run" "dashboard"
npm ERR! cwd /root/parse-dashboard
npm ERR! node -v v0.10.26
npm ERR! npm -v 1.4.3
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /root/parse-dashboard/npm-debug.log
npm ERR! not ok code 0
root@ks3270774 [~/parse-dashboard]#

NPM Warn on OSX..

Make sure these boxes are checked before submitting your issue -- thanks for reporting issues back to Parse Dashboard!

  • [ x] You're running version >=2.1.4 of Parse Server.
  • [ x] You've searched through existing issues. Chances are that your issue has been reported or resolved before.

Environment Setup

OSX El Captain

Steps to reproduce

git clone
cd into folder
npm install

Logs/Trace

npm WARN package.json [email protected] license should be a valid SPDX license expression

> [email protected] postinstall /Users/gateway/Documents/Parse-Server/parse-dashboard/node_modules/history
> node -e "require('fs').stat('lib', function (e, s) { process.exit(e || !s.isDirectory() ? 1 : 0) })" || npm run build

npm WARN deprecated [email protected]: this package has been reintegrated into npm and is now out of date with respect to npm
npm WARN deprecated [email protected]: lodash@<3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
npm WARN deprecated [email protected]: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
gatewaysmacpro:parse-dashboard gateway$ npm version
{ 'parse-dashboard': '2.0.0',
  npm: '2.14.12',
  ares: '1.10.1-DEV',
  http_parser: '2.5.1',
  icu: '56.1',
  modules: '46',
  node: '4.3.0',
  openssl: '1.0.2f',
  uv: '1.8.0',
  v8: '4.5.103.35',
  zlib: '1.2.8' }

build failing with [email protected]

We have latest Node.js yet we can't get it to build. We also have the latest version of parse-server up and running so all dependancies should be met? Somewhere else in the log it mentioned that our OS is not supported? How can it be that we can run parse-server with no problems and can't install the dashboard because the OS isn't supported?

screen shot 2016-03-04 at 7 14 24 pm

How to make https for parse dashboard?

Make sure these boxes are checked before submitting your issue -- thanks for reporting issues back to Parse Dashboard!

  • [ yes] You're running version >=2.1.4 of Parse Server.
  • [ yes] You've searched through existing issues. Chances are that your issue has been reported or resolved before.

Environment Setup

Ubuntu Server

Problem

I wish to know what is the steps or any clue on implementing the https on ubuntu server. Currently I'm using Apache2 and i already enabled the HTTPS from using the guid in Ubuntu, but unfortunately I doesn't know how to turn on the https for the nodejs. I'm refering the link to configure the https.

Blank screen opening localhost:4040

Hi,

might be completely stupid question but still, i am trying to set up this on windows server 2012 r2 with npm 3.8.1 and Node.js 4.3.2 all goes well but when i am trying to access dashboard (i have set link to app hosted on parse.com) i get white screen on localhost:4040. Any idea?

Thanks a lot.

Parse Dashboard

Hello

When i locate to localhost:4040 only white screen appear can you help me please ?

Regards

SyntaxError ?

Hi, I follow all the steps and when I would like to run the dashboard, I got these errors :

/parse_server/parse-dashboard/Parse-Dashboard/index.js:18
.then(config => {
^^
SyntaxError: Unexpected token =>
at exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:443:25)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
/parse_server/parse-dashboard/plugins/svg-prep.js:10
const fs = require('fs');
^^^^^
SyntaxError: Use of const in strict mode.
at exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:443:25)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object. (/Users/charlyberthet/Documents/_projets/butler/parse_server/parse-dashboard/base.config.js:11:21)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)

Could you explain me what I missed ?
Thanks

No apps loaded if at least one app is non-responsive

I ran into this when I first configured Dashboard with a Parse Server app that had not been deployed yet, but I can see people running into this if their app is down or unresponsive for whatever reason.

Steps to reproduce:

  1. Make sure you have Parse Dashboard up and running with at least one working app.
  2. Add a new apps item to your parse-dashboard-config.json where the server URL is not an actual Parse Server.
  3. Visit http://localhost:4040/

Expected:

  • Dashboard should show the one working app, and some indication that the one other app is non-responsive and/or misconfigured.

Actual Results:

  • Dashboard shows no apps.

Blank screen with nginx reverse proxy

I'm accessing nginx on my server via an SSL connection and passing the request to the dashboard express app via a reverse proxy. The title of the tab gets named "Parse Dashboard" but the screen is completely blank.

My dashboard config is:

{
  "apps": [
    {
      "serverURL": "https://SERVER_IP/api/data",
      "appId": "XXXXX",
      "masterKey": "XXXX",
      "appName": "APPNAME"
    }
  ],
  "users": [
    {
      "user":"user1",
      "pass":"XXXXX"
    },
    {
      "user":"user2",
      "pass":"XXXXX"
    }
  ]
}

And the nginx proxy config is:

location /dashboard {
        proxy_pass http://127.0.0.1:4040;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
    }

I'm using a similar configuration for the express app that runs parse-server and that works flawlessly. Any idea what could be going wrong here? If I run the dashboard locally it works perfectly fine.

Best way to update?

This may be a trivial question, but is the best way to update Parse Dashboard just by pulling the repo again? No other configuration needed? This isn't an npm module like Parse Server so it is updated differently right?

Improve the dashboard experience when deploying to Heroku or other remote machines

Currently, deploying the dashboard to Heroku or similar services is awkward because we go to great lengths to ensure people don't accidentally leak their master key. This is useful, but can also make deploying difficult due to early SSL termination, untrusted proxies, and so on.

This would be a good first PR for someone new to the dashboard, but probably not so much to someone who is new to web security.

Open source license?

It's fantastic that the source code for the dashboard has been made available to developers. But the current license is not an open source license, because it doesn't allow distributing modifications of the software.

From the introduction blog post:

We hope to see the Parse community take ownership of the Parse Dashboard and drive the creation of new features and distribution methods.

To enable these contributions from the community, please consider adding a permissive open source license, such as the BSD license that Parse Server is licensed with.

Parse Dashboard can only be remotely accessed via HTTPS

After setting up the dashboard, I get the message "Parse Dashboard can only be remotely accessed via HTTPS".
I am hosting my backend on Digital Ocean (my domain is from Godaddy, but I didn't point to my IP yet), my dashboard url format: http://xxx.xxx.xxx.xxx:4040.
I am a mobile developer and I don't have experience on setting up https. Please tell me how to fix this!

npm install failed

I download the zip file from github, then extract it and run "npm install" but i get this error. Can anyone help me out? Thanks in advance.

untitled

User collection empty

As title said, the User collection is empty.
In mongodb, there are around 10 users.
I guess this issue is similar to #825.
(When I use Android to request user list, the result is empty. But if I request for ONE (1) user, it works)

Access Denied to photos

Make sure these boxes are checked before submitting your issue -- thanks for reporting issues back to Parse Dashboard!

  • [ x] You're running version >=2.1.4 of Parse Server.
  • [ x] You've searched through existing issues. Chances are that your issue has been reported or resolved before.

Environment Setup

parse dashboard running on osx
parse server running on a heroku which had data migrated over

Steps to reproduce

from an existing migration with photos, click on the photo in the browser can you get

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>E789314D2CDFAF82</RequestId>
<HostId>
3fVSHoF49jP3JwBL3YKZfKE58SnRQzUmgug3zOBke1wd3p45bLpjZWgjJRkL9+wHyCFoab1B9vc=
</HostId>
</Error> 

Logs/Trace

Unable to upload files

Make sure these boxes are checked before submitting your issue -- thanks for reporting issues back to Parse Dashboard!

  • [√ ] You're running version >=2.1.4 of Parse Server.
  • [ √] You've searched through existing issues. Chances are that your issue has been reported or resolved before.

Environment Setup

Parse Server 2.1.4 on Heroku
Database on Mongolab
Not yet using S3 adapter, so still on the default Gridstore for saving new files

Steps to reproduce

Try and upload file (image) in dashboard

Logs/Trace

Error saying "Unable to connect to Parse API" when trying to upload a file.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.