diff --git a/bootstrap.sh b/bootstrap.sh new file mode 100755 index 0000000000..25f9199bfa --- /dev/null +++ b/bootstrap.sh @@ -0,0 +1,163 @@ +#!/bin/sh +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' +BOLD='\033[1m' +CHECK="${GREEN}\xE2\x9C\x93${NC}" +DEFAULT_MONGODB_URI='mongodb://localhost: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 'This will setup parse-server in the current directory' +confirm 'Y' 'Do you want to continue? (Y/n): ' + +check_node +check_npm + +echo "Setting up parse-server in $PWD" + +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 Application Name: ' + read -r APP_NAME + i=$(($i+1)) +done + +printf 'Enter your appId (leave empty to generate): ' +read -r APP_ID + +[[ $APP_ID = '' ]] && APP_ID=$(genstring) && printf "\n$APP_ID\n\n" + +printf 'Enter your masterKey (leave empty to generate): ' +read -r MASTER_KEY + +[[ $MASTER_KEY = '' ]] && MASTER_KEY=$(genstring) && printf "\n$MASTER_KEY\n\n" + +printf "Enter your mongodbURI (%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", + "mongodbURI": "$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", + "scripts": { + "start": "parse-server ./config.json" + }, + "dependencies": { + "parse-server": "^2.0.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 + +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"