#!/bin/bash RED='\033[0;31m' GREEN='\033[0;32m' NC='\033[0m' BOLD='\033[1m' CHECK="${GREEN}\xE2\x9C\x93${NC}" DEFAULT_MONGODB_URI='mongodb://127.0.0.1:27017/parse' confirm() { DEFAULT=$1; shift printf "$@" read -r YN if [ "$YN" = "" ] && [ "$DEFAULT" = 'N' ]; then exit 1 elif [ "$YN" != "" ] && [ "$YN" != "y" ] && [ "$YN" != "Y" ]; then echo 'Bye Bye!' exit 1 fi } genstring() { local l=$1 [ "$l" == "" ] && l=40 LC_ALL=C tr -dc A-Za-z0-9 < /dev/urandom | head -c ${l} } check_node() { node=`which node 2>&1` ret=$? if [ $ret -eq 0 ] && [ -x "$node" ]; then echo "${CHECK} node:" $(node -v) (exit 0) else echo "parse-server cannot be installed without Node.js." >&2 exit 1 fi } check_npm() { npm=`which npm 2>&1` ret=$? if [ $ret -eq 0 ] && [ -x "$npm" ]; then echo "${CHECK} npm:" $(npm -v) (exit 0) else echo "parse-server cannot be installed without npm." >&2 exit 1 fi } echo '' echo ' `.-://////:-..` `:/oooooooooooooooo+:.` `:+oooooooooooooooooooooo+/` :+ooooooooooooooooooooooooooo/. .+oooooooooooooo/:.....-:+ooooooo- .+ooooooooooooo/` .:///:-` -+oooooo: `+ooooooooooooo: `/ooooooo+- `ooooooo- :oooooooooooooo :ooooooooo+` /oooooo+ +ooooooooooooo/ +ooooooooo+ /ooooooo. oooooooooooooo+ ooooooooo` .oooooooo. +ooooooooooo+/: `ooooooo` .:ooooooooo. :ooooooo+.````````````` /+oooooooooo+ `+oooooo- `ooo+ /oooooooooooooooooooo- .+ooooo/ :/:` -ooooooooooooooooooo: .+ooooo+:-..-/ooooooooooooooooooo- :+ooooooooooooooooooooooooooo/. `:+oooooooooooooooooooooo+/` `:/oooooooooooooooo+:.` `.-://////:-..` parse-server ' INSTALL_DIR="" printf "Enter an installation directory\n" printf "(%s): " "${PWD}" read -r INSTALL_DIR if [ "$INSTALL_DIR" = "" ]; then INSTALL_DIR="${PWD}" fi echo '' printf "This will setup parse-server in %s\n" "${INSTALL_DIR}" confirm 'Y' 'Do you want to continue? (Y/n): ' check_node check_npm printf "Setting up parse-server in %s\n" "${INSTALL_DIR}" if [ -d "${INSTALL_DIR}" ]; then echo "${CHECK} ${INSTALL_DIR} exists" else mkdir -p "${INSTALL_DIR}" echo "${CHECK} Created ${INSTALL_DIR}" fi cd "${INSTALL_DIR}" if [ -f "package.json" ]; then echo "\n${RED}package.json exists${NC}" confirm 'N' "Do you want to continue? \n${RED}this will erase your configuration${NC} (y/N): " fi if [ -f 'config.json' ]; then echo "\n${RED}config.json exists${NC}" confirm 'N' "Do you want to continue? \n${RED}this will erase your configuration${NC} (y/N): " fi APP_NAME='' i=0 while [ "$APP_NAME" = "" ] do [[ $i != 0 ]] && printf "${RED}An application name is required!${NC}\n" printf "Enter your ${BOLD}Application Name${NC}: " read -r APP_NAME i=$(($i+1)) done printf "Enter your ${BOLD}Application Id${NC} (leave empty to generate): " read -r APP_ID [[ $APP_ID = '' ]] && APP_ID=$(genstring) && printf "\n$APP_ID\n\n" printf "Enter your ${BOLD}Master Key${NC} (leave empty to generate): " read -r MASTER_KEY [[ $MASTER_KEY = '' ]] && MASTER_KEY=$(genstring) && printf "\n$MASTER_KEY\n\n" printf "Enter your ${BOLD}mongodbURI${NC} (%s): " $DEFAULT_MONGODB_URI read -r MONGODB_URI [[ $MONGODB_URI = '' ]] && MONGODB_URI="$DEFAULT_MONGODB_URI" cat > ./config.json << EOF { "appId": "${APP_ID}", "masterKey": "${MASTER_KEY}", "appName": "${APP_NAME}", "cloud": "./cloud/main", "databaseURI": "${MONGODB_URI}" } EOF echo "${CHECK} Created config.json" # Make a proper npm app name NPM_APP_NAME=$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]' | tr ' ' '-') cat > ./package.json << EOF { "name": "$NPM_APP_NAME", "description": "parse-server for $APP_NAME", "scripts": { "start": "parse-server config.json" }, "dependencies": { "parse-server": "^3.9.0" } } EOF echo "${CHECK} Created package.json" if [ -d "./cloud/" ]; then echo "${CHECK} cloud/ exists" else mkdir -p ./cloud echo "${CHECK} Created cloud/" fi if [ -e "./cloud/main.js" ]; then echo "${CHECK} cloud/main.js exists" else echo "${CHECK} Created cloud/main.js" cat > ./cloud/main.js << EOF // Cloud Code entry point EOF fi if [ -d "./public/" ]; then echo "${CHECK} public/ exists" else mkdir -p ./public echo "${CHECK} Created public/" fi echo "\n${CHECK} running npm install\n" npm install -s CURL_CMD=$(cat << EOF curl -X POST -H 'X-Parse-Application-Id: ${APP_ID}' \\ -H 'Content-Type: application/json' \\ -d '{"foo":"bar"}' http://localhost:1337/parse/classes/TestObject EOF) echo "\n${CHECK} Happy Parsing!\n\n" echo "${CHECK} Make sure you have ${BOLD}mongo${NC} listening on ${BOLD}${MONGODB_URI}${NC}" echo "${CHECK} start parse-server by running ${BOLD}npm start${NC}" echo "${CHECK} Test your setup with:\n\n${CURL_CMD}\n"