The script currently writes a package.json with a dependency on parse-server version 2.2. This should probably always be automatically updated to the latest version using some CI magic.
210 lines
4.8 KiB
Bash
Executable File
210 lines
4.8 KiB
Bash
Executable File
#!/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"
|